🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →

The ExcelMaster.ai Blog

VBA WorksheetFunction dans Excel — appeler les fonctions natives d'Excel depuis le code (et les deux façons dont elles échouent)

VBA WorksheetFunction dans Excel — appeler les fonctions natives d'Excel depuis le code (et les deux façons dont elles échouent)

Application.WorksheetFunction permet à VBA d'emprunter les plus de 450 fonctions intégrées d'Excel au lieu de réécrire SUM, VLOOKUP ou COUNTIF sous forme de boucle. Le piège, c'est qu'il existe deux façons de les appeler et qu'elles échouent différemment. WorksheetFunction.X déclenche une erreur d'exécution en l'absence de correspondance, tandis qu'Application.X renvoie une valeur d'erreur que vous testez avec IsError. Découvrez quel style d'appel choisir, pourquoi le résultat doit être un Variant, quelles fonctions ne pas appeler ainsi, et quand passer une plage entière plutôt que de boucler cellule par cellule.

Henry
VBA Remove Duplicates dans Excel — dédupliquer en une ligne (et pourquoi cela supprime sans annulation possible)

VBA Remove Duplicates dans Excel — dédupliquer en une ligne (et pourquoi cela supprime sans annulation possible)

Range.RemoveDuplicates, c'est le bouton Supprimer les doublons d'Excel en une seule ligne de code, mais il est destructeur là où une boucle ne l'est pas. Il supprime les lignes sur place, conserve la première occurrence, et ne peut pas être annulé une fois la macro exécutée. L'argument qui piège tout le monde est Columns, dont les numéros sont des décalages à l'intérieur de la plage, pas des lettres de colonne de la feuille. Découvrez le piège du décalage dans la plage, pourquoi Header xlYes compte, comment garder la dernière ligne plutôt que la première, et quand recourir plutôt au filtre avancé ou à un Dictionary.

Henry
VBA Advanced Filter dans Excel — extraire des valeurs uniques et filtrer vers une nouvelle plage (sans boucle)

VBA Advanced Filter dans Excel — extraire des valeurs uniques et filtrer vers une nouvelle plage (sans boucle)

Range.AdvancedFilter est le seul filtre qui produit des données plutôt qu'une vue. Il peut extraire une liste unique ou un ensemble de lignes correspondant à des critères vers un autre emplacement en un seul appel, sans boucle et sans rien supprimer. Ce qui déroute, c'est que sa clause WHERE vit dans des cellules, une plage de critères dont l'en-tête doit correspondre exactement aux données. Découvrez xlFilterInPlace face à xlFilterCopy, comment fonctionne la plage de critères, comment Unique True déduplique sans détruire, le piège de correspondance d'en-tête qui renvoie une sortie vide, et en quoi cela diffère d'AutoFilter et de Remove Duplicates.

Henry
VBA Find dans Excel — rechercher dans les cellules correctement (Find renvoie une Range, pas une position)

VBA Find dans Excel — rechercher dans les cellules correctement (Find renvoie une Range, pas une position)

