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

The ExcelMaster.ai Blog

RequĂȘte HTTP en VBA dans Excel — GET et POST avec XMLHTTP, et pourquoi la rĂ©ponse arrive pĂ©rimĂ©e ou illisible

RequĂȘte HTTP en VBA dans Excel — GET et POST avec XMLHTTP, et pourquoi la rĂ©ponse arrive pĂ©rimĂ©e ou illisible

Une requĂȘte HTTP lancĂ©e depuis Excel VBA renvoie deux choses, un code de statut et un bloc d'octets, et tout le reste vous incombe. Ce guide compare MSXML2.XMLHTTP, ServerXMLHTTP et WinHttpRequest, explique pourquoi un GET peut renvoyer les donnĂ©es de la veille, pourquoi un 404 ne dĂ©clenche jamais d'erreur, pourquoi un appel synchrone peut figer Excel, comment rĂ©parer les accents et le japonais illisibles avec ResponseBody et ADODB.Stream, et comment envoyer un POST JSON sans qu'il casse sur un Windows français ou allemand.

Henry
VBA JSON dans Excel — transformer une rĂ©ponse d'API en cellules avec VBA-JSON (Dictionary, Collection, Null)

VBA JSON dans Excel — transformer une rĂ©ponse d'API en cellules avec VBA-JSON (Dictionary, Collection, Null)

VBA n'a pas d'analyseur JSON intĂ©grĂ©, et analyser du JSON avec Split, InStr ou des regex casse au premier guillemet imbriquĂ©. Ce guide montre comment analyser du JSON en Excel VBA avec VBA-JSON (JsonConverter), comment les objets JSON deviennent des Dictionary et les tableaux des Collection qui commencent Ă  1, pourquoi lire une clĂ© absente l'ajoute en silence, pourquoi null s'arrĂȘte sur l'erreur 94, pourquoi les identifiants longs et les dates ISO demandent de la vigilance, et comment aplatir un tableau d'enregistrements dans une feuille en une seule Ă©criture. Il traite aussi de la construction d'un JSON fiable sur un Windows français ou allemand.

Henry
Web scraping en VBA dans Excel — rĂ©cupĂ©rer les donnĂ©es d'un site sans Internet Explorer

Web scraping en VBA dans Excel — rĂ©cupĂ©rer les donnĂ©es d'un site sans Internet Explorer

Le web scraping avec Excel VBA lit le HTML envoyĂ© par le serveur, pas la page que vous voyez dans le navigateur, et ce seul fait explique la plupart des Ă©checs. Ce guide montre comment savoir en dix secondes si une page peut ĂȘtre extraite, comment trouver la requĂȘte JSON derriĂšre une page JavaScript, comment lire un tableau HTML avec XMLHTTP et htmlfile au lieu d'Internet Explorer, pourquoi des nombres extraits comme 1 234,56 ne sont pas encore des nombres, comment rĂ©parer un texte illisible dĂ» Ă  un meta charset, et quand Power Query À partir du web est le meilleur outil.

