1. Ignorer l'erreur de formule #N/A

Dans mon message #8 Quel voyage d'Array en Array avec Excel VBA !, vous trouverez la prise en compte de la formule nationale beaucoup plus claire sur deux lignes en tête de module car on a isolé le nom du classeur matrice.xls dans une constante de chemin -- à part -- nommé nameXlsHermes.

Citation Envoyé par facteur Voir le message
un code qui permettrait au programme de continuer même s'il rencontre l'argument erreur #N/A.
Voir dans le message #8, lignes 46 à 56 la partie Else pour appliquer la formule nationale, dont voici l'extrait significatif :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
        If strCity <> vbNullString Then ' La ville en région a été identifiée
            Cells(indRow, colCity) = strCity
        Else ' Applique la formule nationale s'il y a typeNational à partir de C6
            varNational = Cells(indRow, colNational).Value
            If VarType(varNational) = vbError Then ' En cas d'erreur de formule
                varNational = vbNullString ' Absorbe l'erreur "#N/A" sans la corriger
            End If
            If varNational = typeNational Then ' Dans la France entière
                Cells(indRow, colCity).Formula = strFormulaNational
            Else
                Cells(indRow, colCity) = vbNullString
            End If
        End If
Pour avoir un code lisible, il devient obligatoire d'indenter le code avec des TAB au lieu de la solution de facilité qui consiste à aligner chaque instruction sur la marge gauche sans aucune tabulation car on ne voit pas la structure des imbrications.

2. Formule nationale dans la constante strFormulaNational

Citation Envoyé par facteur Voir le message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
ElseIf Range("C" & i) = "national" Then
Cells(i, 2).Formula = "=VLOOKUP(RC[2],'P:\Commun\Transport Securité\Docs Madjid\[matrice.xls]matrice hermes'!R1C1:R800C3,3,0)"

  • Comparer votre ligne générant la formule nationale après le bug du #N/A.
    Cette ligne est beaucoup trop longue à cause du chemin du classeur matrice.xls dans la formule.
  • Comparer avec la même ligne 9 ci-dessus beaucoup plus simple car la formule est fixe même si elle est relative avec son premier paramètre "RC[2]".


La formule peut être définie en constante en tête de module avec un nom significatif comme strFormulaNational préfixé de "str" signifiant String.

3. Supprimer automatiquement les erreurs #N/A générées par une formule

Citation Envoyé par facteur Voir le message
les cellules de la colonne C, contiennent une formule qui renvoie deux type de valeurs :
1) du texte dont "national"
2) l'argument erreur #N/A . Cette erreur est corrigée manuellement lorsque le programme est fini.
Vous trouverez dans le code du message #8, l'utilitaire RemoveErrorNA() qui corrige automatiquement les erreurs #N/A générées par une formule dans un Range.

Etant donné que je n'ai pas de classeur matrice.xls nommé matrice hermes quelque part dans P:, l'application de la formule nationale a généré #N/A en B11 comme indiqué dans le jeu de test fourni. Cela aide beaucoup le lecteur de fournir un jeu de test minimal puis le résultat attendu.

Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE (Visual Basic Editeur) d'Excel, copier-coller et valider par ENTER :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
RemoveErrorNA Range("B:B")
L'erreur de formule #N/A en B11 a été automatique corrigée. La cellule B11 est maintenant vide pour accueillir ultérieurement peut-être une ville de départ d'un prochain voyage.
___________

En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.