Gestion de l'erreur #N/A générée par une formule Excel VBA
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
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:
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
Code:
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
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:
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 http://www.developpez.net/forums/ima.../vote1left.gif ci-dessous.