Henry
VBA IsEmpty dans Excel — vĂ©rifier si une cellule est vide (et pourquoi une cellule qui semble vide ne l'est pas)

VBA IsEmpty dans Excel — vĂ©rifier si une cellule est vide (et pourquoi une cellule qui semble vide ne l'est pas)

IsEmpty ne demande pas si une cellule semble vide : il demande si un Variant a déjà reçu une valeur. Ce guide montre pourquoi IsEmpty renvoie False pour une formule qui renvoie une chaßne vide, une espace ou une apostrophe seule, pourquoi il vaut toujours False pour une plage de plusieurs cellules ou une variable String, pourquoi une cellule vide est aussi égale à 0, comment comparer une cellule en erreur à une chaßne vide plante avec Type mismatch, et quel test utiliser pour chaque sens du mot vide.

Henry
VBA VarType et TypeName dans Excel — demander à une valeur ce qu'elle est avant de l'utiliser

VBA VarType et TypeName dans Excel — demander à une valeur ce qu'elle est avant de l'utiliser

VarType et TypeName lisent l'étiquette de type que porte une valeur VBA, et dans Excel cette étiquette est fixée par la cellule, pas par votre code. Ce guide couvre les constantes VarType et les chaßnes TypeName, pourquoi un nombre entier dans une cellule est un Double, pourquoi un format monétaire ou de date change le type et peut arrondir vos valeurs, pourquoi VarType regarde à travers un Range jusqu'à sa valeur alors que TypeName nomme l'objet, le piÚge du tableau selon qu'il y a une ou plusieurs cellules, et comment vérifier ce que l'utilisateur a sélectionné.

Henry
VBA IsNull dans Excel — ce que Null signifie vraiment, et pourquoi = Null ne fonctionne jamais

VBA IsNull dans Excel — ce que Null signifie vraiment, et pourquoi = Null ne fonctionne jamais

Dans Excel VBA, Null ne vient presque jamais d'une cellule : une cellule vide est Empty. Null vient d'une propriĂ©tĂ© de plage dont les cellules ne sont pas d'accord, comme Font.Bold, NumberFormat ou RowHeight sur des cellules disparates, et des champs de base de donnĂ©es. Ce guide explique pourquoi If x = Null ne s'exĂ©cute jamais, pourquoi affecter Null Ă  un Boolean ou Ă  une String s'arrĂȘte sur l'erreur 94 Invalid use of Null, comment Null se propage Ă  travers + mais pas Ă  travers l'esperluette, et comment traiter une plage mixte comme une troisiĂšme rĂ©ponse plutĂŽt que comme un plantage.

Henry
Raccourcis clavier VBA dans Excel — affecter des raccourcis Ctrl+Maj à vos macros avec OnKey et MacroOptions

Raccourcis clavier VBA dans Excel — affecter des raccourcis Ctrl+Maj à vos macros avec OnKey et MacroOptions

Excel offre deux moyens distincts de placer une macro sur une touche : le raccourci des options de macro, enregistrĂ© dans le classeur et actif tant que ce fichier est ouvert, et Application.OnKey, dĂ©fini par le code et valable pour toute la session Excel. Ce guide explique les deux, les codes de touches d'OnKey, pourquoi Ctrl+lettre remplace en silence les raccourcis d'Excel, pourquoi un raccourci Ctrl+Maj peut arrĂȘter une macro juste aprĂšs Workbooks.Open, pourquoi Ctrl+Alt est un piĂšge sur les claviers AZERTY, et comment faire le mĂ©nage pour qu'une touche ne survive pas Ă  son classeur.

Henry
VBA OnTime dans Excel — exĂ©cuter une macro Ă  heure fixe ou toutes les N minutes, et vraiment l'arrĂȘter

VBA OnTime dans Excel — exĂ©cuter une macro Ă  heure fixe ou toutes les N minutes, et vraiment l'arrĂȘter

Application.OnTime ne lance pas de minuteur : il dĂ©pose une rĂ©servation dans la file d'Excel, identifiĂ©e par une heure exacte et un nom de macro. Ce guide montre comment exĂ©cuter une macro Ă  une heure donnĂ©e ou toutes les quelques minutes, pourquoi l'annulation Ă©choue avec l'erreur 1004 si vous ne repassez pas exactement la mĂȘme heure, pourquoi une rĂ©initialisation du code laisse un minuteur impossible Ă  arrĂȘter, pourquoi fermer le classeur n'annule rien et pousse Excel Ă  rouvrir le fichier, comment empĂȘcher un planning rĂ©pĂ©titif de dĂ©river, et quand prĂ©fĂ©rer le Planificateur de tĂąches de Windows.

Henry
VBA SendKeys dans Excel — syntaxe, codes de touches, et pourquoi tout s'exĂ©cute dans le dĂ©sordre

VBA SendKeys dans Excel — syntaxe, codes de touches, et pourquoi tout s'exĂ©cute dans le dĂ©sordre

SendKeys n'appuie sur aucune touche : il dĂ©pose des frappes dans une file, et c'est la fenĂȘtre qui a le focus au moment oĂč elles sont lues qui les reçoit. Ce guide couvre la syntaxe et les codes de touches de SendKeys, pourquoi les touches envoyĂ©es Ă  Excel ne prennent effet qu'une fois que votre macro rend la main (si bien que le code semble s'exĂ©cuter dans le dĂ©sordre), pourquoi un 50% dans la chaĂźne appuie sur Alt, comment des frappes finissent dans la mauvaise fenĂȘtre, l'effet de bord sur le Verr Num, les rares tĂąches pour lesquelles SendKeys convient, et l'appel du modĂšle objet Ă  utiliser pour tout le reste.

Henry
VBA PowerPoint dans Excel — crĂ©er des diapos, coller des graphiques, sans jamais fermer la prĂ©sentation de l'utilisateur

VBA PowerPoint dans Excel — crĂ©er des diapos, coller des graphiques, sans jamais fermer la prĂ©sentation de l'utilisateur

Piloter PowerPoint depuis Excel en VBA, c'est travailler dans un second modĂšle objet oĂč il n'y a pas de cellules, seulement des diapositives couvertes de formes mesurĂ©es en points. Ce guide montre comment crĂ©er une prĂ©sentation, ajouter des diapositives, coller des graphiques et des plages Excel sous forme d'images, et remplir un modĂšle. Il explique aussi le piĂšge dont personne ne vous parle : PowerPoint ne tourne qu'en un seul exemplaire, votre macro le partage donc avec les prĂ©sentations que l'utilisateur a dĂ©jĂ  ouvertes, et un Quit imprudent ferme aussi son travail.

Henry
VBA Word dans Excel — remplir un modĂšle, Ă©viter le conflit Range et l'erreur 462

VBA Word dans Excel — remplir un modĂšle, Ă©viter le conflit Range et l'erreur 462

Piloter Word depuis Excel en VBA, c'est passer Ă  un modĂšle objet oĂč un document est un long fil de texte et oĂč un Range est une position de dĂ©but et une position de fin, pas un bloc de cellules. Ce guide remplit un modĂšle Word Ă  partir des donnĂ©es d'une feuille, colle un tableau Excel, enregistre en DOCX et en PDF, et corrige les trois Ă©checs classiques : Range qui dĂ©signe le Range d'Excel, l'erreur 462 due Ă  un ActiveDocument non qualifiĂ©, et la limite de 255 caractĂšres de Rechercher et remplacer.

Henry
VBA References dans Excel — Outils > RĂ©fĂ©rences, bibliothĂšques MISSING et Can't find project or library

VBA References dans Excel — Outils > RĂ©fĂ©rences, bibliothĂšques MISSING et Can't find project or library

La liste sous Outils > RĂ©fĂ©rences est la liste des dĂ©pendances de votre projet VBA : elle est enregistrĂ©e dans le classeur et rĂ©solue de nouveau sur chaque PC qui l'ouvre. Ce guide explique ce que fait une rĂ©fĂ©rence, les quatre rĂ©fĂ©rences par dĂ©faut, comment en ajouter une, pourquoi une seule bibliothĂšque MISSING fait Ă©chouer des lignes innocentes comme Left et Date avec Can't find project or library, comment la prioritĂ© des rĂ©fĂ©rences dĂ©cide de ce que signifie Range, et pourquoi un fichier qui voyage doit ĂȘtre dĂ©veloppĂ© avec des rĂ©fĂ©rences mais livrĂ© sans.

Henry
VBA Global Variable dans Excel — variables Public, portĂ©e, et pourquoi elles se rĂ©initialisent

VBA Global Variable dans Excel — variables Public, portĂ©e, et pourquoi elles se rĂ©initialisent

Une variable globale VBA est une dĂ©claration Public en tĂȘte d'un module standard, visible par toutes les procĂ©dures du projet. La dĂ©clarer est facile ; s'y fier ne l'est pas, car une globale ne vit que tant que le projet VBA reste chargĂ©, et End, le bouton RĂ©initialiser, une erreur non gĂ©rĂ©e ou une modification du code l'effacent. Ce guide couvre Public, Global et Dim, les trois niveaux de portĂ©e, ce qui rĂ©initialise une globale, le Dim local qui la masque en silence, et comment conserver une valeur aprĂšs la fermeture du classeur.

Henry
VBA Static Variable dans Excel — une mĂ©moire qui survit Ă  End Sub (et qui se souvient de trop)

VBA Static Variable dans Excel — une mĂ©moire qui survit Ă  End Sub (et qui se souvient de trop)

Une variable Static VBA est dĂ©clarĂ©e dans une seule procĂ©dure mais garde sa valeur d'un appel Ă  l'autre : une portĂ©e locale avec la durĂ©e de vie d'une variable de niveau module. Elle est donc idĂ©ale pour les compteurs, les bascules, les verrous anti-rĂ©entrance et les caches dont une seule procĂ©dure a besoin. Ce guide couvre le fonctionnement de Static, Static contre Dim et un Private de niveau module, Static Sub, pourquoi une Static n'oublie jamais un indicateur bloquĂ© ni des donnĂ©es pĂ©rimĂ©es, pourquoi toutes les cellules qui appellent une UDF partagent une mĂȘme Static, et quand la promouvoir.

Henry
VBA Optional Parameter dans Excel — valeurs par dĂ©faut, IsMissing, arguments nommĂ©s et ParamArray

VBA Optional Parameter dans Excel — valeurs par dĂ©faut, IsMissing, arguments nommĂ©s et ParamArray

Un paramÚtre Optional permet d'appeler une Sub ou une Function VBA avec ou sans argument, avec une valeur par défaut quand l'appelant l'omet. Ce guide couvre les rÚgles de déclaration, pourquoi un Optional typé ne distingue pas un argument omis d'un argument passé avec la valeur par défaut, quand utiliser plutÎt un Variant avec IsMissing, comment sauter des arguments avec les arguments nommés, ParamArray pour un nombre quelconque de valeurs, et pourquoi Optional est le moyen de faire évoluer une procédure sans casser le code qui l'appelle déjà.

Henry
VBA Rename Sheet dans Excel — ce qu'un renommage met à jour et ce qu'il casse en silence

VBA Rename Sheet dans Excel — ce qu'un renommage met à jour et ce qu'il casse en silence

Renommer une feuille en VBA tient en une ligne, ws.Name = "New", mais un renommage est un refactoring : Excel réécrit chaque formule, nom dĂ©fini et graphique qui pointe vers la feuille, et laisse cassĂ©e chaque chaĂźne de texte qui Ă©pelle l'ancien nom. Ce guide explique ce qui est mis Ă  jour et ce qui ne l'est pas, les rĂšgles de nommage qui dĂ©clenchent l'erreur 1004, pourquoi une cellule de date donne un nom de feuille parfait en Allemagne et un plantage aux États-Unis, et comment renommer en masse sans collision.

Henry
VBA Hide Sheet dans Excel — masquĂ©e, trĂšs masquĂ©e, et pourquoi aucune des deux n'est un verrou

VBA Hide Sheet dans Excel — masquĂ©e, trĂšs masquĂ©e, et pourquoi aucune des deux n'est un verrou

En VBA, une feuille a trois Ă©tats de visibilitĂ©, pas deux : visible, masquĂ©e et trĂšs masquĂ©e, que la boĂźte de dialogue Afficher ne sait mĂȘme pas lister. Ce guide couvre la propriĂ©tĂ© Visible et ses trois constantes, pourquoi masquer la derniĂšre feuille visible dĂ©clenche l'erreur 1004, pourquoi une feuille masquĂ©e continue de calculer et reste entiĂšrement accessible depuis le code, comment afficher toutes les feuilles en une seule boucle, et pourquoi masquer relĂšve de la prĂ©sentation et non de la sĂ©curitĂ©.

Henry
VBA Check If Sheet Exists dans Excel — une seule fonction, et les trois façons dont elle se trompe

VBA Check If Sheet Exists dans Excel — une seule fonction, et les trois façons dont elle se trompe

Excel n'a pas de méthode Exists pour les feuilles : chaque macro qui ajoute, renomme ou supprime par nom a donc besoin de sa propre vérification. Ce guide donne une fonction SheetExists fiable et explique les trois façons dont les versions habituelles échouent : interroger le mauvais classeur, chercher dans Worksheets alors qu'une feuille graphique porte déjà le nom, et passer un Variant qu'Excel lit comme un index. Il compare aussi les approches par boucle, On Error et Evaluate, et indique quand chacune est le bon choix.

Henry
VBA Save as PDF dans Excel — ExportAsFixedFormat pour les feuilles, les plages et les classeurs

VBA Save as PDF dans Excel — ExportAsFixedFormat pour les feuilles, les plages et les classeurs

Pour enregistrer une feuille, une plage ou un classeur entier en PDF depuis VBA, appelez ExportAsFixedFormat avec Type:=xlTypePDF et un chemin complet. Ce guide explique pourquoi un PDF n'est qu'une impression envoyée dans un fichier, pourquoi c'est donc votre mise en page qui décide du contenu du PDF, comment exporter plusieurs feuilles dans un seul fichier, et comment éviter l'erreur d'exécution 1004 que provoque un chemin incorrect.

Henry
VBA PrintOut dans Excel — imprimer des feuilles, des plages et des copies depuis une macro

VBA PrintOut dans Excel — imprimer des feuilles, des plages et des copies depuis une macro

PrintOut envoie une feuille, une plage, un groupe de feuilles ou un classeur entier Ă  une imprimante depuis VBA, avec des arguments pour les copies, les plages de pages, l'aperçu et l'imprimante cible. Ce guide explique pourquoi PrintOut est l'extrĂ©mitĂ© papier du mĂȘme circuit qui produit les PDF, comment tester sans gaspiller de papier, comment changer d'imprimante sans casser la configuration de l'utilisateur, et pourquoi imprimer en PDF est le mauvais outil.

Henry
VBA Page Setup dans Excel — zone d'impression, ajustement à la page et orientation

VBA Page Setup dans Excel — zone d'impression, ajustement à la page et orientation

L'objet PageSetup dĂ©cide de ce qu'est une page imprimĂ©e ou exportĂ©e — zone d'impression, orientation, mise Ă  l'Ă©chelle, marges, lignes de titre rĂ©pĂ©tĂ©es, en-tĂȘtes et pieds de page. Ce guide explique pourquoi chaque impression et chaque PDF ne vaut que ce que vaut sa mise en page, la rĂšgle du Zoom qui fait vraiment fonctionner l'ajustement Ă  une page de large, comment dĂ©finir la zone d'impression Ă  partir d'une plage, et comment PrintCommunication accĂ©lĂšre un code de mise en page trop lent.

Henry
VBA Controls dans Excel — parcourir la collection Controls et rĂ©fĂ©rencer un contrĂŽle par son nom

VBA Controls dans Excel — parcourir la collection Controls et rĂ©fĂ©rencer un contrĂŽle par son nom

Me.Controls est la collection vivante de tous les contrĂŽles d'un UserForm — vous la parcourez avec For Each, filtrez par type avec TypeName ou TypeOf, atteignez n'importe quel contrĂŽle par son nom sous forme de chaĂźne, et ajoutez des contrĂŽles pendant que le formulaire s'exĂ©cute. Ce guide montre le modĂšle de collection qui remplace vingt lignes nommĂ©es Ă  la main par une seule boucle, comment Ă©viter le mauvais type de contrĂŽle en toute sĂ©curitĂ©, et le moment oĂč une boucle vaut mieux que des rĂ©fĂ©rences nommĂ©es.

Henry
VBA TextBox dans Excel — pourquoi .Value est toujours du texte (et comment le convertir)

VBA TextBox dans Excel — pourquoi .Value est toujours du texte (et comment le convertir)

Un TextBox de UserForm renvoie toujours une String, mĂȘme quand l'utilisateur a tapĂ© un nombre ou une date — c'est la source de presque tous les bugs de TextBox. Ce guide explique pourquoi .Value est du texte, les deux façons dont l'arithmĂ©tique dessus Ă©choue, la conversion sĂ»re avec IsNumeric puis CDbl ou CLng, la diffĂ©rence entre .Text et .Value, le test du vide, et la validation en direct avec les Ă©vĂ©nements Change et Exit.

Henry
VBA Frame dans Excel — regrouper les OptionButton et dĂ©limiter la portĂ©e des contrĂŽles

VBA Frame dans Excel — regrouper les OptionButton et dĂ©limiter la portĂ©e des contrĂŽles

Un Frame VBA est un conteneur qui possĂšde les contrĂŽles placĂ©s Ă  l'intĂ©rieur, pas seulement une bordure avec une lĂ©gende. Ce guide couvre la rĂšgle pour laquelle les Frame existent — rendre les boutons radio mutuellement exclusifs par groupe au lieu d'un seul groupe sur tout le formulaire — l'alternative GroupName, le fait qu'un Frame possĂšde sa propre sous-collection Controls, l'activation ou le masquage d'une section entiĂšre d'un coup, et la chaĂźne Parent qui change la façon d'atteindre un contrĂŽle.

Henry
VBA Application.Run dans Excel — Appeler une macro par son nom

VBA Application.Run dans Excel — Appeler une macro par son nom

Application.Run exĂ©cute une macro dont vous n'avez que le nom sous forme de chaĂźne, en dĂ©cidant quelle procĂ©dure s'exĂ©cute pendant que le code tourne plutĂŽt qu'au moment oĂč vous l'Ă©crivez. Ce guide couvre les formes instruction et fonction, le passage de 30 arguments positionnels au maximum, l'appel d'une macro dans un autre classeur ouvert, pourquoi un nom mal orthographiĂ© est une erreur d'exĂ©cution et non une erreur Ă  la compilation, et la vraie raison d'ĂȘtre de la mĂ©thode — une table d'aiguillage qui associe des noms Ă  des actions, le motif derriĂšre les plugins, les macros pilotĂ©es par configuration, et un nom de macro stockĂ© dans une cellule.

Henry
VBA CallByName dans Excel — Lire ou Ă©crire une propriĂ©tĂ©, ou exĂ©cuter une mĂ©thode, par son nom

VBA CallByName dans Excel — Lire ou Ă©crire une propriĂ©tĂ©, ou exĂ©cuter une mĂ©thode, par son nom

CallByName lit une propriĂ©tĂ©, Ă©crit une propriĂ©tĂ© ou exĂ©cute une mĂ©thode sur un objet en utilisant le nom du membre sous forme de chaĂźne : c'est donc le code qui dĂ©cide quel membre toucher pendant qu'il tourne. Ce guide couvre les quatre types d'appel VbGet, VbLet, VbSet et VbMethod, pourquoi choisir le mauvais dĂ©clenche l'erreur 438, le passage d'arguments, la rĂšgle du tout-public, et le motif pour lequel la fonction existe — appliquer une table de noms de propriĂ©tĂ©s et de valeurs Ă  un contrĂŽle ou une forme sans un long bloc d'affectations rĂ©pĂ©titives.

Henry
VBA Evaluate dans Excel — Transformer une chaüne de formule en valeur

VBA Evaluate dans Excel — Transformer une chaüne de formule en valeur

Evaluate exĂ©cute une expression de feuille de calcul Excel conservĂ©e sous forme de texte et vous en rend le rĂ©sultat, en utilisant le moteur de calcul mĂȘme dont se servent vos cellules, de sorte que vous pouvez calculer une formule construite Ă  l'exĂ©cution. Ce guide couvre le raccourci entre crochets et pourquoi il n'est qu'Evaluate dĂ©guisĂ©, la raison pour laquelle les crochets n'acceptent pas de variable lĂ  oĂč Evaluate le peut, le test du variant Error renvoyĂ© Ă  l'aide d'IsError, la qualification de l'appel vers la bonne feuille, et quand recourir Ă  Evaluate plutĂŽt qu'Ă  WorksheetFunction.

Henry
VBA FileDialog dans Excel — FilePicker, FolderPicker et lecture de .SelectedItems

VBA FileDialog dans Excel — FilePicker, FolderPicker et lecture de .SelectedItems

Application.FileDialog est le sĂ©lecteur intĂ©grĂ© qui permet Ă  une macro de demander un fichier ou un dossier Ă  l'utilisateur au lieu de coder un chemin en dur. Ce guide traite les trois outils de demande de chemin comme une seule et mĂȘme idĂ©e — ils renvoient une chaĂźne de chemin, ils n'ouvrent et n'enregistrent rien. Il couvre les quatre types de boĂźtes de dialogue (FilePicker, FolderPicker, SaveAs, Open), pourquoi .Show renvoie -1 pour une sĂ©lection et 0 pour une annulation plutĂŽt que True ou False, la lecture du rĂ©sultat dans la collection .SelectedItems indexĂ©e Ă  partir de 1, l'autorisation de la sĂ©lection multiple, l'ajout de filtres de fichiers, et quand prĂ©fĂ©rer le plus simple GetOpenFilename.

Henry
VBA GetOpenFilename dans Excel — obtenez un chemin de fichier, puis ouvrez-le vous-mĂȘme

VBA GetOpenFilename dans Excel — obtenez un chemin de fichier, puis ouvrez-le vous-mĂȘme

Application.GetOpenFilename est la façon en une ligne pour une macro de demander Ă  l'utilisateur quel fichier utiliser, au lieu de coder un chemin en dur. Ce guide rend impossibles Ă  manquer les deux faits qui piĂšgent tout le monde — elle renvoie une chaĂźne de chemin et n'ouvre rien, et l'annulation renvoie le boolĂ©en False, si bien que la variable doit ĂȘtre dĂ©clarĂ©e Dim As Variant. Il couvre la syntaxe de FileFilter, la dĂ©finition d'un filtre par dĂ©faut et d'un titre de boĂźte de dialogue, le renvoi d'un tableau de chemins indexĂ© Ă  partir de 1 avec MultiSelect, et en quoi elle diffĂšre de l'objet FileDialog plus complet.

Henry
VBA GetSaveAsFilename dans Excel — demander oĂč enregistrer sans enregistrer

VBA GetSaveAsFilename dans Excel — demander oĂč enregistrer sans enregistrer

Application.GetSaveAsFilename affiche la boĂźte de dialogue Enregistrer sous et renvoie le chemin que l'utilisateur a choisi — mais elle n'enregistre rien, et c'est le fait qui surprend tout le monde. Ce guide est le miroir de GetOpenFilename — elle renvoie une chaĂźne de chemin et l'annulation renvoie le boolĂ©en False, si bien que la variable doit ĂȘtre dĂ©clarĂ©e Dim As Variant. Il couvre la suggestion d'un nom par dĂ©faut avec InitialFileName, le FileFilter, et le piĂšge suivant — le vrai format du fichier vient de votre argument FileFormat de SaveAs, et non de l'extension que l'utilisateur a choisie, si bien qu'une incohĂ©rence produit un fichier qui ne s'ouvrira pas.

Henry
VBA ListBox dans Excel — Le remplir, lire la sĂ©lection et le piĂšge MultiSelect

VBA ListBox dans Excel — Le remplir, lire la sĂ©lection et le piĂšge MultiSelect

VBA ListBox affiche une liste d'options sur un UserForm et laisse l'utilisateur en choisir un ou plusieurs. Ce guide traite chaque contrĂŽle de UserForm comme une seule idĂ©e : un objet vivant que vous lisez Ă  travers ses propriĂ©tĂ©s, jamais la valeur elle-mĂȘme. Il couvre le remplissage d'un ListBox en un coup avec .List = Range.Value plutĂŽt que .AddItem dans une boucle, la lecture d'un choix unique avec .ListIndex et .Value, le piĂšge numĂ©ro un selon lequel .Value passe Ă  Null dĂšs que MultiSelect est actif, si bien que vous devez parcourir .Selected(i), le vidage avec .Clear, et quand prĂ©fĂ©rer un ListBox Ă  un ComboBox.

Henry
VBA ComboBox dans Excel — Remplir une liste dĂ©roulante, lire le choix et le piĂšge ListIndex = -1

VBA ComboBox dans Excel — Remplir une liste dĂ©roulante, lire le choix et le piĂšge ListIndex = -1

VBA ComboBox est une liste dĂ©roulante sur un UserForm qui laisse l'utilisateur choisir un Ă©lĂ©ment ou, par dĂ©faut, saisir le sien. Ce guide le prĂ©sente comme un ListBox repliĂ© sur une seule ligne qui rĂ©pond Ă  deux questions Ă  la fois : quel Ă©lĂ©ment, lu avec .ListIndex, et quel texte, lu avec .Value. Il couvre le remplissage avec .List = Range.Value, la propriĂ©tĂ© .Style qui dĂ©cide si la saisie est permise, le piĂšge numĂ©ro un selon lequel un .Value non vide n'est pas la mĂȘme chose qu'un choix valide, si bien que vous testez .ListIndex supĂ©rieur ou Ă©gal Ă  0, et quand un ComboBox l'emporte sur un ListBox.

Henry
VBA CheckBox dans Excel — True/False, le Null de TripleState et le regroupement des OptionButton

VBA CheckBox dans Excel — True/False, le Null de TripleState et le regroupement des OptionButton

VBA CheckBox est une bascule oui/non sur un UserForm dont vous lisez le .Value comme un Boolean, True ou False. Ce guide le prĂ©sente comme le contrĂŽle le plus simple qui soit, puis les deux choses qui surprennent : TripleState, qui ajoute un troisiĂšme .Value valant Null, si bien que If cb.Value dĂ©clenche un type mismatch, et la rĂšgle de regroupement de son cousin l'OptionButton, oĂč chaque bouton radio d'un mĂȘme conteneur forme un seul groupe exclusif tant que vous ne les sĂ©parez pas avec un Frame. Il couvre la lecture des cases, le cĂąblage des boutons radio, et le fait de ne jamais simuler un groupe radio avec des cases Ă  cocher.

Henry
VBA Exit For dans Excel — Exit For, Exit Do, Exit Sub et la sortie anticipĂ©e propre

VBA Exit For dans Excel — Exit For, Exit Do, Exit Sub et la sortie anticipĂ©e propre

VBA Exit For quitte une boucle For dĂšs l'instant oĂč vous avez trouvĂ© ce que vous cherchiez, au lieu de dĂ©rouler chaque itĂ©ration restante. Ce guide prĂ©sente toute la famille Exit comme une seule idĂ©e : quitter tĂŽt et proprement la structure courante. Il couvre Exit For et Exit Do pour les boucles, Exit Sub et Exit Function pour les procĂ©dures, la surprise numĂ©ro un selon laquelle Exit For ne quitte que la boucle la plus interne, pourquoi il n'existe ni Exit If ni Continue en VBA, le motif de la clause de garde qui remplace l'imbrication profonde, et pourquoi Exit est une porte propre hors d'un bloc tandis que End arrĂȘte toute la macro.

Henry
VBA GoTo dans Excel — Sauter vers un label, et pourquoi vous devriez le plus souvent l'Ă©viter

VBA GoTo dans Excel — Sauter vers un label, et pourquoi vous devriez le plus souvent l'Ă©viter

VBA GoTo fait sauter l'exĂ©cution vers une ligne Ă©tiquetĂ©e dans la mĂȘme procĂ©dure, sans condition. Ce guide explique comment fonctionne la syntaxe du label et du saut, le seul endroit oĂč GoTo a vraiment sa place aujourd'hui (On Error GoTo pour la gestion des erreurs), et pourquoi, pour le flux de contrĂŽle ordinaire, c'est presque toujours le mauvais outil. Il couvre le piĂšge du saut vers l'intĂ©rieur ou l'extĂ©rieur d'une boucle qui corrompt le compteur, pourquoi VBA n'a pas de Continue et comment on dĂ©tourne GoTo pour le simuler, pourquoi vous ne pouvez pas faire un GoTo entre procĂ©dures, et les remplacements structurĂ©s (Exit, clauses de garde, boucles Do) qui se lisent mieux que n'importe quel saut.

Henry
VBA End dans Excel — End, End Sub, Exit Sub et Stop, à ne pas confondre

VBA End dans Excel — End, End Sub, Exit Sub et Stop, à ne pas confondre

VBA End arrĂȘte toute la macro d'un seul coup, en jetant chaque variable et en sautant tout nettoyage que vous aviez prĂ©vu, ce qui le rend bien plus destructeur qu'il n'en a l'air. Ce guide dĂ©mĂȘle quatre choses qui contiennent toutes le mot end mais font des travaux trĂšs diffĂ©rents : l'instruction End nue qui arrĂȘte tout, End Sub et End If qui ne font que fermer un bloc, Exit Sub qui revient d'une seule procĂ©dure, et Stop qui met en pause dans le dĂ©bogueur. Il explique ce que End rĂ©initialise vraiment, pourquoi il peut laisser ScreenUpdating dĂ©sactivĂ© ou les Ă©vĂ©nements coupĂ©s, et pourquoi vous n'en voulez presque jamais.

Henry
VBA ReDim dans Excel — Redimensionner des tableaux avec ReDim et ReDim Preserve

VBA ReDim dans Excel — Redimensionner des tableaux avec ReDim et ReDim Preserve

VBA ReDim redimensionne un tableau dynamique Ă  l'exĂ©cution, parce qu'un tableau VBA a une taille fixe dĂšs l'instant oĂč vous le Dim, Ă  moins de laisser les crochets vides. Ce guide explique la seule dĂ©cision qui gouverne les tableaux : taille fixe ou dynamique. Il couvre pourquoi Dim a() crĂ©e un tableau sans taille, comment ReDim lui en donne une, pourquoi un ReDim simple efface toutes les valeurs alors que ReDim Preserve conserve les donnĂ©es, la rĂšgle selon laquelle ReDim Preserve ne peut agrandir que la derniĂšre dimension d'un tableau Ă  deux dimensions, pourquoi vous ne pouvez pas faire un ReDim sur un tableau de taille fixe, ce que fait rĂ©ellement Erase, et pourquoi agrandir un tableau Ă©lĂ©ment par Ă©lĂ©ment dans une boucle est lent.

Henry
VBA UBound dans Excel — Taille d'un tableau avec UBound et LBound (et le dĂ©calage d'indice)

