Exercice de Grammaire: Les Pronoms COD et le Pronom “EN”

body {
font-family: ‘Segoe UI’, Tahoma, Geneva, Verdana, sans-serif;
max-width: 100%;
margin: 0 auto;
padding: 20px;
background-color: #f9f9f9;
}
h1, h2, h3 {
color: #2c3e50;
}
.container {
background-color: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.subscription-form {
background-color: #e8f4f8;
padding: 20px;
border-radius: 8px;
margin-bottom: 30px;
}
.exercise-container {
display: none;
}
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input, select {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
}
button {
background-color: #3498db;
color: white;
border: none;
padding: 12px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
button:hover {
background-color: #2980b9;
}
.exercise-text {
line-height: 2;
font-size: 18px;
}
.gap {
border-bottom: 1px solid #333;
padding: 0 5px;
margin: 0 3px;
min-width: 50px;
display: inline-block;
}
input.gap-input {
width: 60px;
border: none;
border-bottom: 1px solid #333;
font-size: 16px;
text-align: center;
}
.result {
margin-top: 30px;
padding: 20px;
background-color: #eafaf1;
border-radius: 8px;
display: none;
}
.certificate {
text-align: center;
margin-top: 30px;
padding: 20px;
border: 2px solid #2c3e50;
border-radius: 8px;
display: none;
}
.difficulty-selector {
margin-bottom: 20px;
}
.error {
color: red;
font-size: 14px;
}
.grammar-reminder {
background-color: #fff3cd;
padding: 15px;
border-radius: 8px;
margin-bottom: 20px;
border-left: 4px solid #ffc107;
}
.grammar-reminder h4 {
margin-top: 0;
color: #856404;
}
.grammar-reminder p {
margin-bottom: 5px;
color: #856404;
}
#certificatePreview {
position: relative;
width: 100%;
height: 450px;
background-color: #fff;
border: 10px solid transparent;
border-image: linear-gradient(45deg, #3498db, #2980b9, #2c3e50, #1abc9c, #16a085) 1;
box-sizing: border-box;
overflow: hidden;
}
.certificate-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0.07;
z-index: 0;
background-position: center;
background-repeat: no-repeat;
background-size: 70%;
}
.certificate-content {
position: relative;
z-index: 1;
padding: 20px;
width: 100%;
height: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.certificate-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.certificate-title {
flex-grow: 1;
text-align: center;
}
.certificate-logo {
width: 120px;
height: 60px;
}
.certificate-footer {
display: flex;
justify-content: space-between;
align-items: flex-end;
}
.certificate-qr {
width: 120px;
height: 120px;
display: flex;
justify-content: center;
align-items: center;
}
.certificate-qr img {
max-width: 100%;
max-height: 100%;
}
.certificate-signature {
flex-grow: 1;
text-align: center;
}

Inscrivez-vous pour commencer l’exercice

Veuillez vous abonner et remplir vos informations pour accéder à l’exercice.

📚 Rappel grammatical

Pronoms COD (le, la, l’, les) : remplacent un complément d’objet direct (qui/quoi ?)

Pronom “EN” : remplace un complément introduit par “de” (quantité, partitif, indéfini)

Exemple : “Je mange la pomme” → “Je la mange” / “Je mange des pommes” → “J’en mange”

Complétez les phrases avec le bon pronom (COD ou “en”)

Choisissez le niveau de difficulté:

Facile
Moyen
Difficile

Les Pronoms COD et “EN” (Niveau Facile)

A. Situations quotidiennes
Marie achète une robe bleue. Elle porte ce soir.
Paul a des livres. Il lit un chaque semaine.
Tu vois ce film ? Oui, je regarde maintenant.
Il y a du pain sur la table. Tu veux ?

B. À la maison
Maman prépare le dîner. Papa aide.
Nous avons de la confiture. Nous mettons sur les tartines.
Tu fais tes devoirs ? Oui, je finis.
Il reste du chocolat ? Oui, il y a encore.

C. À l’école
Le professeur explique la leçon. Les élèves écoutent.
J’ai des stylos dans mon sac. J’ prête un à mon ami.
Tu comprends cet exercice ? Non, je ne comprends pas.
Elle a de bonnes notes. Elle est fière.

D. Shopping
Cette veste me plaît. Je prends.
Il y a des soldes intéressantes. J’ profite.
Tu aimes ces chaussures ? Oui, je adore !
Il faut de la patience pour faire du shopping. Il faut beaucoup.

Les Pronoms COD et “EN” (Niveau Moyen)

A. Contextes variés
Ma sœur collectionne les timbres. Elle a plus de 200.
Ce roman me passionne. Je lis chaque soir avant de dormir.
Des problèmes ? Nous rencontrons parfois au travail.
Cette chanson est magnifique. Tous mes amis connaissent par cœur.

B. Temps composés
J’ai acheté cette voiture hier. Je ai payée comptant.
Il a mangé des gâteaux ? Oui, il a pris trois.
Mes parents ont visité ce musée. Ils ont trouvé formidable.
Tu as eu des nouvelles de Pierre ? Non, je n’ ai pas reçu.

C. Situations complexes
Cette décision importante, nous devons prendre rapidement.
Du courage pour ce projet ? Il nous faudra beaucoup.
Ces documents confidentiels, vous ne devez pas divulguer.
De l’expérience professionnelle ? J’ manque encore un peu.

D. Questions et négations
— Tu vois souvent tes grands-parents ?
— Oui, je visite tous les dimanches.
— Il y a encore du café ?
— Non, il n’y a plus.
— Connaissez-vous cette histoire ?
— Non, nous ne connaissons pas.
— Avez-vous des questions ?
— Oui, j’ ai plusieurs.

Les Pronoms COD et “EN” (Niveau Difficile)

A. Contextes littéraires et soutenus
Cette œuvre d’art exceptionnelle, le collectionneur a acquise aux enchères pour une somme considérable.
De la persévérance dans ce domaine ? Il faut énormément pour réussir dans cette carrière exigeante.
Les critiques négatives que ce film a reçues, le réalisateur a mal acceptées initialement.
Des regrets concernant cette décision ? Franchement, je n’ éprouve aucun à l’heure actuelle.

B. Structures syntaxiques complexes
Bien que cette proposition soit intéressante, nous devons examiner attentivement avant de nous prononcer.
Quant aux difficultés rencontrées, nous surmonterons certainement avec de la patience.
Cette responsabilité que vous me confiez, je accepte avec honneur et détermination.
Des solutions alternatives à ce problème ? Il existe plusieurs que nous pourrions envisager.

C. Registre professionnel et administratif
Les modifications du contrat que vous proposez, notre équipe juridique analysera minutieusement cette semaine.
De l’expertise dans ce secteur particulier ? Notre entreprise possède depuis de nombreuses années.
Cette procédure administrative complexe, vous devez absolument respecter scrupuleusement pour éviter tout retard.
Des références professionnelles pour ce poste ? Le candidat présente d’excellentes de ses précédents employeurs.

D. Nuances stylistiques et expressives
Cette mélodie nostalgique qui me rappelle mon enfance, je fredonne inconsciemment chaque fois que je suis mélancolique.
De l’espoir malgré ces circonstances difficiles ? Nous conservons précieusement au fond de nos cœurs.
Les promesses qu’il avait formulées avec tant de conviction, il ne a malheureusement jamais tenues par la suite.
Des souvenirs impérissables de cette époque révolue ? J’ garde de merveilleux qui resteront gravés à jamais dans ma mémoire.

Résultat

Certificat de Réussite

Exercice: Pronoms COD et Pronom “EN”

Ce certificat atteste que

a complété avec succès l’exercice sur les pronoms COD et le pronom “en”

Score: / 100

Niveau:

Date:

// Variables globales
let currentDifficulty = ‘facile’;
let userInfo = {
prenom: ”,
nom: ”,
email: ”
};

// Logo Aplenguas en SVG
const aplenguas_logo_svg = `

`;

// Attente que le DOM soit chargé
document.addEventListener(‘DOMContentLoaded’, function() {
// Éléments du DOM
const startButton = document.getElementById(‘startButton’);
const changeDifficultyButton = document.getElementById(‘changeDifficultyButton’);
const checkButton = document.getElementById(‘checkButton’);
const generatePdfButton = document.getElementById(‘generatePdfButton’);
const difficultySelect = document.getElementById(‘difficultySelect’);

// Définir l’arrière-plan du certificat
const certificateBackground = document.querySelector(‘.certificate-background’);
certificateBackground.style.backgroundImage = `url(‘data:image/svg+xml;base64,${btoa(aplenguas_logo_svg)}’)`;

// Ajouter les logos SVG
const headerLogo = document.getElementById(‘certificateHeaderLogo’);
const footerLogo = document.getElementById(‘certificateFooterLogo’);
headerLogo.innerHTML = aplenguas_logo_svg;
footerLogo.innerHTML = aplenguas_logo_svg;

// Ajouter aussi le logo au container caché pour l’exportation PDF
document.getElementById(‘logoSvgContainer’).innerHTML = aplenguas_logo_svg;

// Ajout des écouteurs d’événements
startButton.addEventListener(‘click’, startExercise);
changeDifficultyButton.addEventListener(‘click’, changeDifficulty);
checkButton.addEventListener(‘click’, checkAnswers);
generatePdfButton.addEventListener(‘click’, generatePdf);

// Générer le QR code
function generateQRCode() {
const qrCodeContainer = document.getElementById(‘qrCodeContainer’);
qrCodeContainer.innerHTML = ”;

try {
var qr = qrcode(4, ‘L’);
qr.addData(‘https://aplenguas.com’);
qr.make();

qrCodeContainer.innerHTML = qr.createImgTag(4);
} catch (error) {
console.error(“Erreur lors de la génération du QR code:”, error);
qrCodeContainer.innerHTML = ‘

QR Code

‘;
}
}

// Fonction pour démarrer l’exercice
function startExercise() {
// Validation des champs
const prenom = document.getElementById(‘prenom’).value.trim();
const nom = document.getElementById(‘nom’).value.trim();
const email = document.getElementById(‘email’).value.trim();
const subscribe = document.getElementById(‘subscribe’).checked;

// Réinitialisation des messages d’erreur
document.getElementById(‘prenomError’).textContent = ”;
document.getElementById(‘nomError’).textContent = ”;
document.getElementById(‘emailError’).textContent = ”;
document.getElementById(‘subscribeError’).textContent = ”;

let isValid = true;

if (!prenom) {
document.getElementById(‘prenomError’).textContent = ‘Veuillez entrer votre prénom.’;
isValid = false;
}

if (!nom) {
document.getElementById(‘nomError’).textContent = ‘Veuillez entrer votre nom.’;
isValid = false;
}

if (!email) {
document.getElementById(‘emailError’).textContent = ‘Veuillez entrer votre email.’;
isValid = false;
} else if (!isValidEmail(email)) {
document.getElementById(‘emailError’).textContent = ‘Veuillez entrer un email valide.’;
isValid = false;
}

if (!subscribe) {
document.getElementById(‘subscribeError’).textContent = ‘Vous devez vous abonner pour continuer.’;
isValid = false;
}

if (isValid) {
userInfo.prenom = prenom;
userInfo.nom = nom;
userInfo.email = email;

document.getElementById(‘subscriptionForm’).style.display = ‘none’;
document.getElementById(‘exerciseContainer’).style.display = ‘block’;

showExercise(currentDifficulty);
}
}

function isValidEmail(email) {
const re = /^[^s@]+@[^s@]+.[^s@]+$/;
return re.test(email);
}

function changeDifficulty() {
const newDifficulty = difficultySelect.value;
showExercise(newDifficulty);
currentDifficulty = newDifficulty;

const inputs = document.querySelectorAll(‘.gap-input’);
inputs.forEach(input => {
input.value = ”;
input.style.backgroundColor = ”;
});

document.getElementById(‘resultContainer’).style.display = ‘none’;
document.getElementById(‘certificatePreview’).style.display = ‘none’;
}

function showExercise(difficulty) {
document.getElementById(‘exerciseFacile’).style.display = ‘none’;
document.getElementById(‘exerciseMoyen’).style.display = ‘none’;
document.getElementById(‘exerciseDifficile’).style.display = ‘none’;

document.getElementById(‘exercise’ + difficulty.charAt(0).toUpperCase() + difficulty.slice(1)).style.display = ‘block’;
}

function checkAnswers() {
const inputs = document.querySelectorAll(‘#exercise’ + currentDifficulty.charAt(0).toUpperCase() + currentDifficulty.slice(1) + ‘ .gap-input’);
let correctAnswers = 0;
let totalQuestions = inputs.length;
let codCorrect = 0;
let codTotal = 0;
let enCorrect = 0;
let enTotal = 0;

inputs.forEach(input => {
const userAnswer = input.value.trim();
const correctAnswer = input.getAttribute(‘data-answer’);

// Compter les types de pronoms
if (correctAnswer === ‘en’) {
enTotal++;
if (userAnswer.toLowerCase() === correctAnswer.toLowerCase()) {
enCorrect++;
}
} else {
codTotal++;
if (userAnswer.toLowerCase() === correctAnswer.toLowerCase()) {
codCorrect++;
}
}

if (userAnswer.toLowerCase() === correctAnswer.toLowerCase()) {
input.style.backgroundColor = ‘#d4edda’;
correctAnswers++;
} else {
input.style.backgroundColor = ‘#f8d7da’;
}
});

// Calcul du score
const score = Math.round((correctAnswers / totalQuestions) * 100);

// Feedback détaillé
const detailedFeedback = document.getElementById(‘detailedFeedback’);
let feedbackHtml = ‘

‘;
feedbackHtml += ‘

Analyse détaillée :

‘;
feedbackHtml += `

📊 Score global : ${score}% (${correctAnswers}/${totalQuestions})

`;
feedbackHtml += `

🎯 Pronoms COD : ${codCorrect}/${codTotal} correct(s)

`;
feedbackHtml += `

🔄 Pronom “EN” : ${enCorrect}/${enTotal} correct(s)

`;

// Messages d’encouragement
if (score >= 90) {
feedbackHtml += ‘

🏆 Excellent ! Vous maîtrisez parfaitement les pronoms COD et “en”.

‘;
} else if (score >= 70) {
feedbackHtml += ‘

👍 Bien ! Vous avez une bonne compréhension. Continuez à pratiquer.

‘;
} else if (score >= 50) {
feedbackHtml += ‘

📚 À améliorer : Révisez les règles et refaites l’exercice.

‘;
} else {
feedbackHtml += ‘

💪 Courage ! Relisez le rappel grammatical et recommencez.

‘;
}

feedbackHtml += ‘

‘;
detailedFeedback.innerHTML = feedbackHtml;

// Affichage du résultat
document.getElementById(‘scoreDisplay’).textContent = `Votre score: ${score}% (${correctAnswers} sur ${totalQuestions})`;
document.getElementById(‘resultContainer’).style.display = ‘block’;

// Mise à jour du certificat
document.getElementById(‘certificateNamePreview’).textContent = `${userInfo.prenom} ${userInfo.nom}`;
document.getElementById(‘certificateScorePreview’).textContent = score;
document.getElementById(‘certificateLevelPreview’).textContent = capitalizeFirstLetter(currentDifficulty);
document.getElementById(‘certificateDatePreview’).textContent = new Date().toLocaleDateString();
document.getElementById(‘certificatePreview’).style.display = ‘block’;

// Générer le QR code
generateQRCode();
}

// Fonction pour générer le PDF
function generatePdf() {
if (typeof window.jspdf === ‘undefined’) {
alert(“La bibliothèque jsPDF n’est pas chargée correctement.”);
return;
}

const { jsPDF } = window.jspdf;

const pdf = new jsPDF({
orientation: ‘landscape’,
unit: ‘mm’,
format: ‘a4’
});

const certificatePreview = document.getElementById(‘certificatePreview’);

// Utiliser html2canvas si disponible
if (typeof html2canvas !== ‘undefined’) {
html2canvas(certificatePreview).then(canvas => {
const imgData = canvas.toDataURL(‘image/png’);
const imgProps = pdf.getImageProperties(imgData);
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;

pdf.addImage(imgData, ‘PNG’, 0, 0, pdfWidth, pdfHeight);
pdf.save(`Certificat_COD_EN_${userInfo.prenom}_${userInfo.nom}.pdf`);
}).catch(error => {
console.error(“Erreur avec html2canvas:”, error);
generateSimplePdf(pdf);
});
} else {
generateSimplePdf(pdf);
}
}

function generateSimplePdf(pdf) {
try {
const nom = `${userInfo.prenom} ${userInfo.nom}`;
const score = document.getElementById(‘certificateScorePreview’).textContent;
const niveau = document.getElementById(‘certificateLevelPreview’).textContent;
const date = document.getElementById(‘certificateDatePreview’).textContent;

// Titre principal
pdf.setFontSize(24);
pdf.text(“Certificat de Réussite”, pdf.internal.pageSize.getWidth() / 2, 30, { align: ‘center’ });

// Sous-titre
pdf.setFontSize(18);
pdf.text(“Exercice: Pronoms COD et Pronom “EN””, pdf.internal.pageSize.getWidth() / 2, 45, { align: ‘center’ });

// Contenu principal
pdf.setFontSize(16);
pdf.text(`Ce certificat atteste que ${nom} a complété avec succès`, pdf.internal.pageSize.getWidth() / 2, 75, { align: ‘center’ });
pdf.text(`l’exercice sur les pronoms COD et le pronom “en”`, pdf.internal.pageSize.getWidth() / 2, 90, { align: ‘center’ });

// Détails
pdf.text(`Score: ${score} / 100`, pdf.internal.pageSize.getWidth() / 2, 110, { align: ‘center’ });
pdf.text(`Niveau: ${niveau}`, pdf.internal.pageSize.getWidth() / 2, 125, { align: ‘center’ });
pdf.text(`Date: ${date}`, pdf.internal.pageSize.getWidth() / 2, 140, { align: ‘center’ });

// Signature
pdf.text(“_________________________”, pdf.internal.pageSize.getWidth() / 2, 170, { align: ‘center’ });
pdf.text(“Signature du Professeur”, pdf.internal.pageSize.getWidth() / 2, 185, { align: ‘center’ });

pdf.save(`Certificat_COD_EN_${userInfo.prenom}_${userInfo.nom}.pdf`);
} catch (fallbackError) {
console.error(“Erreur lors de la génération du PDF:”, fallbackError);
alert(“Impossible de générer le PDF. Veuillez réessayer plus tard.”);
}
}

function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}

// Polyfill pour html2canvas si nécessaire
if (typeof html2canvas === ‘undefined’) {
window.html2canvas = function(element) {
return new Promise((resolve, reject) => {
const canvas = document.createElement(‘canvas’);
canvas.width = element.offsetWidth;
canvas.height = element.offsetHeight;
const ctx = canvas.getContext(‘2d’);

ctx.fillStyle = ‘#ffffff’;
ctx.fillRect(0, 0, canvas.width, canvas.height);

ctx.strokeStyle = ‘#000000’;
ctx.strokeRect(0, 0, canvas.width, canvas.height);

ctx.fillStyle = ‘#000000′;
ctx.font = ’20px Arial’;
ctx.fillText(‘Certificat de Réussite’, canvas.width / 2 – 100, 50);
ctx.font = ’16px Arial’;
ctx.fillText(‘Pronoms COD et EN’, canvas.width / 2 – 80, 80);

resolve(canvas);
});
};
}
});

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *