Remplacez SI(ESTNA(…) par SI.NON.DISP()

SI.NON.DISPO fait par­tie de la série de fonc­tions SI.

Elle per­met de tester si le pre­mier argue­ment de la fonc­tion retourne une valeur d’er­reur #N/A, et le deux­ième argu­ment ren­voit la valeur si c’est le cas.

Cette fonc­tion est plus rapi­de à écrire que SI(ESTNA()), et je pense, plus rapi­de à exé­cuter.

C’est aus­si l’oc­ca­sion de revoir ces deux posts qui expliquent com­ment ajouter un rac­cour­ci de saisie pour rem­plac­er iiii par :

=SI.NON.DISP(INDEX(Table_des_Résultat;EQUIV(Valeur_Cherchée_en_Colonne;Colonne_de_Recherche;0);EQUIV(Valeur_Cherchée_en_Ligne;Ligne_de_Recherche;0));Valeur_si_erreur)

Pour l’a­jouter direct­meent en VBA (faire un dou­ble clic pour tout sélec­tion­ner):

Application.AutoCorrect.AddReplacement "iiii", "=SI.NON.DISP(INDEX(Table_des_Résultat;EQUIV(Valeur_Cherchée_en_Colonne;Colonne_de_Recherche;0);EQUIV(Valeur_Cherchée_en_Ligne;Ligne_de_Recherche;0));Valeur_si_erreur)"

Vous pou­vez coller le code dans la fenêtre exé­cu­tion (dans VBE, Ctrl+g, coller le code et appuy­er sur entrée) ou bien le met­tre dans une macro. Ensuite, en tapant iiii [espace], vous aurez tout de suite la for­mule. Il ne reste plus qu’à dou­ble-cli­quer sur les dif­férents argu­ments et sélec­tion­ner la zone qui vous intéresse.

En cadeau de bien­v­enue : les 7 com­bi­naisons de touch­es indis­pens­ables sur Excel

Zoom sur la fenêtre exécution en VBA

Affichage

Dans l’édi­teur de VBA (ALT+F11), vous pou­vez affich­er la fenêtre Exé­cu­tion. Ctrl + g fonc­tionne aus­si :

Vous pou­vez faire un dou­ble-clic dans le titre de la fenêtre pour pou­voir la déplac­er rapi­de­ment, ou bien la remet­tre en bas du code.

Aus­si, CTRL+Espace fonc­tionne pour rapi­de­ment taper du code (intel­lisense).

Exemples

Une fois cette fenêtre affichée, il est ensuite pos­si­ble d’exé­cuter le code que vous entr­erez. Cepen­dant, ce code ne doit ni être déclaratif, ni sur plusieurs lignes (pas de Dim, Option Explic­it, If, For…Next).

Par exem­ple, si vous tapez Msg­box “Test”, puis vous appuyez sur Entrée, une boîte de dia­logue va s’af­fich­er.

Voici d’autres exem­ples intéres­sants :

?Activeworkbook.Worksheets.Count Nom­bre de feuilles dans le classeur act­if
?range(“A1”).Formula
?range(“A1”).FormulaLocal
Tra­duc­tion de la for­mule en A1, en Anglais et dans la langue “locale” d’ex­cel.
For Each sh In Worksheets:Debug.Print sh.Name:Next Liste toutes les feuilles du classeur. Le “:” simule un retour à la ligne et per­met d’éviter la lim­i­ta­tion de l’in­ter­dic­tion de plusieurs lignes dans la fenêtre exé­cu­tion.
NomDe­La­Macro avec les vari­ablesExé­cute la macro avec les vari­ables spé­ci­fiées.
Nom­Vari­able = 12Change la valeur d’une vari­able, excel­lent pour rapi­de­ment avancer dans une boucle. Met­tez au préal­able un point d’ar­rêt dans la boucle.
?ActiveWorkbook.Path Chemin du fichi­er
?12+15Comme cal­cu­la­trice
Application.AutoCorrect.AddReplacement “iiii”, “=SI.NON.DISP(INDEX(Table_des_Résultat;EQUIV(Valeur_Cherchée_en_Colonne;Colonne_de_Recherche;0);EQUIV(Valeur_Cherchée_en_Ligne;Ligne_de_Recherche;0));Valeur_si_erreur)”Per­met de rem­plac­er iiii par la for­mule “=SI.NON.DISP(INDEX(Table_des_Résultat;EQUIV(Valeur_Cherchée_en_Colonne;Colonne_de_Recherche;0);EQUIV(Valeur_Cherchée_en_Ligne;Ligne_de_Recherche;0));Valeur_si_erreur)”
Plus d’in­fos ici et ici.

Suivre l’exécution de votre code principal

Durant l’exé­cu­tion du code prin­ci­pal, vous pou­vez aus­si suiv­re les valeurs de cer­taines vari­ables.

Soit directement dans la fenêtre d’exécution

Si vous exé­cutez le code pas à pas, vous pou­vez deman­der la valeur d’une vari­able (en com­plé­ment à l’a­jout d’es­pi­ons)

Soit avec Debug.Print

Par exem­ple, en util­isant Debug.Print “quelque chose”, “quelque chose” va appa­raître dans la fenêtre exé­cu­tion.

Voici un exem­ple qui per­met de créer un log de l’exé­cu­tion de votre code.

 Sub test123()<br />     Dim i As Integer, j As Integer<br />     For i = 1 To 3<br />         Debug.Print "i= " & i<br />         j = i * 10<br />         Debug.Print "j =" & j<br />     Next<br /> End Sub 

D’où le résul­tat une fois le code exé­cuté.

En pra­tique, on utilise ces tech­niques pour débugguer un code, par exem­ple, en lis­tant les dif­férentes valeurs d’une vari­able.

Vider la fenêtre exécution

Vous pou­vez manuelle­ment vous plac­er dans la fenêtre, puis CTRL+A et ensuite Sup­primer.

Il sem­ble que vider cette fenêtre en VBA soit plus dif­fi­cile qu’il n’y parait. Voici un lien qui en par­le : http://dailydoseofexcel.com/archives/2004/06/09/clear-the-immediate-window/

Pour aller plus loin, n’hésitez pas à inve­stir dans mes for­ma­tions sur excel et VBA :

Sources :
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/use-the-immediate-window
https://www.excelcampus.com/vba/vba-immediate-window-excel/



En cadeau de bien­v­enue : les 7 com­bi­naisons de touch­es indis­pens­ables sur Excel

Parcourez rapidement une table

Une des frus­tra­tions lorsque l’on tra­vaille sur une table avec de nom­breuses colonnes, est de pou­voir rapi­de­ment se déplac­er d’une colonne à une autre.

Voici un petit code qui va pren­dre deux min­utes à installer et qui peut vous ren­dre de grands ser­vices.

Vous pou­vez télécharg­er ici le fichi­er.

Voici la procé­dure en vidéo :

Procé­dure détail­l­lée

  • Ouvrez le fichi­er excel (sauve­g­ardé en .xlsm pour avoir les macros)
  • Ajoutez un user­form
  • Ajouter une list­box
  • Dans la fenêtre pro­priété (touche F4), renom­mez l’user­form (ufDe­place­ment) et la list­box (List­Box­Colonnes)
  • Clic droit sur l’user­form pour accéder au code
  • Collez le code ci-dessous :
Option Explicit

Private Sub ListBoxColonnes_Click()
    Application.Goto Cells(ActiveCell.Row, _
        ActiveSheet.ListObjects("Tableau1").HeaderRowRange.Column + _
        Me.ListBoxColonnes.ListIndex), True
End Sub

Private Sub UserForm_Initialize()
Me.ListBoxColonnes.List = _
    Application.WorksheetFunction.Transpose( _
        ActiveSheet.ListObjects("Tableau1").HeaderRowRange)
End Sub
  • Finale­ment, insérez un nou­veau mod­ule et collez le code suiv­ant pour lancer l’user­form
Sub AfficherufDeplacement()
    ufDeplacement.Show
End Sub
En cadeau de bien­v­enue : les 7 com­bi­naisons de touch­es indis­pens­ables sur Excel