VBA UBound dans Excel — Taille d'un tableau avec UBound et LBound (et le dĂ©calage d'indice)

VBA UBound renvoie l'indice valide le plus élevé d'un tableau et LBound renvoie le plus bas, parce qu'en VBA on ne compte pas un tableau, on lui demande sa taille. Ce guide explique pourquoi les tableaux VBA sont indexés à partir de zéro par défaut, si bien qu'un tableau de dix éléments va de l'indice 0 à 9, pourquoi ce décalage d'indice est le bug de boucle numéro un, pourquoi la boucle sûre est For i = LBound To UBound plutÎt que 0 To UBound, comment calculer une vraie longueur avec UBound moins LBound plus un, comment obtenir la taille de chaque dimension d'un tableau 2D avec UBound tableau 2, et pourquoi UBound sur un tableau dynamique vide lÚve l'erreur 9.

Henry
VBA 2D Arrays dans Excel — Tableaux à deux dimensions, grilles et Range.Value

VBA 2D Arrays dans Excel — Tableaux à deux dimensions, grilles et Range.Value

Un tableau 2D VBA est un seul tableau adressé par deux indices, une grille de lignes et de colonnes, et non un tableau de tableaux. Ce guide explique le modÚle mental d'une grille avec un indice de ligne et un indice de colonne, comment déclarer un tableau à deux dimensions avec Dim g lignes et colonnes, comment lire et écrire chaque cellule avec g ligne virgule colonne, et le fait le plus utile pour les développeurs Excel : lire Range.Value vous remet un tableau Variant à deux dimensions basé sur un, ce qui est la façon la plus rapide de traiter une feuille parce que vous ne touchez la feuille qu'une fois. Il couvre aussi l'écriture d'un tableau vers une plage en une seule fois, la limite de la derniÚre dimension de ReDim Preserve pour ajouter des lignes, et en quoi un tableau irrégulier de tableaux diffÚre d'un vrai tableau 2D.

Henry
VBA Set dans Excel — pourquoi les variables objet ont besoin de Set (et les erreurs 91 et 424)

VBA Set dans Excel — pourquoi les variables objet ont besoin de Set (et les erreurs 91 et 424)

VBA Set affecte une rĂ©fĂ©rence Ă  une variable objet, parce qu'une variable objet est une Ă©tiquette qui pointe vers un objet, pas une boĂźte qui en contient un. Oubliez Set sur un objet et vous obtenez l'erreur d'exĂ©cution 91, Object variable or With block variable not set ; utilisez Set sur autre chose qu'un objet et vous obtenez l'erreur 424, Object required. Ce guide couvre le modĂšle mental de la rĂ©fĂ©rence contre la valeur, pourquoi Range, Worksheet et Dictionary ont besoin de Set alors qu'Integer et String n'en ont pas besoin, comment Set fait de deux variables des alias du mĂȘme objet vivant, et comment lire les deux erreurs d'exĂ©cution les plus courantes de VBA.

Henry
VBA New dans Excel — crĂ©er des objets, New contre CreateObject, et le piĂšge du Dim As New

VBA New dans Excel — crĂ©er des objets, New contre CreateObject, et le piĂšge du Dim As New

VBA New construit une toute nouvelle instance d'un objet, si bien que Set d = New Dictionary crĂ©e un Dictionary neuf et vide. New relĂšve de la liaison anticipĂ©e, qui exige une rĂ©fĂ©rence de bibliothĂšque mais offre IntelliSense et rapiditĂ©, tandis que CreateObject relĂšve de la liaison tardive, qui n'exige aucune rĂ©fĂ©rence et reste portable d'une machine Ă  l'autre. Ce guide couvre le modĂšle mental de New comme l'instant oĂč un objet naĂźt, quand choisir New plutĂŽt que CreateObject, le piĂšge du Dim As New oĂč l'objet est créé paresseusement et se ressuscite en silence aprĂšs que vous l'avez libĂ©rĂ©, et pourquoi vous ne pouvez pas faire un New sur une Worksheet ou un Range.

Henry
VBA Nothing dans Excel — libĂ©rer les rĂ©fĂ©rences, Is Nothing contre = Nothing, et quand cela compte

VBA Nothing dans Excel — libĂ©rer les rĂ©fĂ©rences, Is Nothing contre = Nothing, et quand cela compte

VBA Nothing est l'état de référence vide, une variable objet qui ne pointe vers aucun objet, et toute variable objet commence sa vie à Nothing. Vous le testez avec If x Is Nothing, à l'aide de l'opérateur Is, parce qu'un simple = ne peut pas comparer des objets. Set x = Nothing libÚre la référence. Ce guide couvre le modÚle mental de Nothing comme un pointeur vide, pourquoi la garde du Find qui a renvoyé Nothing est l'usage réel le plus courant, quand libérer vers Nothing compte réellement par opposition à quand ce n'est qu'un rituel inoffensif, et en quoi Nothing diffÚre d'Empty, de Null et de la chaßne vide.

Henry
VBA Round dans Excel — l'arrondi bancaire et pourquoi il diffùre de la feuille de calcul

VBA Round dans Excel — l'arrondi bancaire et pourquoi il diffùre de la feuille de calcul

VBA Round applique l'arrondi bancaire (arrondi au pair le plus proche), si bien que Round(2.5) vaut 2 et Round(3.5) vaut 4, ce qui contredit en silence le ROUND de la feuille de calcul qui arrondit les moitiés en s'éloignant de zéro. Ce guide couvre le modÚle mental selon lequel les maths de VBA ne sont pas celles de la feuille, le bug numéro un d'un total de macro décalé d'un centime par rapport à la feuille, comment coller à la cellule avec Application.WorksheetFunction.Round, pourquoi Int et Fix tronquent au lieu d'arrondir et divergent sur les nombres négatifs, et quand l'arrondi bancaire est réellement le bon choix.

Henry
VBA Mod dans Excel — l'opĂ©rateur de reste, les nĂ©gatifs et le piĂšge du signe

VBA Mod dans Excel — l'opĂ©rateur de reste, les nĂ©gatifs et le piĂšge du signe

VBA Mod est un opérateur, pas une fonction, et il surprend deux fois : il arrondit ses deux opérandes à des entiers avant de diviser, et le résultat prend le signe du dividende, si bien que -7 Mod 3 vaut -1 alors que le MOD(-7,3) de la feuille vaut 2. Ce guide couvre le modÚle mental du reste aprÚs division entiÚre, le bug numéro un qui consiste à porter une formule MOD de la feuille directement dans VBA, les idiomes de la ligne sur N et du test de parité, comment construire un enveloppement toujours positif avec ((a Mod b) + b) Mod b, et pourquoi x Mod 0 lÚve l'erreur 11.

Henry
VBA Rnd dans Excel — nombres alĂ©atoires, Randomize et le piĂšge de la sĂ©quence qui se rĂ©pĂšte

VBA Rnd dans Excel — nombres alĂ©atoires, Randomize et le piĂšge de la sĂ©quence qui se rĂ©pĂšte

VBA Rnd renvoie un Single dans l'intervalle 0 Ă  1 et rejoue exactement la mĂȘme sĂ©quence Ă  chaque exĂ©cution de la macro, jusqu'Ă  ce que vous appeliez Randomize une fois pour l'amorcer Ă  partir de l'horloge du systĂšme. Ce guide couvre le modĂšle mental d'un gĂ©nĂ©rateur pseudo-alĂ©atoire Ă  graine, le bug numĂ©ro un d'un tirage alĂ©atoire identique Ă  chaque fois parce que Randomize manque, la bonne formule d'entier dans un intervalle Int((hi - lo + 1) * Rnd + lo), comment reproduire une sĂ©quence Ă  dessein pour les tests, pourquoi Rnd n'est pas fait pour la sĂ©curitĂ©, et quand RandBetween est le meilleur outil.

Henry
VBA Move Rows dans Excel — couper et insĂ©rer sans Ă©craser (pas couper-coller)

VBA Move Rows dans Excel — couper et insĂ©rer sans Ă©craser (pas couper-coller)

Déplacer une ligne en VBA, c'est couper et insérer, pas couper-coller. Rows(5).Cut Destination:=Rows(20) colle par-dessus la ligne 20 et la détruit en silence ; Rows(5).Cut puis Rows(20).Insert ouvre un espace et décale tout vers le bas pour ne rien perdre. Ce guide couvre le modÚle mental d'un déplacement qui est un décalage, le bug de perte de données numéro un qui consiste à coller au lieu d'insérer, pourquoi le trou de la ligne source se referme et renumérote tout ce qui se trouve en dessous quand on déplace vers le bas, comment déplacer plusieurs lignes de bas en haut, et pourquoi les références suivent une ligne coupée au lieu de virer en #REF!.

Henry
VBA Move Columns dans Excel — repositionner des colonnes avec couper et insĂ©rer (EntireColumn)

VBA Move Columns dans Excel — repositionner des colonnes avec couper et insĂ©rer (EntireColumn)

DĂ©placer une colonne en VBA, c'est le mĂȘme couper-insĂ©rer que dĂ©placer une ligne, tournĂ© de 90 degrĂ©s : Cut Destination:= colle par-dessus la colonne cible et la perd, tandis que couper puis Insert ouvre un espace et dĂ©cale les colonnes vers la droite pour ne rien dĂ©truire. Ce guide couvre le fait de couper l'EntireColumn plutĂŽt qu'une plage partielle, pourquoi le trou de la colonne source se referme et dĂ©cale votre cible d'un cran vers la gauche, rĂ©ordonner plusieurs colonnes par nom d'en-tĂȘte sans qu'elles atterrissent au mauvais endroit, et pourquoi les rĂ©fĂ©rences suivent une colonne dĂ©placĂ©e au lieu de virer en #REF!.

Henry
VBA Cut dans Excel — Range.Cut, Cut face Ă  Copy, et les deux façons de poser ce que vous avez coupĂ©

VBA Cut dans Excel — Range.Cut, Cut face Ă  Copy, et les deux façons de poser ce que vous avez coupĂ©

Range.Cut en VBA ramasse des cellules ; ensuite il existe exactement deux façons de les reposer qui font l'inverse l'une de l'autre. Cut Destination:= (un collage) les dépose par-dessus et écrase ; Destination.Insert ouvre un espace et décale. Ce guide couvre Cut face à Copy (un déplacement vide la source, une copie la laisse), les deux consommateurs d'une coupe, pourquoi vous réglez Application.CutCopyMode = False, pourquoi Cut refuse une plage multi-zone, et pourquoi les références de formule suivent une coupe au lieu de virer en #REF! comme à une suppression.

Henry
VBA Group Rows dans Excel — plans rĂ©ductibles, niveaux et le piĂšge de la ligne rĂ©capitulative

VBA Group Rows dans Excel — plans rĂ©ductibles, niveaux et le piĂšge de la ligne rĂ©capitulative

Rows.Group ne cache ni ne supprime rien ; il ajoute une bande Ă  un plan (outline) rĂ©ductible, et les donnĂ©es restent lĂ , simplement repliables. Ce guide couvre le modĂšle mental du regroupement comme pli plutĂŽt que masquage, le rĂ©glage SummaryRow qui dĂ©cide du cĂŽtĂ© oĂč atterrit le bouton de rĂ©duction et le dĂ©tache en silence d'une ligne de total placĂ©e au-dessus, pourquoi on rĂ©duit par niveau avec ShowLevels plutĂŽt qu'en touchant Hidden, et pourquoi ClearOutline vaut mieux qu'une boucle d'Ungroup quand on reconstruit.

Henry
VBA Group Columns dans Excel — plan horizontal et pourquoi le bouton est du mauvais cĂŽtĂ©

VBA Group Columns dans Excel — plan horizontal et pourquoi le bouton est du mauvais cĂŽtĂ©

Columns.Group replie des colonnes derriĂšre un plan (outline) horizontal en haut de la feuille, le mĂȘme pli que grouper des lignes tournĂ© de 90 degrĂ©s. Ce guide couvre pourquoi on groupe la colonne entiĂšre et jamais une plage partielle, le rĂ©glage SummaryColumn qui place par dĂ©faut le bouton de rĂ©duction Ă  droite du groupe et le dĂ©tache d'une colonne de totaux Ă  gauche, comment ShowLevels rĂ©duit les colonnes sur leur propre axe, et pourquoi grouper n'est pas le mĂȘme outil que masquer une colonne ou rĂ©gler sa largeur.

Henry
VBA Outline dans Excel — piloter les niveaux, AutoOutline et Subtotal en code

VBA Outline dans Excel — piloter les niveaux, AutoOutline et Subtotal en code

L'Outline est l'objet sur lequel s'appuie tout regroupement ; ShowLevels rĂ©duit et dĂ©veloppe toute la feuille Ă  un niveau donnĂ© en un seul appel, bien mieux qu'une boucle sur Hidden. Ce guide couvre le pilotage des deux axes avec ShowLevels, pourquoi AutoOutline a besoin de vraies formules de synthĂšse sous peine d'Ă©chouer avec l'erreur 1004, comment Subtotal crĂ©e d'un coup les groupes, le plan et les lignes SUBTOTAL mais s'empile Ă  chaque re-lancement sauf si on retire d'abord, et comment ShowDetail dĂ©veloppe un seul nƓud tandis que ClearOutline est la rĂ©initialisation propre.

Henry
VBA Insert Column dans Excel — ajouter des colonnes sans dĂ©chirer la grille ni casser les formules

VBA Insert Column dans Excel — ajouter des colonnes sans dĂ©chirer la grille ni casser les formules

Columns.Insert ne fait pas surgir une colonne vierge de nulle part ; il pousse les colonnes existantes vers la droite et réécrit les formules qui pointaient dedans, si bien qu'Insert est en réalité un décalage. Ce guide couvre pourquoi vous insérez l'EntireColumn et jamais une plage partielle, comment les références suivent les données alors que les adresses VBA en dur ne le font pas, l'insertion de plusieurs colonnes en un seul appel plutÎt que dans une boucle vers l'avant, et la rÚgle CopyOrigin qui décide de quel voisin la nouvelle colonne hérite sa mise en forme.

Henry
VBA Delete Column dans Excel — supprimer des colonnes sans erreurs #REF! ni colonnes sautĂ©es

VBA Delete Column dans Excel — supprimer des colonnes sans erreurs #REF! ni colonnes sautĂ©es

Columns.Delete, c'est Insert à l'envers : il tire chaque colonne de droite d'un cran vers la gauche, et toute formule qui pointait dans la colonne supprimée s'effondre en une erreur #REF! permanente. Ce guide couvre pourquoi les références se cassent, le piÚge de la boucle vers l'avant qui fait sauter des colonnes à une suppression, la suppression par condition avec un seul Union pour que rien ne se renumérote en cours de boucle, et quand ClearContents est l'opération que vous vouliez vraiment au lieu de Delete.

Henry
VBA Insert Cells dans Excel — insĂ©rer ou supprimer une plage et choisir vous-mĂȘme le sens du dĂ©calage

VBA Insert Cells dans Excel — insĂ©rer ou supprimer une plage et choisir vous-mĂȘme le sens du dĂ©calage

DĂšs l'instant oĂč vous insĂ©rez ou supprimez une plage partielle au lieu d'une colonne ou d'une ligne entiĂšre, vous hĂ©ritez d'une dĂ©cision qu'Excel prend en silence : dans quel sens dĂ©caler les cellules environnantes. Ce guide couvre pourquoi les opĂ©rations sur ligne entiĂšre sont le cas sĂ»r, pourquoi omettre l'argument Shift laisse Excel deviner d'aprĂšs la forme de la plage et brouiller vos voisines, les constantes xlShift exactes pour Insert et Delete, et pourquoi une ligne entiĂšre est de toute façon en gĂ©nĂ©ral ce que vous vouliez.

Henry
VBA Add Sheet dans Excel — crĂ©er une feuille et la capturer correctement

VBA Add Sheet dans Excel — crĂ©er une feuille et la capturer correctement

Worksheets.Add est une fabrique qui vous rend la nouvelle feuille sous forme de valeur de retour : capturez-la donc avec Set ws = Worksheets.Add plutÎt que de la traquer ensuite avec ActiveSheet. Ce guide couvre cette valeur de retour que la plupart des débutants ignorent, pourquoi un Add sans argument place la feuille à gauche de la feuille active plutÎt qu'à la fin, les arguments Before et After qui contrÎlent la position, et les rÚgles de nommage partagées avec le renommage qui déclenchent l'erreur 1004 sur un nom en double ou illégal.

Henry
VBA Copy Sheet dans Excel — dupliquer une feuille sans crĂ©er de nouveau classeur

VBA Copy Sheet dans Excel — dupliquer une feuille sans crĂ©er de nouveau classeur