La méthode VBA Range.Find est le Ctrl+F d'Excel pour le code, et elle déroute parce qu'elle renvoie un objet Range (ou Nothing en l'absence de correspondance) au lieu d'un nombre. Découvrez la vérification unique qui empêche le plantage error-91, le piège des arguments persistants qui fait se comporter Find différemment à chaque exécution, comment LookAt xlWhole face à xlPart tranche entre cellule entière et contenu partiel, et comment boucler FindNext pour obtenir chaque correspondance sans boucle infinie.

Henry
VBA AutoFilter dans Excel — filtrer des lignes dans le code (et pourquoi masqué n'est pas supprimé)

VBA AutoFilter dans Excel — filtrer des lignes dans le code (et pourquoi masqué n'est pas supprimé)

La méthode VBA AutoFilter filtre un tableau dans le code, mais les lignes qu'elle masque sont toujours là — elles comptent encore dans SUM, se copient encore, et occupent encore votre plage. Découvrez le modèle mental qui évite les bugs classiques, pourquoi vous devez passer par SpecialCells xlCellTypeVisible pour ne toucher que les lignes visibles, comment fonctionnent les critères et les opérateurs, le piège de la bascule qui désactive votre filtre à la deuxième exécution, et le schéma rapide filtrer-puis-supprimer pour retirer des lignes en masse.

Henry
VBA Sort dans Excel — Range.Sort vs l'objet Sort (et comment retrouver l'ordre d'origine)

VBA Sort dans Excel — Range.Sort vs l'objet Sort (et comment retrouver l'ordre d'origine)

Trier en VBA est une réorganisation permanente sans Ctrl+Z, aussi la première règle est-elle de protéger l'ordre d'origine avant d'y toucher. Découvrez le modèle mental qui sépare une vue d'une mutation, pourquoi Header xlYes compte sous peine de voir vos titres finir dans les données, la différence entre le rapide Range.Sort et l'objet Sort illimité, le piège SortFields.Clear qui hérite d'anciennes clés de tri, et pourquoi des nombres stockés en texte se trient dans le mauvais ordre.

Henry
VBA supprimer des lignes dans Excel — lignes, lignes vides et lignes selon une condition (bouclez à rebours !)

VBA supprimer des lignes dans Excel — lignes, lignes vides et lignes selon une condition (bouclez à rebours !)

Supprimer une ligne en VBA est une modification structurelle, pas un simple effacement — chaque ligne du dessous remonte pour combler le vide, et c'est pourquoi une boucle vers le bas saute des lignes. Découvrez la règle unique qui corrige tout, boucler de bas en haut ou tout supprimer d'un seul Union, en quoi EntireRow.Delete diffère de l'effacement d'une cellule, la manière rapide de retirer les lignes vides, et comment supprimer des lignes par condition sans corrompre vos données ni vos formules de référence.

Henry
VBA insérer des lignes et des colonnes dans Excel — décaler la grille dans le bon sens (et insérer dans une boucle sans chaos)

VBA insérer des lignes et des colonnes dans Excel — décaler la grille dans le bon sens (et insérer dans une boucle sans chaos)

Insérer est le miroir de supprimer — cela pousse les lignes existantes vers le bas (ou les colonnes vers la droite) pour faire de la place, si bien que le même décalage qui casse une boucle de suppression casse aussi une boucle d'insertion. Découvrez EntireRow.Insert face à une plage partielle avec l'argument Shift, pourquoi CopyOrigin décide quel voisin donne son format à la nouvelle ligne insérée, le sens sûr pour insérer dans une boucle, et la méthode en un seul appel pour ajouter de nombreuses lignes d'un coup.

Henry
VBA masquer des colonnes et des lignes dans Excel — masquer n'est pas supprimer (et pourquoi vos totaux ne changent pas)

VBA masquer des colonnes et des lignes dans Excel — masquer n'est pas supprimer (et pourquoi vos totaux ne changent pas)

Masquer une colonne en VBA, ce n'est ni la supprimer ni la filtrer — les données sont toujours là, toujours dans chaque SUM, toujours copiées lors d'une copie de plage, on leur donne simplement une largeur d'affichage nulle. Découvrez pourquoi .Hidden appartient à EntireColumn et EntireRow, pourquoi les cellules masquées comptent encore dans les formules, la ligne tout-afficher qui sauve une feuille bloquée, et en quoi les lignes masquées à la main diffèrent des lignes masquées par AutoFilter quand vous bouclez.

Henry
VBA Worksheet_BeforeDoubleClick dans Excel — transformer un double-clic en action (et supprimer le mode édition)

VBA Worksheet_BeforeDoubleClick dans Excel — transformer un double-clic en action (et supprimer le mode édition)

Worksheet_BeforeDoubleClick est l'événement qu'Excel déclenche à l'instant où vous double-cliquez une cellule, avant qu'elle ne passe en mode édition, et il vous remet la cellule Target ainsi qu'un indicateur Cancel. Mettez Cancel à True pour supprimer le mode édition et exécuter votre propre action — cocher une case, marquer une ligne comme faite, ou descendre au détail. Découvrez comment le cibler sur une seule colonne avec Intersect, pourquoi oublier Cancel fait basculer la cellule en mode édition, et où le code doit résider.

Henry
VBA Worksheet_BeforeRightClick dans Excel — remplacer le menu du clic droit (et pourquoi le désactiver n'est pas de la sécurité)

VBA Worksheet_BeforeRightClick dans Excel — remplacer le menu du clic droit (et pourquoi le désactiver n'est pas de la sécurité)

Worksheet_BeforeRightClick est l'événement qu'Excel déclenche à l'instant où vous faites un clic droit sur une cellule, avant l'apparition du menu contextuel, et il vous remet la cellule Target ainsi qu'un indicateur Cancel. Mettez Cancel à True pour supprimer le menu intégré et exécuter votre propre action ou afficher un menu personnalisé à la place. Découvrez comment le cibler avec Intersect pour ne pas paralyser Copier et Coller, pourquoi désactiver le clic droit relève de l'ergonomie plutôt que de la protection, et où le code doit résider.

Henry
VBA Workbook_BeforePrint dans Excel — bloquer une impression, tamponner un en-tête, et le piège de l'aperçu avant impression

VBA Workbook_BeforePrint dans Excel — bloquer une impression, tamponner un en-tête, et le piège de l'aperçu avant impression

Workbook_BeforePrint est l'événement qu'Excel déclenche avant que quoi que ce soit dans le classeur ne soit imprimé, et il vous remet un indicateur Cancel. Mettez Cancel à True et l'impression est bloquée — validez avant d'imprimer, ou empêchez un brouillon de sortir. Découvrez pourquoi l'événement se déclenche aussi pour l'aperçu avant impression (si bien qu'un traitement lourd fait ramer l'aperçu), pourquoi il s'exécute une seule fois pour tout le classeur plutôt que par feuille, pourquoi un Cancel silencieux est un bug, et où le code doit résider.

Henry
VBA Workbook_BeforeClose dans Excel — annuler la fermeture, proposer d'enregistrer, et où le code doit résider

VBA Workbook_BeforeClose dans Excel — annuler la fermeture, proposer d'enregistrer, et où le code doit résider

Workbook_BeforeClose est l'événement qu'Excel déclenche à l'instant où quelqu'un tente de fermer le fichier — avant que quoi que ce soit ne soit démantelé — et il vous remet un indicateur Cancel. Mettez Cancel à True et la fermeture est annulée. Découvrez comment lancer un nettoyage à la fermeture, comment empêcher Excel de demander deux fois d'enregistrer grâce à la propriété Saved, pourquoi il ne se déclenche jamais lors d'un plantage, et où le code doit résider.

Henry
VBA Workbook_BeforeSave dans Excel — valider ou bloquer un enregistrement, et ce que SaveAsUI vous dit vraiment

VBA Workbook_BeforeSave dans Excel — valider ou bloquer un enregistrement, et ce que SaveAsUI vous dit vraiment

Workbook_BeforeSave est l'événement qu'Excel déclenche à l'instant où un enregistrement est demandé — avant que quoi que ce soit ne soit écrit sur le disque — et il vous remet deux indicateurs, SaveAsUI et Cancel. Découvrez comment bloquer un enregistrement quand une cellule obligatoire est vide, comment estampiller automatiquement qui a enregistré et quand, pourquoi appeler Save dans le gestionnaire boucle à l'infini, et comment SaveAsUI vous permet d'imposer un nom de fichier.

Henry
VBA Worksheet_Activate et Deactivate dans Excel — exécuter du code au changement de feuille (et pourquoi on ne peut pas annuler un départ)

VBA Worksheet_Activate et Deactivate dans Excel — exécuter du code au changement de feuille (et pourquoi on ne peut pas annuler un départ)

Worksheet_Activate se déclenche quand une feuille devient active et Worksheet_Deactivate se déclenche à l'instant où vous la quittez — les événements d'arrivée et de départ d'une feuille. Le hic qui les définit — contrairement à BeforeClose et BeforeSave, aucun ne vous donne de Cancel, vous pouvez donc observer un changement de feuille mais pas le bloquer. Découvrez le motif d'actualisation à l'affichage, le contournement par renvoi, et les gestionnaires au niveau feuille contre niveau classeur.

Henry
VBA Class Module dans Excel — créez votre propre objet (plan contre instance, et le piège As New)

VBA Class Module dans Excel — créez votre propre objet (plan contre instance, et le piège As New)

Un class module VBA vous laisse définir votre propre type d'objet — un plan qui regroupe données et comportement — puis fabriquer autant d'instances indépendantes que voulu avec New. Le piège qui surprend tout le monde, c'est que les objets sont des types référence, donc Set b = a fait pointer les deux noms vers la même instance, et Dim x As New cache un piège d'instanciation paresseuse. Découvrez comment le nom du module devient le nom du type, quand une classe l'emporte sur un Type, et comment éviter les pièges classiques de New.

Henry
VBA Type dans Excel — regrouper des champs liés dans une seule variable (types définis par l'utilisateur ou class module)

VBA Type dans Excel — regrouper des champs liés dans une seule variable (types définis par l'utilisateur ou class module)

Un Type VBA — un type défini par l'utilisateur déclaré avec Type ... End Type — regroupe plusieurs champs liés dans une seule variable, si bien que Name, Age et Salary voyagent ensemble au lieu de former trois tableaux parallèles. C'est un type valeur, donc affecter une variable Type à une autre copie chaque champ, à la différence des objets, qui se partagent. Découvrez où placer la déclaration, pourquoi copier plutôt que partager change tout, et le moment précis où passer à un class module.

Henry
VBA Property dans Excel — Get, Let et Set (accès contrôlé aux champs d'une classe)

VBA Property dans Excel — Get, Let et Set (accès contrôlé aux champs d'une classe)

Property Get, Let et Set transforment un champ de classe en une porte — une petite procédure qui exécute votre code chaque fois que l'extérieur le lit ou l'écrit, pour valider une entrée, calculer une valeur à la volée ou rendre un champ en lecture seule. La distinction qui piège tout le monde, c'est Let contre Set — Let affecte une valeur, Set affecte un objet — et se tromper de mot-clé provoque une erreur de compilation ou d'exécution. Découvrez le motif du champ de stockage, quand une simple variable Public est le choix honnête, et comment construire une propriété en lecture seule.

Henry
VBA ActiveCell dans Excel — la cellule unique sous le curseur (ActiveCell contre Selection, et quand ça casse)

VBA ActiveCell dans Excel — la cellule unique sous le curseur (ActiveCell contre Selection, et quand ça casse)

ActiveCell est un pointeur vivant vers l'unique cellule qui a le curseur à cet instant — toujours exactement une cellule, sur la feuille active, à l'intérieur de la Selection courante. Découvrez en quoi il diffère de Selection, comment le lire et l'écrire avec .Value et .Offset, et la raison numéro un de ses plantages — il suit la feuille et le curseur laissés par l'utilisateur, ce qui en fait le mauvais outil pour du code qui ne concerne pas l'endroit où se trouve l'utilisateur.

Henry
VBA Selection dans Excel — travailler avec ce qui est en surbrillance (et pourquoi ce n'est pas toujours une Range)

VBA Selection dans Excel — travailler avec ce qui est en surbrillance (et pourquoi ce n'est pas toujours une Range)

Selection est un pointeur vivant vers ce qui est en surbrillance à cet instant — le plus souvent une plage de cellules, mais cela peut aussi être un graphique, une forme, ou rien du tout. Voilà pourquoi du code qui suppose que Selection est une plage plante dès qu'un graphique est sélectionné. Découvrez comment parcourir les cellules sélectionnées, gérer les sélections multi-zones avec .Areas, vous protéger avec TypeName, et quand ignorer complètement Selection pour nommer votre plage.

Henry
VBA Select vs Activate dans Excel — rompez avec l'habitude du .Select de l'enregistreur de macros

VBA Select vs Activate dans Excel — rompez avec l'habitude du .Select de l'enregistreur de macros

L'enregistreur de macros écrit ce que fait votre souris — Select une feuille, Select une cellule, agir sur la Selection — parce que c'est ainsi qu'une personne travaille, pas ainsi que le code devrait. Découvrez la vraie différence entre Select (mettre en surbrillance une ou plusieurs cellules) et Activate (définir l'unique cellule active), pourquoi presque chaque .Select est un détour lent et fragile que vous pouvez supprimer, les rares fois où sélectionner est vraiment nécessaire, et comment refactoriser le code de l'enregistreur pour agir directement sur des références de plage qualifiées.

Henry
VBA Workbook_Open dans Excel — exécuter une macro automatiquement à l'ouverture du fichier (et où le code doit résider)

VBA Workbook_Open dans Excel — exécuter une macro automatiquement à l'ouverture du fichier (et où le code doit résider)

Workbook_Open est l'événement qu'Excel déclenche à l'instant où votre fichier finit de s'ouvrir — du code qui s'exécute tout seul, sans bouton. Mais il ne se déclenche que s'il réside dans l'objet ThisWorkbook (pas un Module standard) et que l'utilisateur a activé les macros. Découvrez où placer le code, pourquoi il ne s'exécute jamais en silence, Workbook_Open contre Auto_Open, et comment le garder rapide et à l'épreuve des plantages.

Henry
VBA Worksheet_Change dans Excel — exécuter du code quand une cellule est modifiée (et la boucle infinie à éviter)

VBA Worksheet_Change dans Excel — exécuter du code quand une cellule est modifiée (et la boucle infinie à éviter)

Worksheet_Change est l'événement qu'Excel déclenche chaque fois qu'un utilisateur modifie une cellule de la feuille, en vous remettant la cellule modifiée sous forme de Target. Le piège qui attrape tout le monde — votre gestionnaire écrit dans une cellule, cette écriture redéclenche l'événement, et Excel boucle à l'infini. Découvrez le correctif Application.EnableEvents, comment le cibler avec Intersect, pourquoi il ignore les recalculs de formules, et où le code doit résider.

Henry
VBA Worksheet_SelectionChange dans Excel — exécuter du code quand le curseur se déplace (surligner la ligne active sans latence)

VBA Worksheet_SelectionChange dans Excel — exécuter du code quand le curseur se déplace (surligner la ligne active sans latence)

Worksheet_SelectionChange est l'événement qu'Excel déclenche chaque fois que le curseur se déplace — un clic, une touche fléchée, un appui sur Entrée. Il vous remet la nouvelle sélection sous forme de Target, ce qui rend possibles les astuces qui suivent le curseur, comme surligner la ligne active. Mais il se déclenche en permanence, si bien qu'un code lourd fait ramer toute la feuille. Découvrez le motif « surligner la ligne active » fait correctement, pourquoi il peut boucler, et comment le garder ultraléger.

Henry
VBA For Each dans Excel — parcourir une collection sans toucher à l'indice (et les pièges qu'il cache)

VBA For Each dans Excel — parcourir une collection sans toucher à l'indice (et les pièges qu'il cache)

For Each dit « fais ceci à chaque élément » et laisse VBA gérer l'ordre et les bornes — sans compteur, sans décalage d'une unité. Mais cette commodité cache trois règles strictes — la variable de boucle doit être un objet ou un Variant, parcourir un tableau est en lecture seule, et vous ne devez jamais supprimer d'une collection que vous parcourez. Découvrez quand For Each l'emporte sur For…Next et quand il vous trahit en silence.

Henry
VBA Collection dans Excel — la liste ordonnée qui s'agrandit (et pourquoi ce n'est pas un Dictionary)

VBA Collection dans Excel — la liste ordonnée qui s'agrandit (et pourquoi ce n'est pas un Dictionary)

Une Collection VBA est une liste ordonnée qui s'agrandit à chaque Add — sans ReDim, sans deviner la taille. Mais elle a quatre arêtes vives que les débutants heurtent à chaque fois — elle est en base 1 et non en base 0, on ne peut pas écraser un élément (seulement Add/Remove), une clé en double déclenche l'erreur 457, et il n'existe aucun test Exists intégré. Découvrez quand une Collection l'emporte sur un tableau ou un Dictionary, et quand elle vous coûte cher en silence.

Henry
VBA With dans Excel — écrire l'objet une seule fois (et le point initial qui fait tout basculer)

VBA With dans Excel — écrire l'objet une seule fois (et le point initial qui fait tout basculer)

L'instruction With nomme un objet une seule fois et vous laisse atteindre ses membres avec un simple point initial — moins de frappe, du code plus rapide, des blocs plus nets. Mais ce point initial est tout l'enjeu — oubliez-le et .Font devient Font, qui se lie en silence à la feuille active au lieu de votre objet. Découvrez ce que With optimise vraiment, le piège du point manquant, et comment With s'associe à For Each.

Henry
VBA Data Types dans Excel — String, Long, Double, Variant (et la bonne boîte pour chaque valeur)

VBA Data Types dans Excel — String, Long, Double, Variant (et la bonne boîte pour chaque valeur)

Un type de données VBA, c'est la forme et la taille de la boîte d'une variable — et le choisir revient à choisir ce qui peut mal tourner. Découvrez pourquoi Integer déborde à 32 767 (préférez Long), pourquoi Variant est un défaut paresseux qui cache des bugs, pourquoi l'argent réclame Currency et non Double, et comment lire les erreurs Incompatibilité de type et Dépassement de capacité.

Henry
VBA Const dans Excel — nommez vos nombres magiques (et pourquoi la valeur ne peut pas dériver)

VBA Const dans Excel — nommez vos nombres magiques (et pourquoi la valeur ne peut pas dériver)

Une constante VBA est un nom verrouillé sur une valeur à la compilation — le remède aux nombres magiques éparpillés dans votre code. Découvrez pourquoi Const empêche les valeurs de dériver, pourquoi lui affecter une valeur est une erreur de compilation (c'est la fonctionnalité, pas un défaut), pourquoi Const doit être un littéral connu à la compilation, et quand préférer Enum.

Henry
Boucle While VBA dans Excel — boucler sans figer Excel

Boucle While VBA dans Excel — boucler sans figer Excel

Une boucle While VBA est une promesse qu'elle se terminera — et c'est vous qui la tenez. Apprenez les trois parties que toute boucle While exige, pourquoi Do While vaut mieux que While...Wend, et comment ne plus jamais figer Excel. Avec exemples à copier. Testé sur Excel 365, 2021, 2019.

Henry