Worksheet.Copy utilise le mĂȘme positionnement Before et After qu'Add mais ne renvoie rien, et un Copy sans destination ne duplique pas la feuille dans le classeur : il crĂ©e un tout nouveau classeur contenant la copie. Ce guide couvre cette surprise, comment saisir la copie via ActiveSheet quand il n'y a pas de valeur de retour, ce qui voyage avec une feuille copiĂ©e, y compris son code et ses noms dĂ©finis, et comment Move reflĂšte Copy avec l'intention inverse.

Henry
VBA Delete Sheet dans Excel — supprimer une feuille sans l'invite ni le blocage

VBA Delete Sheet dans Excel — supprimer une feuille sans l'invite ni le blocage

Worksheet.Delete est la seule opĂ©ration sur les feuilles qui s'arrĂȘte pour demander, en lançant une boĂźte de dialogue de confirmation modale qui bloque en silence une macro sans surveillance ; vous la faites taire avec Application.DisplayAlerts False et la rĂ©activez dans un gestionnaire d'erreurs. Ce guide couvre cette discipline CleanExit, pourquoi Excel refuse de supprimer la derniĂšre feuille visible avec l'erreur 1004, pourquoi supprimer par index dans une boucle saute des feuilles Ă  moins de boucler Ă  l'envers, et comment supprimer une feuille seulement si elle existe.

Henry
VBA Protect Sheet dans Excel — verrouiller une feuille sans bloquer vos cellules de saisie

VBA Protect Sheet dans Excel — verrouiller une feuille sans bloquer vos cellules de saisie

Worksheet.Protect est l'interrupteur maßtre qui active l'étiquette Locked déjà posée sur chaque cellule, et comme chaque cellule est Locked par défaut, protéger une feuille sans préparation fige tout, y compris les cellules de saisie dont vos utilisateurs ont besoin. Ce guide couvre le déverrouiller-puis-protéger en deux temps, pourquoi les indicateurs AllowFiltering et AllowSorting comptent, pourquoi une feuille protégée bloque vos propres macros à moins de passer UserInterfaceOnly, pourquoi cet indicateur est perdu à l'enregistrement, et pourquoi le mot de passe est un garde-fou contre les accidents plutÎt qu'une vraie sécurité.

Henry
VBA Unprotect dans Excel — ĂŽter la protection d'une feuille en toute sĂ©curitĂ© (et le piĂšge du mot de passe)

VBA Unprotect dans Excel — ĂŽter la protection d'une feuille en toute sĂ©curitĂ© (et le piĂšge du mot de passe)

Worksheet.Unprotect remet l'interrupteur maĂźtre de protection sur arrĂȘt, mais il laisse l'Ă©tiquette Locked de chaque cellule exactement telle qu'elle Ă©tait : ĂŽter la protection ne dĂ©verrouille donc pas les cellules. Ce guide couvre le sandwich ĂŽter la protection-travailler-reprotĂ©ger que toute macro d'Ă©dition emploie, pourquoi un mot de passe erronĂ© ou absent sur une feuille protĂ©gĂ©e dĂ©clenche l'erreur 1004 ou se bloque sur une boĂźte de dialogue modale, pourquoi vous devez reprotĂ©ger dans un gestionnaire d'erreurs pour qu'un plantage ne laisse jamais la feuille ouverte, comment ĂŽter la protection de chaque feuille dans une boucle, et la limite honnĂȘte : VBA ne peut pas rĂ©cupĂ©rer un mot de passe que vous avez oubliĂ©.

Henry
VBA Lock Cells dans Excel — la propriĂ©tĂ© Locked qui ne fait rien Ă  elle seule

VBA Lock Cells dans Excel — la propriĂ©tĂ© Locked qui ne fait rien Ă  elle seule

La propriété Locked en VBA Excel n'est qu'une étiquette posée sur une cellule, pas un verrou actif, et elle ne fait absolument rien tant que la feuille de calcul n'est pas protégée : voilà pourquoi mettre Locked à True et constater que les utilisateurs peuvent toujours modifier la cellule est la confusion numéro un. Ce guide explique pourquoi chaque cellule démarre Locked, le flux de travail inversé qui déverrouille les cellules de saisie, pourquoi Locked renvoie Null sur une sélection mixte, le compagnon FormulaHidden qui masque une formule de la barre de formule, et pourquoi vous devez définir Locked pendant que la feuille n'est pas protégée.

Henry
VBA AutoFit dans Excel — ajuster colonnes et lignes à leur contenu, de la bonne façon

VBA AutoFit dans Excel — ajuster colonnes et lignes à leur contenu, de la bonne façon

AutoFit en VBA Excel mesure le contenu d'une colonne ou d'une ligne Ă  l'instant oĂč il s'exĂ©cute et y verrouille une taille fixe : c'est un instantanĂ© ponctuel, pas une rĂšgle vivante qui rĂ©-ajuste en continu. Ce guide couvre Columns.AutoFit face Ă  Rows.AutoFit, le piĂšge d'EntireColumn quand vous partez d'une plage partielle, pourquoi AutoFit doit ĂȘtre la derniĂšre ligne aprĂšs l'Ă©criture des donnĂ©es, pourquoi les cellules fusionnĂ©es le cassent en silence, et quand une largeur fixe que vous maĂźtrisez vaut mieux que de relancer AutoFit.

Henry
VBA Wrap Text dans Excel — faire tenir un texte long et grandir la ligne avec lui

VBA Wrap Text dans Excel — faire tenir un texte long et grandir la ligne avec lui

WrapText en VBA Excel remodÚle une cellule pour que le texte long se répartisse sur plusieurs lignes dans la largeur de la colonne au lieu de déborder sur les voisines, et c'est la seule propriété d'affichage qui rejaillit sur la hauteur de ligne. Ce guide explique pourquoi le renvoi n'agrandit la ligne que si la hauteur est en automatique, la séquence largeur fixe puis WrapText puis Rows.AutoFit, en quoi WrapText diffÚre d'un saut de ligne forcé Chr(10), pourquoi une plage mixte se relit en Null, et quand renvoyer une colonne ou la laisser telle quelle.

Henry
VBA Freeze Panes dans Excel — figer les lignes d'en-tĂȘte sans figer les mauvaises

VBA Freeze Panes dans Excel — figer les lignes d'en-tĂȘte sans figer les mauvaises

FreezePanes en VBA Excel verrouille les lignes du haut ou les colonnes de gauche de l'affichage pour qu'elles restent visibles pendant le dĂ©filement, mais c'est une propriĂ©tĂ© de la fenĂȘtre et non de la feuille, et elle fige tout ce qui se trouve au-dessus et Ă  gauche de la cellule active. Ce guide couvre pourquoi vous devez placer la cellule active avant de l'activer, pourquoi le figeage vit sur ActiveWindow et pourquoi chaque Nouvelle fenĂȘtre a le sien, comment le dĂ©sactiver et re-figer, FreezePanes face Ă  Split, et la voie sans sĂ©lection via SplitRow.

Henry
VBA PasteSpecial dans Excel — ne coller que les valeurs, les formats ou les formules (et pourquoi ça Ă©choue)

VBA PasteSpecial dans Excel — ne coller que les valeurs, les formats ou les formules (et pourquoi ça Ă©choue)

PasteSpecial en VBA Excel est un collage filtrĂ© qui lit un presse-papiers vivant, ce qui explique pourquoi il doit suivre immĂ©diatement un Copy et pourquoi tout ce qui vide le presse-papiers entre les deux dĂ©clenche PasteSpecial method of Range class failed. Ce guide couvre les deux axes — ce qui traverse (xlPasteValues, xlPasteFormats, xlPasteFormulas, xlPasteColumnWidths) et comment ça atterrit (Operation, Transpose, SkipBlanks) — le piĂšge du format, et quand se passer complĂštement de PasteSpecial.

Henry
VBA Paste Values dans Excel — figer des formules en rĂ©sultats, de la bonne façon

VBA Paste Values dans Excel — figer des formules en rĂ©sultats, de la bonne façon

Coller les valeurs en VBA Excel fige une formule vivante dans le nombre qu'elle a produit, si bien que le rĂ©sultat survit Ă  la suppression de sa source, que le recalcul des formules volatiles s'arrĂȘte, et que les liens externes se rompent avant l'envoi d'un fichier. Ce guide prĂ©sente la recette xlPasteValues, le piĂšge de format qui transforme des dates en numĂ©ros de sĂ©rie, le moment oĂč se tourner vers xlPasteValuesAndNumberFormats, et le raccourci en une ligne dst.Value = src.Value qui ne touche jamais au presse-papiers.

Henry
VBA Copy Destination dans Excel — dĂ©placer une plage sans toucher au presse-papiers

VBA Copy Destination dans Excel — dĂ©placer une plage sans toucher au presse-papiers

Range.Copy Destination en VBA Excel copie une plage directement vers une cible en une seule instruction, si bien que le presse-papiers n'est jamais touché, que rien ne peut le corrompre en cours d'exécution, et qu'il n'y a aucun Select pour ralentir la macro. Ce guide met en regard Copy Destination et l'aller-retour Select-Copy-Paste de l'enregistreur, explique la rÚgle de dimensionnement par le coin supérieur gauche, montre ce que transporte une copie complÚte face au raccourci valeurs seules dst.Value = src.Value, et précise quand le presse-papiers reste nécessaire.

Henry
VBA ColorIndex dans Excel — la palette de 56 couleurs et pourquoi votre couleur ressort fausse

VBA ColorIndex dans Excel — la palette de 56 couleurs et pourquoi votre couleur ressort fausse

En VBA Excel, ColorIndex n'est pas une couleur mais un numĂ©ro de siĂšge dans une palette de 56 emplacements que le classeur peut rĂ©attribuer ; c'est pourquoi le mĂȘme index paraĂźt or sur votre poste et moutarde chez un collĂšgue. Ce guide distingue ColorIndex (un emplacement de palette, de 1 Ă  56) de Color (une valeur RGB absolue), explique les valeurs spĂ©ciales xlNone et xlColorIndexAutomatic, et montre quand recourir encore Ă  ColorIndex et quand Color reste le choix le plus sĂ»r.

Henry
La fonction VBA RGB dans Excel — comment une couleur devient un nombre (et le piùge BGR)

La fonction VBA RGB dans Excel — comment une couleur devient un nombre (et le piùge BGR)

La fonction RGB en VBA Excel empile trois canaux de 0 à 255 dans un seul nombre Long, et ce nombre n'est pas stocké comme un code hexadécimal web le laisserait croire. Ce guide explique comment RGB construit une couleur, pourquoi la valeur relue depuis Color est un BGR aux octets inversés (si bien que coller un hexa web comme 4472C4 donne la mauvaise couleur), comment utiliser les constantes de couleur vb, et comment décomposer une couleur stockée en rouge, vert et bleu.

Henry
La mise en forme conditionnelle en VBA Excel — des rĂšgles qui restent vivantes, pas une boucle qui se pĂ©rime

La mise en forme conditionnelle en VBA Excel — des rĂšgles qui restent vivantes, pas une boucle qui se pĂ©rime

La mise en forme conditionnelle en VBA Excel est une rĂšgle permanente que vous confiez Ă  Excel une seule fois via la collection FormatConditions, et qu'Excel rĂ©exĂ©cute Ă  chaque modification, contrairement Ă  une boucle VBA qui colore les cellules une fois et se pĂ©rime dĂšs qu'une valeur change. Ce guide couvre l'ajout d'une rĂšgle avec FormatConditions.Add, l'habitude du delete-avant-add qui Ă©vite l'empilement des rĂšgles, le piĂšge des rĂ©fĂ©rences absolues contre relatives dans une rĂšgle par expression, et le moment oĂč une boucle statique reste le bon choix.

Henry
VBA ThisWorkbook dans Excel — pourquoi ce n'est pas la mĂȘme chose qu'ActiveWorkbook

VBA ThisWorkbook dans Excel — pourquoi ce n'est pas la mĂȘme chose qu'ActiveWorkbook

ThisWorkbook dĂ©signe toujours l'unique classeur qui contient votre code et ne change jamais, mĂȘme quand l'utilisateur clique sur une autre fenĂȘtre, tandis qu'ActiveWorkbook dĂ©signe ce qui se trouve au premier plan Ă  l'instant T. Ce guide explique la distinction entre le fixe et le versatile qui dĂ©cide si une macro modifie le bon fichier, pourquoi un Range non qualifiĂ© est la premiĂšre cause de macro qui corrompt le mauvais classeur, comment rĂ©fĂ©rencer un autre classeur ouvert par son nom, et pourquoi ThisWorkbook doit rester votre ancrage par dĂ©faut.

Henry
VBA ActiveWorkbook et ActiveSheet dans Excel — l'objet qui touche le mauvais fichier

VBA ActiveWorkbook et ActiveSheet dans Excel — l'objet qui touche le mauvais fichier

ActiveWorkbook et ActiveSheet pointent vers ce que l'utilisateur a cliqué en dernier, ce qui les rend pratiques et en fait la premiÚre source d'une macro qui touche le mauvais fichier. Ce guide explique pourquoi l'objet actif est une cible mouvante, l'anti-modÚle Select et Activate que les macros enregistrées laissent derriÚre elles, quand agir sur l'objet actif est réellement correct, comment lire l'objet actif une seule fois dans une variable au lieu d'y recourir sans cesse, et pourquoi les références directes battent la sélection à tous les coups.

Henry
VBA Worksheets dans Excel — rĂ©fĂ©rencer une feuille pour que renommer un onglet ne puisse rien casser

VBA Worksheets dans Excel — rĂ©fĂ©rencer une feuille pour que renommer un onglet ne puisse rien casser

La collection Worksheets est la façon de nommer une feuille en code, et vous pouvez l'adresser de trois maniÚres : par chaßne de nom, par numéro d'index ou par CodeName. Ce guide explique pourquoi le nom casse dÚs qu'un utilisateur renomme un onglet, pourquoi l'index casse quand quelqu'un réordonne les onglets, pourquoi le CodeName ne casse sur aucun des deux, la vraie différence entre Worksheets et Sheets, et comment définir une fois une variable feuille qualifiée pour que le reste de votre macro ne touche plus jamais une référence fragile.

Henry
VBA Comment dans Excel — mettre du code en commentaire, la rĂšgle de l'apostrophe et pourquoi il ne s'exĂ©cute jamais

VBA Comment dans Excel — mettre du code en commentaire, la rĂšgle de l'apostrophe et pourquoi il ne s'exĂ©cute jamais

Un commentaire VBA est la seule ligne que le compilateur a la garantie d'ignorer, ce qui en fait votre geste de dĂ©bogage le plus sĂ»r et votre habitude de documentation la plus dangereuse. Ce guide couvre l'apostrophe face Ă  Rem, comment mettre tout un bloc en commentaire avec l'Edit toolbar cachĂ©e, pourquoi un commentaire ne peut pas cohabiter avec une continuation de ligne, la diffĂ©rence entre un commentaire de source et l'objet Comment d'une cellule, et les seuls commentaires qui valent vraiment la peine d'ĂȘtre Ă©crits.

Henry
VBA Option Explicit dans Excel — transformer une faute de frappe silencieuse en erreur de compilation bruyante

VBA Option Explicit dans Excel — transformer une faute de frappe silencieuse en erreur de compilation bruyante

Option Explicit est la ligne au meilleur rapport bénéfice/effort de tout VBA, car sans elle un nom de variable mal orthographié n'est pas une erreur mais une toute nouvelle variable vide qui renvoie tranquillement zéro. Ce guide montre le bug de la faute de frappe silencieuse qu'elle élimine, pourquoi elle vaut par module et comment le réglage Require Variable Declaration l'ajoute pour vous, quoi faire quand Variable not defined apparaßt dans du vieux code, et pourquoi elle force la déclaration mais pas les types de données.

Henry
VBA Line Continuation dans Excel — le trait de soulignement, ses rùgles et le piùge des chaünes

VBA Line Continuation dans Excel — le trait de soulignement, ses rùgles et le piùge des chaünes

La continuation de ligne VBA est un espace suivi d'un trait de soulignement qui permet à une longue instruction de s'étendre sur plusieurs lignes physiques, et l'analyseur l'efface avant la compilation, si bien qu'elle ne change que la façon dont la source se lit. Ce guide couvre l'espace obligatoire avant le trait de soulignement, pourquoi vous ne pouvez pas couper à l'intérieur d'une chaßne littérale, pourquoi un commentaire tue une continuation, comment le deux-points fait l'inverse en joignant des instructions, et quand y recourir.

Henry
VBA Debug.Print dans Excel — pourquoi votre sortie part dans une fenĂȘtre que vous ne voyez pas

VBA Debug.Print dans Excel — pourquoi votre sortie part dans une fenĂȘtre que vous ne voyez pas

Debug.Print Ă©crit une ligne dans l'Immediate Window sans arrĂȘter la macro : c'est la façon non bloquante de regarder une boucle faire dĂ©filer ses valeurs au lieu de se noyer sous les popups MsgBox. Ce guide explique pourquoi Debug.Print semble ne rien faire tant que vous n'avez pas ouvert l'Immediate Window avec Ctrl+G, pourquoi le tampon d'environ 200 lignes jette silencieusement vos premiĂšres sorties, pourquoi imprimer une expression peut dĂ©clencher de vrais effets de bord, en quoi il diffĂšre de MsgBox, et quand cesser de journaliser dans la fenĂȘtre pour Ă©crire dans un fichier Ă  la place.

Henry
VBA Immediate Window dans Excel — la console qui exĂ©cute le code Ă  la demande

VBA Immediate Window dans Excel — la console qui exĂ©cute le code Ă  la demande

L'Immediate Window est deux outils en un : l'endroit oĂč atterrit la sortie de Debug.Print, et une console vivante oĂč vous tapez une ligne de VBA et l'exĂ©cutez sur-le-champ. Ce guide montre comment le raccourci ? Ă©value n'importe quelle expression, pourquoi taper ? devant une fonction exĂ©cute rĂ©ellement cette fonction et ses effets de bord, pourquoi vos variables locales se lisent comme vides tant que la macro n'est pas en pause en break mode, comment appeler un Sub ou une boucle d'une ligne Ă  la main, et quand la console a fait son travail et que la logique a sa place dans un module.

Henry
VBA Breakpoint dans Excel — geler une macro et l'exĂ©cuter pas Ă  pas, ligne par ligne

VBA Breakpoint dans Excel — geler une macro et l'exĂ©cuter pas Ă  pas, ligne par ligne

Un breakpoint gĂšle une macro sur une ligne avant qu'elle ne s'exĂ©cute et vous dĂ©pose en break mode, oĂč vous lisez chaque valeur vivante puis parcourez le code une ligne Ă  la fois avec F8. Ce guide couvre la pose de breakpoints avec F9, la diffĂ©rence entre Step Into et Step Over, pourquoi les breakpoints disparaissent Ă  la fermeture du classeur, pourquoi une instruction Stop ne doit jamais ĂȘtre livrĂ©e aux utilisateurs, comment Debug.Assert vous donne un breakpoint conditionnel ignorĂ© Ă  l'exĂ©cution, et quand l'exĂ©cution pas Ă  pas vaut mieux que parsemer le code de Debug.Print.

Henry
VBA IsNumeric dans Excel — pourquoi il dit oui à des choses qui ne sont pas des nombres

VBA IsNumeric dans Excel — pourquoi il dit oui à des choses qui ne sont pas des nombres

IsNumeric ne demande pas si une chaĂźne est un nombre ; il demande si VBA pourrait la convertir en nombre s'il essayait, et VBA essaie fort. Ce guide montre pourquoi IsNumeric renvoie True pour la notation scientifique, un littĂ©ral hexadĂ©cimal, un sĂ©parateur de milliers, une chaĂźne entourĂ©e d'espaces et mĂȘme une valeur Ă  signe final, pourquoi cela laisse passer de mauvaises donnĂ©es dans votre validation, pourquoi il dĂ©pend des paramĂštres rĂ©gionaux au point de corrompre les donnĂ©es d'une machine Ă  l'autre, et quand cesser de lui faire confiance pour verrouiller la forme avec l'opĂ©rateur Like Ă  la place.

Henry
VBA Like dans Excel — correspondance par caractĂšres gĂ©nĂ©riques et le piĂšge de la chaĂźne entiĂšre

VBA Like dans Excel — correspondance par caractĂšres gĂ©nĂ©riques et le piĂšge de la chaĂźne entiĂšre

L'opĂ©rateur VBA Like rĂ©pond Ă  une seule question boolĂ©enne : la chaĂźne entiĂšre Ă©pouse-t-elle cette forme Ă  caractĂšres gĂ©nĂ©riques ? Ce guide couvre les cinq jokers (astĂ©risque, point d'interrogation, diĂšse, et les formes [liste] et [!liste]), pourquoi Like teste la chaĂźne entiĂšre — d'oĂč les astĂ©risques autour d'une sous-chaĂźne —, pourquoi sa sensibilitĂ© Ă  la casse est un interrupteur Option Compare Ă  l'Ă©chelle du module sans dĂ©rogation par appel, comment reconnaĂźtre un astĂ©risque littĂ©ral avec les crochets, et quand Like l'emporte Ă  la fois sur InStr et sur une expression rĂ©guliĂšre complĂšte.

Henry
VBA Regex dans Excel — l'objet RegExp et pourquoi votre correspondance revient vide

VBA Regex dans Excel — l'objet RegExp et pourquoi votre correspondance revient vide

Regex en VBA n'est pas un mot-clé : c'est l'objet VBScript RegExp que vous créez, et il ne fait rien d'utile tant que vous n'avez pas réglé trois interrupteurs et choisi la bonne sortie. Ce guide couvre la liaison tardive contre l'ajout de la référence, pourquoi Global vaut False par défaut si bien que vous n'obtenez que la premiÚre correspondance, la différence entre Test, Replace et Execute, pourquoi extraire suppose d'aller au-delà de Match.Value jusqu'à SubMatches, et la saveur de motif VBScript avec ses références arriÚre en signe dollar.

Henry
VBA Filter dans Excel — extraire un sous-ensemble de tableau en un seul appel, et pourquoi ce n'est pas AutoFilter

VBA Filter dans Excel — extraire un sous-ensemble de tableau en un seul appel, et pourquoi ce n'est pas AutoFilter

La fonction VBA Filter prend un tableau de chaĂźnes unidimensionnel et renvoie un nouveau tableau, plus petit, ne contenant que les Ă©lĂ©ments qui incluent une sous-chaĂźne que vous nommez — c'est la cousine de InStr cĂŽtĂ© tableau, et elle ne touche jamais une cellule. Ce guide dĂ©mĂȘle la confusion permanente avec AutoFilter (une mĂ©thode de feuille qui masque des lignes), puis couvre les trois piĂšges qui font croire que Filter est cassĂ© : il correspond Ă  des sous-chaĂźnes et non Ă  des valeurs entiĂšres, il est sensible Ă  la casse par dĂ©faut tant que vous ne passez pas vbTextCompare, et il renvoie un tableau indexĂ© Ă  partir de zĂ©ro dont UBound vaut moins un quand rien ne correspond.

Henry
VBA Join dans Excel — du tableau à la chaüne, l'exact inverse de Split

VBA Join dans Excel — du tableau à la chaüne, l'exact inverse de Split

La fonction VBA Join recolle un tableau unidimensionnel en une seule chaĂźne, en plaçant un dĂ©limiteur entre chaque Ă©lĂ©ment — c'est l'exact inverse de Split, et le remĂšde en une ligne Ă  la boucle de concatĂ©nation qui laisse toujours un sĂ©parateur en trop. Ce guide montre pourquoi Join n'accepte qu'un tableau 1D (donc Range.Value Ă©choue tant que vous ne l'aplatissez pas), pourquoi le dĂ©limiteur vaut un espace par dĂ©faut plutĂŽt que rien, comment chaque Ă©lĂ©ment est converti en texte, et le pipeline Split-Filter-Join qui remplace une boucle de quinze lignes par une seule expression.

Henry
VBA Transpose dans Excel — remodeler un tableau et aplatir une colonne en 1D

VBA Transpose dans Excel — remodeler un tableau et aplatir une colonne en 1D

Application.Transpose Ă©change les lignes et les colonnes d'un tableau, mais son vrai travail quotidien en VBA est plus discret : transposer une plage d'une seule colonne la rĂ©duit au tableau unidimensionnel dont Join et Filter ont tous deux besoin. Ce guide couvre l'astuce d'aplatissement, pourquoi c'est Application.Transpose et jamais un Transpose nu, le plafond silencieux de 65 536 Ă©lĂ©ments qui vous trahit sur de gros volumes, et les erreurs qu'il dĂ©clenche sur les chaĂźnes de plus de 255 caractĂšres ou les tableaux contenant une valeur d'erreur — pour que vous sachiez exactement oĂč le remodelage s'arrĂȘte et oĂč une vraie boucle commence.

Henry
VBA Pivot Table dans Excel — crĂ©er, rafraĂźchir, et pourquoi il affiche de vieux chiffres

VBA Pivot Table dans Excel — crĂ©er, rafraĂźchir, et pourquoi il affiche de vieux chiffres

Un PivotTable en VBA Excel ne lit pas vos cellules ; il lit un PivotCache, un instantanĂ© figĂ© de la source pris au moment de la construction, et ce seul fait explique la plainte numĂ©ro un : vous modifiez les donnĂ©es et le pivot affiche encore les totaux de la veille tant que vous n'appelez pas RefreshTable. Ce guide couvre la construction moderne en deux temps avec PivotCaches.Create et CreatePivotTable, la disposition des champs via les quatre valeurs d'Orientation, l'ajout de champs de donnĂ©es avec la bonne fonction de synthĂšse, le piĂšge du rafraĂźchissement, et le piĂšge de la plage source que vous rĂ©glez en pointant le cache sur une Table pour que le pivot grandisse de lui-mĂȘme.

Henry
VBA Table (ListObject) dans Excel — ajouter des lignes et cesser de courir aprùs la derniùre ligne

VBA Table (ListObject) dans Excel — ajouter des lignes et cesser de courir aprùs la derniùre ligne

Une Table Excel en VBA est un ListObject, une plage qui connaĂźt son propre en-tĂȘte, son corps de donnĂ©es et ses bords, et qui s'auto-Ă©tend quand vous y Ă©crivez — ce qui explique prĂ©cisĂ©ment pourquoi elle supprime la corvĂ©e de macro la plus courante : chasser la derniĂšre ligne avec End(xlUp). Ce guide couvre la conversion d'une plage avec ListObjects.Add, l'adressage des parties par leur nom (HeaderRowRange, DataBodyRange, ListColumns), l'ajout de lignes de façon fiable avec ListRows.Add, le piĂšge du DataBodyRange qui vaut Nothing sur une table vide, et l'Ă©criture de formules Ă  rĂ©fĂ©rences structurĂ©es qui survivent aux insertions.

Henry
VBA Chart dans Excel — crĂ©er un graphique en code et pourquoi il trace les mauvaises donnĂ©es

VBA Chart dans Excel — crĂ©er un graphique en code et pourquoi il trace les mauvaises donnĂ©es

Un graphique en VBA Excel ne contient pas de données ; il contient une référence à un Range, car chaque série stocke ses valeurs sous forme de formule comme =Sheet1!$B$2:$B$13, et ce seul fait explique pourquoi un graphique trace silencieusement les mauvaises cellules dÚs que sa source bouge. Ce guide couvre la scission en deux conteneurs sur laquelle trébuche chaque macro de graphique (ChartObjects incorporés contre feuilles de graphique), la création d'un graphique et la liaison des données en un seul geste avec SetSourceData, l'ajout de séries à la main avec SeriesCollection.NewSeries, le piÚge du graphique en double à la réexécution, et la liaison de la source à une Table pour que le graphique suive les données au lieu d'une adresse figée.

Henry
VBA Named Range dans Excel — Names.Add, RefersTo, et pourquoi votre rĂ©fĂ©rence dĂ©rive

VBA Named Range dans Excel — Names.Add, RefersTo, et pourquoi votre rĂ©fĂ©rence dĂ©rive

Un named range en VBA Excel n'est pas un surnom pour une cellule, c'est une formule stockĂ©e qu'Excel réévalue chaque fois que vous utilisez le nom, et ce seul fait explique toutes les surprises que vous rencontrerez avec les noms. C'est pourquoi RefersTo exige un signe Ă©gal en tĂȘte, pourquoi les signes dollar dĂ©cident si le nom est absolu ou dĂ©rive avec la cellule active, pourquoi un nom possĂšde une portĂ©e limitĂ©e soit au classeur entier soit Ă  une feuille, et pourquoi supprimer les cellules sous un nom le laisse pointer vers une erreur #REF! permanente. Ce guide couvre Names.Add et le raccourci Range.Name en une ligne, la portĂ©e classeur contre feuille, la lecture de la valeur rĂ©fĂ©rencĂ©e par un nom, et le nettoyage des noms cassĂ©s qui alourdissent un classeur.

Henry
VBA AutoFill dans Excel — remplir une sĂ©rie ou une formule sans le piĂšge de Destination

VBA AutoFill dans Excel — remplir une sĂ©rie ou une formule sans le piĂšge de Destination

AutoFill en VBA Excel est un moteur de motifs, pas une commande de copie, et garder cette distinction en tĂȘte est ce qui l'empĂȘche de vous surprendre. Range.AutoFill prend une petite amorce et l'Ă©tend sur une destination plus grande, prolongeant une sĂ©rie comme 1, 2, 3 ou les mois de l'annĂ©e plutĂŽt que de simplement rĂ©pĂ©ter l'amorce, ce qui est Ă  la fois tout l'intĂ©rĂȘt et tout le piĂšge. Ce guide couvre la rĂšgle de destination qui provoque l'erreur d'exĂ©cution 1004 que tout le monde rencontre, le FillType qui dĂ©cide si vous obtenez une sĂ©rie ou une copie, le remplissage d'une formule vers le bas d'une colonne pour que ses rĂ©fĂ©rences s'ajustent ligne par ligne, et pourquoi les plus simples FillDown et FillRight sont gĂ©nĂ©ralement le meilleur outil quand vous ne voulez qu'une copie ordinaire.

Henry
VBA Clear dans Excel — ClearContents contre Clear contre Delete, et le piùge de la chaüne vide

VBA Clear dans Excel — ClearContents contre Clear contre Delete, et le piùge de la chaüne vide

Effacer une cellule en VBA Excel est un menu, pas une commande unique, et choisir le mauvais Ă©lĂ©ment, c'est ainsi que des macros ruinent discrĂštement un modĂšle ou dĂ©calent les cellules dont d'autres formules dĂ©pendent. Une cellule est un empilement de couches, la valeur et la formule, le format de nombre, la police et le remplissage, les bordures, la validation et les commentaires, et chaque mĂ©thode d'effacement efface un sous-ensemble choisi tandis que le reste survit. Ce guide couvre ClearContents contre Clear contre ClearFormats, pourquoi affecter une chaĂźne vide Ă  une cellule n'est pas la mĂȘme chose que la rendre vide, la diffĂ©rence cruciale entre Clear et Delete qui change chaque adresse en dessous, et comment effacer toute une used range en un seul appel rapide.

Henry
VBA Cell Value dans Excel — lire et Ă©crire .Value, et l'astuce plage-vers-tableau

VBA Cell Value dans Excel — lire et Ă©crire .Value, et l'astuce plage-vers-tableau

Lire et Ă©crire une cellule en VBA Excel passe par la propriĂ©tĂ© .Value du Range, et l'essentiel Ă  retenir tient Ă  ce qui se produit avec plus d'une cellule : une plage multi-cellules vous rend un tableau Variant Ă  deux dimensions en base 1, et lui rĂ©affecter un tableau Ă©crit tout le bloc en un seul appel. C'est la diffĂ©rence entre une macro instantanĂ©e et une qui rame, car chaque accĂšs Ă  Cells(i, j).Value franchit la frontiĂšre entre VBA et Excel. Ce guide couvre .Value sur une cellule contre une plage, l'aller-retour par tableau qui accĂ©lĂšre les lectures et Ă©critures en masse, pourquoi le tableau est en 2D mĂȘme pour une seule colonne, et le raccourci de propriĂ©tĂ© par dĂ©faut sur lequel il ne faut pas trop compter.

Henry
VBA Formula dans Excel — Ă©crire des formules en code avec .Formula et .FormulaR1C1

VBA Formula dans Excel — Ă©crire des formules en code avec .Formula et .FormulaR1C1

Écrire une formule depuis VBA Excel revient Ă  affecter une chaĂźne Ă  la propriĂ©tĂ© .Formula du Range, et la rĂšgle qui piĂšge tout le monde, c'est que .Formula ne parle qu'un seul dialecte figĂ© : noms de fonctions en anglais amĂ©ricain et sĂ©parateurs virgule, quels que soient la langue ou les paramĂštres rĂ©gionaux de l'utilisateur. Affecter =SUM(A1:A10) marche sur chaque machine et Excel localise l'affichage ; affecter la version allemande =SUMME(A1;A10) dĂ©clenche l'erreur d'exĂ©cution 1004. Ce guide couvre .Formula face Ă  la .FormulaLocal localisĂ©e, .FormulaR1C1 pour estamper une formule relative sur toute une plage, pourquoi le signe Ă©gal en tĂȘte est obligatoire, comment doubler les guillemets Ă  l'intĂ©rieur d'une chaĂźne de formule, et relire une formule avec .HasFormula.

Henry
VBA Value vs Value2 vs Text dans Excel — lequel lit la cellule correctement

VBA Value vs Value2 vs Text dans Excel — lequel lit la cellule correctement

Une cellule en VBA Excel a plus d'un visage, et lire le mauvais est un bug silencieux : .Value2 donne le nombre brut stockĂ©, .Value donne ce nombre converti vers un type VBA correspondant (une cellule au format Date renvoie un Date, une cellule monĂ©taire renvoie un Currency), et .Text donne la chaĂźne mise en forme affichĂ©e Ă  l'Ă©cran, en lecture seule. Lire .Text pour faire des calculs vous rend une chaĂźne comme $1,235 ou mĂȘme ### quand la colonne est Ă©troite ; lire .Value sur une cellule monĂ©taire peut arrondir un grand nombre ; .Value2 est le choix par dĂ©faut, rapide et sans perte. Ce guide explique les trois visages de lecture, quand la conversion Currency et Date perd de la prĂ©cision, pourquoi .Text est rĂ©servĂ© Ă  l'affichage et ne peut pas ĂȘtre affectĂ©, et vers quel visage se tourner.

Henry
VBA Shell dans Excel — lancer un programme externe, et pourquoi votre code n'attend pas

VBA Shell dans Excel — lancer un programme externe, et pourquoi votre code n'attend pas

La fonction VBA Shell lance un programme externe puis s'en va aussitĂŽt — c'est du fire-and-forget. Shell renvoie un identifiant de tĂąche, pas le code de sortie du programme, ni sa sortie, ni un indicateur de rĂ©ussite, et la ligne suivante de votre macro s'exĂ©cute pendant que le programme dĂ©marre encore. VoilĂ  le bug qui piĂšge la plupart du code Shell : vous lancez un convertisseur avec Shell puis tentez d'ouvrir un fichier qu'il n'a pas encore Ă©crit. Ce guide explique pourquoi Shell n'attend pas, comment mettre entre guillemets un chemin contenant des espaces, pourquoi Shell lance des exĂ©cutables mais ne sait pas ouvrir seul un PDF ou une URL, et quand abandonner Shell au profit de WScript.Shell Run ou Exec pour vraiment attendre le programme et lire ce qu'il a produit.

Henry
VBA Environ dans Excel — lire les chemins Windows sans coder en dur un dossier utilisateur

VBA Environ dans Excel — lire les chemins Windows sans coder en dur un dossier utilisateur

La fonction VBA Environ lit les variables d'environnement que Windows remet Ă  chaque programme — USERPROFILE, TEMP, USERNAME, APPDATA — pour que vous construisiez des chemins propres Ă  l'utilisateur sans coder en dur C:\Users\John, un chemin qui casse sur toutes les autres machines. Son piĂšge caractĂ©ristique est silencieux : une variable absente ou mal orthographiĂ©e renvoie une chaĂźne vide, pas une erreur, si bien qu'un nom mal saisi comme TMEP au lieu de TEMP donne discrĂštement du vide et fait atterrir votre chemin Ă  la racine du disque. Ce guide explique pourquoi Environ est l'outil des chemins portables, pourquoi vous devez traiter chaque rĂ©sultat comme possiblement vide, les deux formes d'appel (par nom ou par indice numĂ©rique), l'instantanĂ© qu'Environ capture au lancement d'Excel, et ce qu'Environ ne sait pas faire — dĂ©finir des variables ou lire celles modifiĂ©es aprĂšs le dĂ©marrage.

Henry
VBA CreateObject dans Excel — liaison tardive, GetObject, et pourquoi Outlook reste ouvert

VBA CreateObject dans Excel — liaison tardive, GetObject, et pourquoi Outlook reste ouvert

CreateObject est le passe-partout de VBA vers tout ce qui est hors d'Excel — il dĂ©marre n'importe quelle application COM par sa chaĂźne ProgID : Scripting.FileSystemObject, Scripting.Dictionary, Outlook.Application, WScript.Shell, Word.Application. Cette recherche par chaĂźne, c'est la liaison tardive : le compilateur ne sait rien de l'objet, donc un mauvais ProgID ou une application non installĂ©e n'Ă©choue qu'Ă  l'exĂ©cution, avec l'error 429. Ce guide explique la vraie dĂ©cision entre liaison tardive et liaison prĂ©coce (portabilitĂ© contre IntelliSense), pourquoi CreateObject dĂ©marre toujours une nouvelle instance tandis que GetObject se raccroche Ă  une instance dĂ©jĂ  en cours, et pourquoi un processus Outlook ou Excel sans interface reste suspendu dans le Gestionnaire des tĂąches quand vous oubliez de faire Quit sur l'application et de passer l'objet Ă  Nothing.

Henry
VBA Now, Date & Time dans Excel — lire l'horloge, et pourquoi Date est aussi une instruction

VBA Now, Date & Time dans Excel — lire l'horloge, et pourquoi Date est aussi une instruction

Une date VBA est un Double — la partie entiĂšre compte les jours depuis le 30/12/1899 et la partie dĂ©cimale porte l'heure, donc Now, Date et Time sont trois lectures de la mĂȘme horloge. Now renvoie la date et l'heure, Date renvoie aujourd'hui Ă  minuit, Time renvoie l'heure seule. Le bug qui casse le plus de code, c'est de comparer une valeur Now stockĂ©e avec Date sans jamais tomber juste, car Now porte une fraction d'heure que Date n'a pas. Pire, Date et Time sont aussi des instructions qui rĂšglent l'horloge systĂšme. Ce guide montre ce qu'est vraiment ce Double, pourquoi l'Ă©galitĂ© Ă©choue, comment retirer l'heure avec Int ou DateValue, et pourquoi Now donne l'heure locale et non UTC.

Henry
VBA DateAdd & DateDiff dans Excel — calculer sur les dates sans le bug de la longueur des mois

VBA DateAdd & DateDiff dans Excel — calculer sur les dates sans le bug de la longueur des mois

Comme une date VBA est un Double, ajouter 1 avance d'un jour et l'arithmĂ©tique simple est correcte — pour les jours. Elle casse dĂšs qu'on traite un mois comme 30 jours ou une annĂ©e comme 365, car les mois et les annĂ©es bissextiles n'ont pas une longueur fixe. DateAdd connaĂźt le calendrier, donc ajouter un mois au 31 janvier renvoie le 28 fĂ©vrier plutĂŽt qu'un 31 impossible. DateDiff compte les frontiĂšres franchies, pas le temps Ă©coulĂ©, si bien que l'Ă©cart du 31 dĂ©cembre au 1er janvier vaut un an mĂȘme si un seul jour a passĂ©. DateSerial construit une date Ă  partir de l'annĂ©e, du mois et du jour sans ambiguĂŻtĂ© rĂ©gionale et normalise les dĂ©bordements, ce qui donne l'idiome propre du dernier jour du mois. Ce guide montre quand le plus simple suffit, les codes d'intervalle qui piĂšgent, et pourquoi DateDiff est un comptage de frontiĂšres.

Henry
VBA Weekday & DatePart dans Excel — extraire les parties d'une date, et pourquoi lundi n'est pas 1

VBA Weekday & DatePart dans Excel — extraire les parties d'une date, et pourquoi lundi n'est pas 1

Year, Month, Day, Hour, Minute et Second extraient chacun un entier d'une date — ce Double dans lequel vous voyez dĂ©jĂ  — et ils sont aussi simples qu'ils en ont l'air. Weekday est celui qui piĂšge — il renvoie 1 Ă  7, mais la numĂ©rotation dĂ©pend d'un second argument dont la valeur par dĂ©faut fait dimanche Ă©gale 1, donc dans un appel nu lundi vaut 2, pas 1, et tout test de week-end bĂąti sur un nombre codĂ© en dur est discrĂštement faux. DatePart est l'extracteur gĂ©nĂ©ral avec les mĂȘmes codes d'intervalle que DateAdd, et il atteint des parties sans fonction dĂ©diĂ©e comme le numĂ©ro de semaine et le trimestre, mĂȘme si sa rĂšgle de semaine n'est pas ISO 8601 par dĂ©faut. WeekdayName et MonthName renvoient des noms dans la langue de la machine, bons pour l'affichage mais pas pour la relecture. Ce guide montre comment extraire chaque partie et pourquoi lundi n'est pas 1.

Henry
VBA FreeFile & l'instruction Open dans Excel — obtenir un numĂ©ro de fichier, ouvrir un fichier texte (pas un classeur)

VBA FreeFile & l'instruction Open dans Excel — obtenir un numĂ©ro de fichier, ouvrir un fichier texte (pas un classeur)

En VBA intĂ©grĂ©, on atteint un fichier texte par un canal numĂ©rotĂ© — vous Ă©crivez Open path For Output As #n, et le numĂ©ro n est une poignĂ©e qu'il faut prendre de FreeFile plutĂŽt que choisir Ă  la main. Codez #1 en dur et, dĂšs que deux fichiers sont ouverts, vous tombez sur l'erreur 55 File already open ; ouvrez For Output un fichier qui contient dĂ©jĂ  des donnĂ©es et il est vidĂ© ; oubliez Close et le fichier reste verrouillĂ© jusqu'Ă  la fermeture d'Excel. Ce guide montre pourquoi FreeFile vous remet un numĂ©ro de canal Ă  saisir dans une variable, la diffĂ©rence entre For Output, For Append et For Input, pourquoi l'instruction Open n'est pas Workbooks.Open, et le motif de nettoyage qui ferme toujours le canal.

Henry
VBA Print # vs Write # dans Excel — Ă©crire un fichier texte ou un CSV (et pourquoi le vĂŽtre a des guillemets partout)

VBA Print # vs Write # dans Excel — Ă©crire un fichier texte ou un CSV (et pourquoi le vĂŽtre a des guillemets partout)

Print # et Write # donnent des rĂ©ponses opposĂ©es Ă  la question de savoir Ă  quoi devraient ressembler les octets sur le disque. Print # Ă©crit le texte exactement tel qu'il apparaĂźt — pas de guillemets, pas de virgules, c'est vous qui construisez la mise en forme — il convient donc Ă  un rapport ou Ă  un CSV fait main. Write # Ă©crit un format machine — chaque chaĂźne entourĂ©e de guillemets, des virgules entre les valeurs, les dates entre diĂšses — conçu pour ĂȘtre relu par Input #, pas par un humain ni par Excel. Ce guide montre pourquoi Write # est la raison pour laquelle votre CSV est plein de guillemets, pourquoi une virgule dans une liste Print # insĂšre des zones d'impression au lieu de virgules CSV, comment For Output vide tandis que For Append ajoute, le piĂšge de la virgule dĂ©cimale liĂ©e Ă  la locale, et pourquoi l'Ă©criture intĂ©grĂ©e est en ANSI plutĂŽt qu'en UTF-8.

Henry
VBA Read Text File dans Excel — Line Input vs Input #, et la boucle EOF qui ne perd aucune ligne

VBA Read Text File dans Excel — Line Input vs Input #, et la boucle EOF qui ne perd aucune ligne

Lire un fichier texte en VBA offre trois outils, et choisir le mauvais brouille vos donnĂ©es. Line Input # lit une ligne brute dans une chaĂźne et c'est vous qui la dĂ©coupez, ce qui est prĂ©visible. Input # analyse les champs dĂ©limitĂ©s directement dans des variables — rapide pour un fichier que Write # a produit, mais il s'Ă©trangle sur les virgules non protĂ©gĂ©es et les guillemets Ă©garĂ©s. Input(LOF(f), #f) avale tout le fichier dans une seule chaĂźne. Ce guide montre la boucle EOF qui lit chaque ligne exactement une fois, pourquoi Input # est le jumeau de Write # et Line Input # celui de Print #, comment Ă©viter le dĂ©calage d'un cran qui lĂšve l'erreur 62, et quand un CSV vaut mieux ouvert comme un classeur qu'analysĂ© Ă  la main.

Henry
VBA MkDir dans Excel — crĂ©er un dossier, et pourquoi il ne peut pas crĂ©er un chemin imbriquĂ©

VBA MkDir dans Excel — crĂ©er un dossier, et pourquoi il ne peut pas crĂ©er un chemin imbriquĂ©

L'instruction VBA MkDir crĂ©e exactement un niveau de dossier, pas un chemin entier — MkDir sur un chemin dont le parent n'existe pas lĂšve l'erreur 76, et MkDir sur un dossier qui existe dĂ©jĂ  lĂšve l'erreur 75 au lieu de ne rien faire. Ainsi la tĂąche quotidienne crĂ©er ce dossier revient en rĂ©alitĂ© Ă  crĂ©er chaque niveau manquant, et seulement lĂ  oĂč il est absent. Ce guide montre pourquoi MkDir ne crĂ©e qu'un seul niveau, pourquoi FileSystemObject.CreateFolder ne rĂ©curse pas davantage, la boucle protĂ©gĂ©e par un test d'existence qui construit un chemin complet en toute sĂ©curitĂ©, et pourquoi un simple nom de dossier atterrit sous CurDir plutĂŽt que dans le dossier de votre classeur.

Henry
VBA RmDir dans Excel — supprimer un dossier, mais seulement s'il est vide

VBA RmDir dans Excel — supprimer un dossier, mais seulement s'il est vide

L'instruction VBA RmDir supprime un dossier uniquement lorsqu'il est complĂštement vide — pointez-la sur un dossier qui contient encore des fichiers ou des sous-dossiers et elle lĂšve l'erreur 75, l'exact reflet inverse de Kill, qui supprime n'importe quel fichier sans pitiĂ©. Ainsi supprimer ce dossier revient en rĂ©alitĂ© Ă  le vider d'abord, puis Ă  le retirer. Ce guide montre pourquoi RmDir refuse un dossier non vide, pourquoi il supprime les dossiers mais jamais les fichiers, comment vider un dossier avec Kill avant RmDir, et quand FileSystemObject.DeleteFolder efface une arborescence entiĂšre en un seul appel — sans corbeille et sans annulation.

Henry
VBA CurDir & ChDir dans Excel — pourquoi un chemin relatif atterrit dans le mauvais dossier

VBA CurDir & ChDir dans Excel — pourquoi un chemin relatif atterrit dans le mauvais dossier

En VBA, un chemin relatif n'a aucun sens tant qu'il n'est pas rĂ©solu par rapport Ă  CurDir, le rĂ©pertoire de travail courant — et dans Excel ce rĂ©pertoire est un rĂ©glage vagabond que vous ne contrĂŽlez pas, pas le dossier oĂč votre classeur est enregistrĂ©. Ainsi MkDir Reports ou Open data.csv peut atterrir Ă  un endroit diffĂ©rent Ă  chaque exĂ©cution, parce qu'une boĂźte de dialogue Ouvrir un fichier dĂ©place CurDir en silence. Ce guide montre pourquoi CurDir n'est pas ThisWorkbook.Path, pourquoi ChDir ne peut pas changer de lecteur sans ChDrive, et l'unique habitude qui Ă©limine toute la catĂ©gorie des bugs de mauvais dossier — ancrez chaque chemin Ă  ThisWorkbook.Path.

Henry
VBA Copy File dans Excel — FileCopy, FileSystemObject.CopyFile, et pourquoi il ne peut pas copier un classeur ouvert

VBA Copy File dans Excel — FileCopy, FileSystemObject.CopyFile, et pourquoi il ne peut pas copier un classeur ouvert

Copier un fichier en VBA tient en une ligne, mais laquelle dĂ©pend de savoir si le fichier est ouvert. FileCopy est l'instruction intĂ©grĂ©e qui n'exige aucune rĂ©fĂ©rence, et elle Ă©crase la destination en silence, pourtant elle ne peut pas copier un fichier ouvert et lĂšve l'erreur 70 Permission denied sur le seul classeur que vous voulez le plus sauvegarder. Ce guide trace la frontiĂšre entre trois outils de copie pour trois situations — FileCopy pour les fichiers fermĂ©s sur le disque, FileSystemObject.CopyFile pour les caractĂšres gĂ©nĂ©riques et un indicateur d'Ă©crasement explicite, et SaveCopyAs pour le classeur ouvert Ă  l'instant mĂȘme — et montre pourquoi la destination doit ĂȘtre un chemin complet incluant le nom du fichier, pourquoi le dossier cible doit dĂ©jĂ  exister, et comment copier-puis-supprimer devient un dĂ©placement.

Henry
VBA Delete File dans Excel — Kill, FileSystemObject.DeleteFile, et pourquoi il n'y a aucune annulation

VBA Delete File dans Excel — Kill, FileSystemObject.DeleteFile, et pourquoi il n'y a aucune annulation

L'instruction VBA Kill supprime un fichier dĂ©finitivement — pas de Corbeille, pas de confirmation, pas d'annulation. Ce seul fait est Ă  la fois tout l'intĂ©rĂȘt et tout le danger, et chaque autre rĂšgle sur la suppression de fichiers est une façon de garder cette ligne irrĂ©versible. Ce guide montre pourquoi Kill lĂšve une erreur au lieu de ne rien faire quand un fichier est absent ou ouvert, comment un caractĂšre gĂ©nĂ©rique efface toutes les correspondances d'un coup sans invite, pourquoi Kill ne peut pas retirer un dossier et comment RmDir et DeleteFolder se partagent cette tĂąche, et quand FileSystemObject.DeleteFile avec son indicateur Force est le choix le plus sĂ»r pour les fichiers en lecture seule.

Henry
VBA Rename File dans Excel — l'instruction Name qui dĂ©place aussi les fichiers (et refuse d'Ă©craser)

VBA Rename File dans Excel — l'instruction Name qui dĂ©place aussi les fichiers (et refuse d'Ă©craser)

L'instruction VBA Name renomme un fichier, mais c'est en rĂ©alitĂ© une instruction de renommage-et-dĂ©placement — pointez le nouveau chemin sur un dossier diffĂ©rent et VBA dĂ©place le fichier lĂ -bas au lieu de le renommer sur place. Et contrairement Ă  presque tout le reste sur le disque, Name refuse d'Ă©craser, levant l'erreur 58 quand la cible existe dĂ©jĂ , l'exact opposĂ© de FileCopy qui Ă©crase en silence. Ce guide montre pourquoi Name dĂ©place autant qu'il renomme, pourquoi il ne traverse pas les lecteurs et comment FileCopy plus Kill ou FileSystemObject.MoveFile gĂšre ce cas, et pourquoi vous devez protĂ©ger la destination pour qu'une erreur sur un fichier existant n'arrĂȘte pas une macro sans surveillance.

Henry
VBA Dir dans Excel — parcourir les fichiers d'un dossier, et l'itĂ©rateur Ă  Ă©tat qui vous piĂšge

VBA Dir dans Excel — parcourir les fichiers d'un dossier, et l'itĂ©rateur Ă  Ă©tat qui vous piĂšge

Dir ressemble Ă  une fonction mais se comporte comme un itĂ©rateur Ă  mĂ©moire cachĂ©e — Dir(path) renvoie le premier nom de fichier correspondant, puis Dir() sans argument renvoie le suivant, et une chaĂźne vide quand le dossier est Ă©puisĂ©. La rĂšgle qui vous sauve est de ne jamais rappeler Dir au milieu d'une boucle Dir, car un second Dir lance une nouvelle recherche et rĂ©initialise la premiĂšre — la cause numĂ©ro un des fichiers sautĂ©s et des boucles infinies. DĂ©couvrez comment parcourir chaque .xlsx d'un dossier, pourquoi Dir ne renvoie que le nom et non le chemin, pourquoi il ne sait pas rĂ©curser dans les sous-dossiers, et quand rassembler les noms dans un tableau avant d'agir.

Henry
VBA FileSystemObject dans Excel — CreateObject contre rĂ©fĂ©rence, sous-dossiers, et pourquoi il n'ouvre pas les classeurs

VBA FileSystemObject dans Excel — CreateObject contre rĂ©fĂ©rence, sous-dossiers, et pourquoi il n'ouvre pas les classeurs

Le FileSystemObject transforme le disque en un modĂšle objet — des dossiers et fichiers que vous parcourez avec For Each et dont vous lisez les propriĂ©tĂ©s, au lieu de l'unique curseur cachĂ© de Dir. La dĂ©cision qui vous sauve est CreateObject(Scripting.FileSystemObject) plutĂŽt que Dim fso As New FileSystemObject, car la liaison tardive n'exige aucune rĂ©fĂ©rence et tourne partout, tandis que la version Ă  liaison prĂ©coce Ă©choue Ă  compiler sur tout PC oĂč Microsoft Scripting Runtime n'est pas cochĂ©. DĂ©couvrez quand FSO surpasse Dir, comment rĂ©curser dans les sous-dossiers via sa collection SubFolders, comment lire Size et DateLastModified, et pourquoi FSO ouvre les fichiers texte mais jamais un classeur Excel.

Henry
VBA Check If File Exists — Dir contre FileSystemObject.FileExists, et le piĂšge Ă  l'intĂ©rieur d'une boucle Dir

VBA Check If File Exists — Dir contre FileSystemObject.FileExists, et le piĂšge Ă  l'intĂ©rieur d'une boucle Dir

Il existe deux bonnes façons de tester l'existence d'un fichier en VBA, et un mauvais rĂ©flexe. Ce rĂ©flexe est de l'ouvrir et de piĂ©ger l'erreur, ce qui est lent et masque les vraies dĂ©faillances. Les bonnes rĂ©ponses sont Dir(path) (une ligne intĂ©grĂ©e) et fso.FileExists(path) (sans Ă©tat et plus clair) — et la rĂšgle qui vous sauve est de ne jamais utiliser le test Dir Ă  l'intĂ©rieur d'une boucle Dir, car Dir partage un unique curseur cachĂ© et le test rĂ©initialise en silence votre Ă©numĂ©ration. DĂ©couvrez pourquoi FileExists est le choix par dĂ©faut le plus sĂ»r, comment Dir gĂšre mal un dossier ou une barre oblique inverse finale, et pourquoi vĂ©rifier puis ouvrir exige encore un garde-fou d'erreur.

Henry
VBA Open Workbook dans Excel — Workbooks.Open, capturer la valeur de retour, et pourquoi ce n'est pas Workbook_Open

VBA Open Workbook dans Excel — Workbooks.Open, capturer la valeur de retour, et pourquoi ce n'est pas Workbook_Open

Workbooks.Open est une fonction qui renvoie le classeur qu'elle vient d'ouvrir, donc la seule rĂšgle qui vous sauve est Set wb = Workbooks.Open(path) — capturez cette valeur de retour et parlez Ă  wb, jamais Ă  ActiveWorkbook, qui change Ă  l'instant oĂč quoi que ce soit vole le focus. DĂ©couvrez la diffĂ©rence entre Workbooks.Open (une mĂ©thode que vous appelez) et Workbook_Open (un Ă©vĂ©nement qui s'exĂ©cute automatiquement), comment protĂ©ger un chemin manquant pour obtenir un message plutĂŽt que l'erreur d'exĂ©cution 1004, comment gĂ©rer un fichier dĂ©jĂ  ouvert, et quels paramĂštres ouvrent en silence une boĂźte de dialogue et bloquent une macro sans surveillance.

Henry
VBA Save Workbook dans Excel — Save contre SaveAs, le piùge de FileFormat, et pourquoi vos macros disparaissent

VBA Save Workbook dans Excel — Save contre SaveAs, le piùge de FileFormat, et pourquoi vos macros disparaissent

Save Ă©crase le fichier que vous avez dĂ©jĂ , sur place et sans boĂźte de dialogue. SaveAs Ă©crit un nouveau fichier ou un nouveau type, et le numĂ©ro FileFormat est le piĂšge — enregistrez un classeur Ă  macros en xlOpenXMLWorkbook (51, le format xlsx) et Excel supprime en silence chaque ligne de votre VBA ; il vous faut xlOpenXMLWorkbookMacroEnabled (52) pour le xlsm. DĂ©couvrez quand utiliser Save, SaveAs et SaveCopyAs, pourquoi Save sur un classeur tout neuf fait apparaĂźtre la boĂźte de dialogue Enregistrer sous et bloque une macro sans surveillance, comment DisplayAlerts transforme l'invite d'Ă©crasement en approbation anticipĂ©e, et pourquoi wb.Saved = True marque un classeur comme propre sans rien Ă©crire.

Henry
VBA Close Workbook dans Excel — SaveChanges, l'invite qui bloque votre macro, et fermer sans enregistrer

VBA Close Workbook dans Excel — SaveChanges, l'invite qui bloque votre macro, et fermer sans enregistrer

wb.Close sur un classeur comportant des modifications non enregistrĂ©es fait surgir la boĂźte de dialogue modale « Voulez-vous enregistrer les modifications ? », et dans une macro sans surveillance cette boĂźte attend indĂ©finiment. Vous y rĂ©pondez en code avec l'argument SaveChanges — wb.Close SaveChanges:=False abandonne, SaveChanges:=True enregistre d'abord, et l'omettre dĂ©clenche l'invite. DĂ©couvrez pourquoi fermer sans l'argument est la premiĂšre raison pour laquelle une macro planifiĂ©e ne finit jamais, pourquoi la variable objet est morte Ă  l'instant oĂč vous fermez, en quoi Close diffĂšre d'Application.Quit, et pourquoi fermer le dernier classeur peut laisser un EXCEL.EXE invisible en cours d'exĂ©cution.

Henry
VBA Wait dans Excel — Application.Wait, pourquoi il fige Excel, et quand utiliser Sleep à la place

VBA Wait dans Excel — Application.Wait, pourquoi il fige Excel, et quand utiliser Sleep à la place

Application.Wait est un rĂ©veil, pas un chronomĂštre. Vous lui donnez un moment de l'horloge oĂč se rĂ©veiller, pas un nombre de secondes Ă  dĂ©compter, et c'est pourquoi Application.Wait 5 ne fait presque rien alors que la bonne ligne est Application.Wait Now + TimeValue("0:00:05"). Il ne descend pas sous la seconde entiĂšre et il fige Excel pendant toute l'attente, incapable de repeindre l'Ă©cran, de mettre Ă  jour une barre d'Ă©tat ou de laisser l'utilisateur annuler. DĂ©couvrez le modĂšle du rĂ©veil, l'argument en temps absolu qui piĂšge tout le monde, pourquoi les pauses infĂ©rieures Ă  la seconde exigent Sleep, et pourquoi une pause oĂč Excel doit rester vivant est plutĂŽt une boucle DoEvents.

Henry
VBA Sleep dans Excel — l'appel d'API Windows, le piùge PtrSafe 64 bits, et Wait vs Sleep

VBA Sleep dans Excel — l'appel d'API Windows, le piùge PtrSafe 64 bits, et Wait vs Sleep

Sleep n'est pas un mot-clĂ© VBA. C'est une fonction kernel32 de Windows que vous empruntez avec une instruction Declare pour mettre votre macro en pause pendant un nombre de millisecondes, d'oĂč la prĂ©cision infĂ©rieure Ă  la seconde que Application.Wait ne peut pas offrir. Le piĂšge, c'est la dĂ©claration elle-mĂȘme. Les vieilles lignes Declare Sub Sleep copiĂ©es-collĂ©es provoquent une erreur de compilation sur Excel 64 bits tant que vous n'ajoutez pas l'attribut PtrSafe dans une garde de compilation conditionnelle VBA7. DĂ©couvrez le modĂšle de l'API empruntĂ©e, le correctif 64 bits exact, pourquoi les millisecondes ne sont pas prĂ©cises, et pourquoi Sleep fige quand mĂȘme Excel, si bien qu'une pause rĂ©active passe plutĂŽt par une boucle DoEvents.

Henry
VBA Timer dans Excel — mesurer combien de temps prend votre macro (et pourquoi ce n'est pas un planificateur)

VBA Timer dans Excel — mesurer combien de temps prend votre macro (et pourquoi ce n'est pas un planificateur)

La fonction VBA Timer est un chronomÚtre, pas un minuteur de compte à rebours. Malgré son nom, elle ne déclenche jamais rien aprÚs N secondes et ne met jamais votre code en pause. Elle renvoie simplement le nombre de secondes écoulées depuis minuit, et vous la lisez deux fois pour mesurer combien de temps a pris un bloc de code. C'est donc l'outil qui prouve que ScreenUpdating = False a réellement accéléré votre macro, au lieu de le supposer. Découvrez le modÚle du chronomÚtre, pourquoi ceux qui cherchent un minuteur veulent en général plutÎt Application.OnTime, le bug de passage à minuit qui produit des temps écoulés négatifs, et sa résolution au centiÚme de seconde.

Henry
VBA DoEvents dans Excel — empĂȘcher Excel de passer en Ne rĂ©pond pas (et pourquoi il laisse votre macro s'exĂ©cuter deux fois)

VBA DoEvents dans Excel — empĂȘcher Excel de passer en Ne rĂ©pond pas (et pourquoi il laisse votre macro s'exĂ©cuter deux fois)

DoEvents met votre macro en pause un instant et laisse Excel traiter les clics, les frappes et les redessins accumulĂ©s pendant l'exĂ©cution de votre code, ce qui empĂȘche la fenĂȘtre de virer au gris en Ne rĂ©pond pas et rend possible un bouton d'annulation qui marche. Mais le mĂȘme moment de cession qui garde Excel en vie rend aussi le contrĂŽle Ă  l'utilisateur en plein milieu de la macro, si bien qu'il peut cliquer de nouveau sur le mĂȘme bouton et lancer une deuxiĂšme copie de votre macro Ă  l'intĂ©rieur de la premiĂšre. C'est cette rĂ©entrance, et non la performance, qui est le vrai danger. DĂ©couvrez oĂč placer DoEvents, comment vous prĂ©munir contre la rĂ©entrance avec un drapeau d'exĂ©cution, pourquoi vous devez le limiter en frĂ©quence, et pourquoi ce n'est pas du multithreading.

Henry
VBA StatusBar dans Excel — afficher la progression d'une macro sans UserForm (et le message qui reste bloquĂ© pour toujours)

VBA StatusBar dans Excel — afficher la progression d'une macro sans UserForm (et le message qui reste bloquĂ© pour toujours)

Application.StatusBar vous permet d'Ă©crire votre propre texte dans la barre en bas de la fenĂȘtre Excel, ce qui est la façon la plus lĂ©gĂšre d'afficher la progression d'une macro en cours, sans UserForm et sans scintillement. La ligne que tout le monde oublie, c'est la rĂ©initialisation. Le dernier texte que vous avez Ă©crit y reste Ă©pinglĂ© aprĂšs la fin de la macro, car Excel ne reprend pas la barre tant que vous n'avez pas mis Application.StatusBar Ă  False. Et elle ne se met pas Ă  jour de façon visible Ă  l'intĂ©rieur d'une boucle serrĂ©e Ă  moins qu'Excel n'ait un instant pour repeindre, et c'est lĂ  qu'intervient DoEvents. DĂ©couvrez le motif Ă©crire-puis-rĂ©initialiser, pourquoi False vaut mieux qu'une chaĂźne vide, l'idiome du pourcentage de progression, et quand une vraie barre de progression mĂ©rite le surcroĂźt de travail.

Henry
VBA DisplayAlerts dans Excel — supprimer les invites de confirmation des macros sans surveillance (et pourquoi il valide automatiquement les plus dangereuses)

VBA DisplayAlerts dans Excel — supprimer les invites de confirmation des macros sans surveillance (et pourquoi il valide automatiquement les plus dangereuses)

Application.DisplayAlerts Ă  False dit Ă  Excel de cesser d'afficher ses boĂźtes de dialogue de confirmation et d'avertissement pendant l'exĂ©cution de votre macro, si bien qu'une macro sans surveillance ne se bloque pas en attendant qu'on clique sur OK. Mais il ne fait pas taire l'avertissement, il y rĂ©pond Ă  votre place avec la rĂ©ponse par dĂ©faut d'Excel, et pour des invites comme supprimer cette feuille ou Ă©craser ce fichier, la rĂ©ponse par dĂ©faut est d'y aller. Il se remet Ă  True tout seul Ă  la fin de la macro, si bien que le vrai piĂšge n'est pas de le laisser dĂ©sactivĂ© pour toujours mais de supprimer un avertissement qui vous protĂ©geait. DĂ©couvrez oĂč il aide, la rĂšgle de la fenĂȘtre Ă©troite, pourquoi ce n'est pas la mĂȘme chose que la gestion des erreurs, et comment il s'associe Ă  ScreenUpdating et Calculation.

Henry
VBA ScreenUpdating dans Excel — supprimer le scintillement et accĂ©lĂ©rer les macros (et pourquoi ça ne rĂ©parera pas une macro lente)

VBA ScreenUpdating dans Excel — supprimer le scintillement et accĂ©lĂ©rer les macros (et pourquoi ça ne rĂ©parera pas une macro lente)

Application.ScreenUpdating Ă  False dit Ă  Excel de cesser de repeindre l'Ă©cran pendant l'exĂ©cution de votre macro et de tout redessiner une seule fois Ă  la fin, ce qui supprime le scintillement et apporte un gain de vitesse modĂ©rĂ©. Mais cela n'aide que lorsque votre code Ă©crit, sĂ©lectionne ou fait dĂ©filer — greffez-le sur une macro limitĂ©e par le calcul et vous ne gagnez rien. La rĂšgle qui vous sauve, c'est qu'un plantage peut laisser l'Ă©cran figĂ© et grisĂ©, alors vous le rĂ©tablissez dans un gestionnaire d'erreurs, jamais en comptant sur une rĂ©initialisation automatique. DĂ©couvrez oĂč il aide, oĂč il n'aide pas, le piĂšge du scintillement dĂ» au rĂ©tablissement imbriquĂ©, et le motif CleanExit qui l'associe Ă  Calculation et EnableEvents.

Henry
VBA Calculation dans Excel — passer le calcul en manuel pour la vitesse (et le piùge silencieux de le laisser en manuel)

VBA Calculation dans Excel — passer le calcul en manuel pour la vitesse (et le piùge silencieux de le laisser en manuel)

Application.Calculation Ă  xlCalculationManual dit Ă  Excel de cesser de recalculer aprĂšs chaque Ă©criture et de tout diffĂ©rer en une seule passe, ce qui constitue le vrai gain de vitesse sur les classeurs chargĂ©s de formules. Mais c'est l'interrupteur le plus dangereux de VBA car sa dĂ©faillance est silencieuse — laissez-le en manuel et les formules cessent de se mettre Ă  jour sans aucun indice visuel, si bien que les totaux se figent et personne ne le voit. La rĂšgle qui vous sauve consiste Ă  sauvegarder l'Ă©tat de calcul, Ă  forcer un recalcul avec Application.Calculate quand une Ă©tape ultĂ©rieure a besoin d'un rĂ©sultat, et Ă  rĂ©tablir l'Ă©tat sauvegardĂ© dans un gestionnaire d'erreurs plutĂŽt que de coder Automatic en dur. DĂ©couvrez les piĂšges du mode manuel, l'error 1004 quand aucun classeur n'est ouvert, et le motif CleanExit.

Henry
VBA EnableEvents dans Excel — empĂȘcher votre macro de dĂ©clencher ses propres Ă©vĂ©nements (et pourquoi un plantage les laisse morts)

VBA EnableEvents dans Excel — empĂȘcher votre macro de dĂ©clencher ses propres Ă©vĂ©nements (et pourquoi un plantage les laisse morts)

Application.EnableEvents Ă  False empĂȘche les Ă©critures de votre macro de dĂ©clencher des gestionnaires d'Ă©vĂ©nements comme Worksheet_Change, ce qui brise la boucle infinie oĂč un gestionnaire modifie une cellule et se redĂ©clenche lui-mĂȘme. C'est un interrupteur de justesse, pas de vitesse. La rĂšgle qui vous sauve, c'est qu'EnableEvents est une propriĂ©tĂ© au niveau de l'application qui ne se rĂ©initialise pas d'elle-mĂȘme, si bien qu'un plantage en le laissant Ă  False laisse morts tous les Ă©vĂ©nements de tous les classeurs ouverts jusqu'au redĂ©marrage d'Excel — ce qui explique pourquoi les utilisateurs signalent que leurs boutons ont cessĂ© de fonctionner. DĂ©couvrez le correctif du Worksheet_Change rĂ©cursif, le rĂ©tablissement CleanExit, et pourquoi cet interrupteur compte encore plus que les autres.

Henry
VBA SpecialCells dans Excel — sĂ©lectionner cellules vides, cellules visibles et constantes (et pourquoi il plante quand il ne trouve rien)

VBA SpecialCells dans Excel — sĂ©lectionner cellules vides, cellules visibles et constantes (et pourquoi il plante quand il ne trouve rien)

SpecialCells laisse Excel choisir les cellules pour vous par type plutĂŽt que par adresse — toutes les vides, toutes les lignes visibles, toutes les formules, toutes les constantes. C'est le jumeau en code de la commande Atteindre les cellules. La rĂšgle qui vous sauve, c'est que SpecialCells lĂšve error 1004 quand il ne trouve rien du tout, si bien qu'un appel nu est une bombe Ă  retardement ; la forme mĂ»re associe toujours On Error Resume Next et If Not result Is Nothing. DĂ©couvrez les types de cellules qui comptent, les motifs remplir-les-vides et copier-les-lignes-visibles, et pourquoi le rĂ©sultat est une rĂ©fĂ©rence multi-zones.

Henry
VBA Union dans Excel — combiner des plages non adjacentes en une seule rĂ©fĂ©rence (et pourquoi il ne dĂ©duplique pas)

VBA Union dans Excel — combiner des plages non adjacentes en une seule rĂ©fĂ©rence (et pourquoi il ne dĂ©duplique pas)

Union colle des rectangles Ă©parpillĂ©s en une seule rĂ©fĂ©rence pour que vous puissiez colorer, effacer ou copier plusieurs blocs non adjacents en une opĂ©ration — la version en code du Ctrl-clic sur plusieurs zones. La rĂšgle qui piĂšge tout le monde, c'est qu'Union concatĂšne, il ne dĂ©duplique pas ; les cellules qui se chevauchent sont comptĂ©es deux fois, donc .Count ment et Union est une liste de lot, pas une union d'ensembles. DĂ©couvrez le motif d'accumulation qui Ă©vite l'erreur Union of Nothing, pourquoi c'est une opĂ©ration par rĂ©fĂ©rence au lieu d'une boucle cellule par cellule, et en quoi Union diffĂšre d'Intersect.

Henry
VBA Intersect dans Excel — trouver oĂč deux plages se chevauchent (et la protection Worksheet_Change que tout le monde emploie)

VBA Intersect dans Excel — trouver oĂč deux plages se chevauchent (et la protection Worksheet_Change que tout le monde emploie)

Intersect ne renvoie que les cellules que deux plages partagent, et renvoie Nothing quand elles ne se touchent pas — et ce Nothing est tout l'intĂ©rĂȘt. Son usage numĂ©ro un est la protection de Worksheet_Change, If Not Intersect(Target, Range) Is Nothing, qui empĂȘche un Ă©vĂ©nement de se dĂ©clencher Ă  chaque modification de la feuille. La rĂšgle qui vous sauve, c'est qu'aucun chevauchement renvoie Nothing, si bien que tout accĂšs Ă  une propriĂ©tĂ© sans vĂ©rification Is Nothing plante avec error 91. DĂ©couvrez la protection d'Ă©vĂ©nement complĂšte avec EnableEvents, comment restreindre une macro Ă  une zone cible, et en quoi Intersect diffĂšre d'Union.

Henry
VBA Cells vs Range dans Excel — rĂ©fĂ©rencer des cellules par numĂ©ro (et pourquoi Cells(1, 2) est B1, pas A2)

VBA Cells vs Range dans Excel — rĂ©fĂ©rencer des cellules par numĂ©ro (et pourquoi Cells(1, 2) est B1, pas A2)

Cells, c'est Range adressĂ© par des nombres. Range(A1) dĂ©signe une cellule avec une chaĂźne dans l'ordre de lecture, la lettre de colonne puis la ligne ; Cells(ligne, colonne) dĂ©signe une cellule avec deux entiers dans l'ordre de stockage d'Excel, la ligne d'abord puis la colonne. VoilĂ  pourquoi Cells(1, 2) est B1, pas A2 — et pourquoi Cells, dont on peut calculer les coordonnĂ©es, est la rĂ©fĂ©rence conçue pour les boucles. DĂ©couvrez quand employer Cells plutĂŽt que Range, comment bĂątir un bloc Ă  partir d'angles calculĂ©s avec Range(Cells, Cells), pourquoi un Cells nu dĂ©signe toute la feuille, et pourquoi qualifier Cells d'une feuille de calcul.

Henry
VBA Resize dans Excel — remodeler une plage depuis son ancre (et pourquoi c'est un nombre, pas un delta)

VBA Resize dans Excel — remodeler une plage depuis son ancre (et pourquoi c'est un nombre, pas un delta)

Resize fixe l'ancre en haut Ă  gauche d'une plage et redessine le rectangle Ă  une nouvelle taille. Il ne dĂ©place pas la rĂ©fĂ©rence comme le fait Offset, et il ne sĂ©lectionne rien — il renvoie une nouvelle plage partant du mĂȘme coin. La rĂšgle qui piĂšge tout le monde, c'est que Resize(lignes, colonnes) est un nombre absolu Ă  base 1 de la taille finale, pas un delta Ă  ajouter, si bien que Range(A1).Resize(5, 3) donne A1:C5 et Resize(0) dĂ©clenche l'erreur 1004. DĂ©couvrez comment omettre un argument pour laisser une dimension intacte, pourquoi l'ancre est toujours en haut Ă  gauche, et les deux motifs qui paient — retirer un en-tĂȘte avec Offset plus Resize, et réécrire un tableau dans un bloc qui lui va.

Henry
VBA CurrentRegion dans Excel — saisir tout le bloc de donnĂ©es en une ligne (et ce qu'une ligne vide lui fait)

VBA CurrentRegion dans Excel — saisir tout le bloc de donnĂ©es en une ligne (et ce qu'une ligne vide lui fait)

CurrentRegion est le bloc contigu de cellules autour d'une cellule. Excel part de votre cellule et s'Ă©tend vers l'extĂ©rieur jusqu'Ă  rencontrer une ligne entiĂšrement vide et une colonne entiĂšrement vide, renvoyant le plus petit rectangle qui enferme cet Ăźlot ininterrompu — exactement ce que sĂ©lectionne Ctrl+Maj+astĂ©risque. Vous ne calculez pas les bords ; Excel les trouve. Le piĂšge, c'est qu'une seule ligne ou colonne entiĂšrement vide forme un mur qui scinde le bloc en silence, si bien que vous obtenez la moitiĂ© de vos donnĂ©es sans aucune erreur. DĂ©couvrez pourquoi CurrentRegion inclut l'en-tĂȘte et comment le retirer avec Offset et Resize, en quoi il diffĂšre d'UsedRange et de End(xlUp), et quand utiliser plutĂŽt un vrai tableau.

Henry
VBA Borders dans Excel — tracer des bordures de cellule en code (et pourquoi tout le bloc s'est retrouvĂ© encadrĂ©)

VBA Borders dans Excel — tracer des bordures de cellule en code (et pourquoi tout le bloc s'est retrouvĂ© encadrĂ©)

Une bordure en VBA Excel est une propriĂ©tĂ© d'un bord, pas un interrupteur sur la cellule. Une plage possĂšde huit bordures adressables — quatre bords extĂ©rieurs, deux jeux de quadrillage intĂ©rieur et deux diagonales — et la collection Range.Borders nue les dĂ©signe toutes Ă  la fois. C'est pourquoi Range.Borders.LineStyle = xlContinuous encadre chaque cellule au lieu de tracer un seul contour. DĂ©couvrez quand utiliser BorderAround pour le seul cadre, comment LineStyle, Weight et Color se combinent, comment dĂ©finir un seul bord avec xlEdgeBottom, et comment effacer les bordures avec xlLineStyleNone.

Henry
VBA Merge Cells dans Excel — fusionner et dĂ©fusionner en code (et pourquoi il vaut mieux s'en abstenir)

VBA Merge Cells dans Excel — fusionner et dĂ©fusionner en code (et pourquoi il vaut mieux s'en abstenir)

Fusionner des cellules en VBA Excel n'est pas du formatage — c'est un changement structurel de la grille. Range(A1:C1).Merge fond trois cellules en une seule qui s'Ă©tend sur trois colonnes, et seule la valeur en haut Ă  gauche survit tandis que les autres sont effacĂ©es. C'est pourquoi les cellules fusionnĂ©es cassent silencieusement le tri, les calculs de Range, les insertions de colonnes et les boucles. DĂ©couvrez Merge, UnMerge, MergeCells et MergeArea, pourquoi les pros prĂ©fĂšrent Center Across Selection, et comment repĂ©rer et nettoyer les cellules fusionnĂ©es sans risque en code.

Henry
VBA Column Width & Row Height dans Excel — redimensionner et AutoFit en code (et les unitĂ©s qui vous piĂšgent)

VBA Column Width & Row Height dans Excel — redimensionner et AutoFit en code (et les unitĂ©s qui vous piĂšgent)

Dimensionner des cellules en VBA Excel agit sur la colonne ou la ligne entiĂšre, et les deux dimensions utilisent des unitĂ©s diffĂ©rentes — ColumnWidth se mesure en caractĂšres de la police Normal, RowHeight se mesure en points. Ce dĂ©calage explique pourquoi une largeur de 10 et une hauteur de 10 n'ont rien de comparable. AutoFit est l'autre piĂšge. Il ne s'exĂ©cute que sur une colonne ou une ligne entiĂšre, et il mesure le texte affichĂ©, donc il ignore silencieusement les cellules fusionnĂ©es. DĂ©couvrez ColumnWidth face Ă  la propriĂ©tĂ© Width en lecture seule, RowHeight et le retour Ă  la ligne, EntireColumn.AutoFit, et pourquoi mettre la largeur Ă  zĂ©ro est la mauvaise façon de masquer une colonne.

Henry
VBA Font dans Excel — dĂ©finir la couleur, le gras et la taille en code (et le piĂšge de ColorIndex)

VBA Font dans Excel — dĂ©finir la couleur, le gras et la taille en code (et le piĂšge de ColorIndex)

L'objet Font est la couche texte d'une cellule en VBA Excel — couleur, gras, italique, taille et nom, sans jamais toucher Ă  la valeur en dessous. Le piĂšge, c'est la couleur. Il existe trois façons de la dĂ©finir et elles utilisent des espaces de nombres diffĂ©rents. Range.Font.Color prend un nombre RGB 24 bits, Range.Font.ColorIndex prend un index de palette de 1 Ă  56, et les deux ne sont pas interchangeables. DĂ©couvrez laquelle utiliser, comment mettre en gras ou redimensionner une partie de cellule avec Characters, pourquoi la coloration selon la valeur relĂšve de la Mise en forme conditionnelle, et comment relire une couleur de police sans obtenir le mauvais nombre.

Henry
VBA Cell Color dans Excel — dĂ©finir le remplissage d'arriĂšre-plan en code (et pourquoi la couleur n'est pas une donnĂ©e)

VBA Cell Color dans Excel — dĂ©finir le remplissage d'arriĂšre-plan en code (et pourquoi la couleur n'est pas une donnĂ©e)

Range.Interior est la couche de remplissage d'une cellule en VBA Excel — la peinture derriĂšre le texte. DĂ©finissez-la avec Interior.Color et RGB, effacez-la avec Interior.ColorIndex rĂ©glĂ© sur xlNone, et sachez qu'un remplissage blanc n'est pas la mĂȘme chose qu'une absence de remplissage. Le point plus profond, c'est qu'une cellule colorĂ©e ne porte aucune donnĂ©e. SUM et SUMIF l'ignorent, si bien que colorer pour catĂ©goriser revient Ă  cacher de l'information lĂ  oĂč les formules ne peuvent pas la lire. DĂ©couvrez les propriĂ©tĂ©s de couleur, comment surligner selon une condition sans boucle qui se pĂ©rime, et comment remplir de nombreuses plages rapidement.

Henry
VBA NumberFormat dans Excel — changer l'affichage d'un nombre sans changer sa valeur

VBA NumberFormat dans Excel — changer l'affichage d'un nombre sans changer sa valeur

Range.NumberFormat est la couche d'affichage d'une cellule en VBA Excel. Elle change la façon dont un nombre stockĂ© se lit Ă  l'Ă©cran et ne change jamais le nombre lui-mĂȘme, si bien que formater une cellule pour afficher 5 alors qu'elle contient 5.4999 n'est pas un arrondi et que la somme utilise toujours 5.4999. C'est lĂ  que l'opposition apparence contre valeur mord pour de bon, car une date est en rĂ©alitĂ© un numĂ©ro de sĂ©rie dĂ©guisĂ©. DĂ©couvrez le langage des codes de format, en quoi NumberFormat diffĂšre de la fonction Format, le piĂšge des paramĂštres rĂ©gionaux avec NumberFormatLocal, et quand il vous faut plutĂŽt Round.

Henry
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
VBA Offset dans Excel — se dĂ©placer relativement Ă  une cellule (Offset contre Resize et le piĂšge du dĂ©calage d'une unitĂ©)

VBA Offset dans Excel — se dĂ©placer relativement Ă  une cellule (Offset contre Resize et le piĂšge du dĂ©calage d'une unitĂ©)

Range.Offset renvoie une nouvelle plage dĂ©calĂ©e de (lignes, colonnes) — elle dĂ©place, elle ne redimensionne pas, et Offset(1,0) signifie une ligne vers le bas, pas la ligne 1. DĂ©couvrez le modĂšle mental, l'idiome de saut d'en-tĂȘte Offset(1).Resize(n-1), et en quoi la mĂ©thode VBA diffĂšre de la fonction OFFSET de la feuille de calcul.

Henry
VBA UsedRange contre CurrentRegion dans Excel — saisir tout le bloc de donnĂ©es (et Ă  laquelle se fier)

VBA UsedRange contre CurrentRegion dans Excel — saisir tout le bloc de donnĂ©es (et Ă  laquelle se fier)

UsedRange et CurrentRegion saisissent tous deux « tout le bloc », mais rĂ©pondent Ă  des questions diffĂ©rentes. UsedRange est la boĂźte englobante mise en cache par Excel — elle surestime et ne rĂ©trĂ©cit pas. CurrentRegion est calculĂ©e en direct autour d'une cellule et s'arrĂȘte aux lignes vides. Apprenez Ă  laquelle vous fier, et quand.

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