IsNA erreur de compilation
Bonjour le forum
J'ai un problème avec le code suivant
If IsNA(Cells(x, 3)) = True ThenMon Excel me dit "Sub ou Function non définie" en surligant la partie "IsNA", je ne comprends pas pourquoi.
Quelqu'un aurait il la solution ?
Merci.
Bonjour,
Avec :
If WorksheetFunction.IsNA(Cells(x, 3)) = True Then?
Ou :
If WorksheetFunction.IsNA(Cells(x, 3)) ThenBonjour,
Ou bien :
If Cells(x, 3) = CVErr(xlErrNA) ThenCordialement.
Merci beaucoup pour vos réponses Oyobrans et MFerrand,
Oyobrans, les deux bouts de code fonctionnent parfaitement
MFerrand, je n'ai pas su faire fonctionner ton code,
Cordialement.
Comment fais-tu pour ne pas y arriver ?
Comme ceci
lastrow = [B65000].End(xlUp).Row
For i = 1 To lastrow
Sheets("TEST").Select
If Cells(i, 3) = CVErr(xlErrNA) Then
recherche = Cells(i, 2).Value
Sheets("Ann").Select
[E65000].End(xlUp).Offset(1, 0).Select
ActiveCell.Formula = recherche
Else
End If
NextOh que je n'aime pas ces Select à tour de bras !
A part ça, si la cellule (i, 3) contient la valeur d'erreur NA, la condition sera vraie. Là la question est que contient (i, 2). Tu insères son contenu en tant que formule avec la propriété Formula, ce qui suppose que la valeur (je dis bien valeur !) de (i, 2) est un texte commençant par = et qui s'il contient des références de cellules, celles-ci doivent être de style A1, et s'il contient des noms de fonctions, ceux-ci doivent être en anglais....
Cordialement.
1. Oui c'est bien ce que je me disais concernant NA, le problème étant que précédemment dans la macro j'ai du faire :
For Each cellule In MaPlage
If cellule.HasFormula Then
cellule.Formula = cellule.Value
End If
Next celluleJe pense que c'est pour cela que ça ne fonctionne pas
2. En (i, 2), j'ai une chaine de caractères qui était une Formule et convertie en Value (code précédent englobe les deux colonnes)
3. En ce qui concerne les Select, si tu peux m'aider je t'en remercie car j'ai essayé maintes fois de changer tous mes select du style :
Sheets("TEST").Select
lastrow = [B65000].End(xlUp).Row
For i = 1 To lastrow
Sheets("TEST").Select
If WorksheetFunction.IsNA(Cells(i, 3)) = True Then
recherche = Cells(i, 2).Value
Sheets("Ann").Select
[E65000].End(xlUp).Offset(1, 0).Select
ActiveCell.Formula = recherche
Else
End If
NextPar :
lastrow = Sheets("TEST").Range("B65000").End(xlUp).Row
For i = 1 To lastrow
If Sheets("TEST").Function.IsNA(Cells(i, 3)) = True Then
recherche = Cells(i, 2).Value
Sheets("Ann").Range("E65000").End(xlUp).Offset(1, 0) = recherche
Else
End If
Nextje ne comprends pas encore toute la logique du VBA et je t'avoue que sans select je suis paumé, la seule chose que j'ai réussi à faire est
Sheets("Ann").Range("E1:E1") = "inconnu"Non, ta transformation des formules en valeurs, ne modifie pas le caractère de de valeur d'erreur, et le test fonctionne pareil, j'ai vérifié.
Pour les Select, tu vois bien que tu y arrives !
With Sheets("TEST")
lastrow = .Range("B65000").End(xlUp).Row
For i = 1 To lastrow
If WorksheetFunction.IsNA(Cells(i, 3)) Then
recherche = .Cells(i, 2).Value
Sheets("Ann").Range("E65000").End(xlUp).Offset(1, 0) = recherche
Else
'...
End If
Next
End WithTon dernier code, presque pas retouché, j'ai juste mis la feuille Test sous bloc With, sa répétition disparaît dans le bout de code, toute expression commençant par un point réfère directement à la feuille. Je n'ai eu qu'à ajouter un point devant .Cells(i, 2).
(Et rétablir WorksheetFunction que tu avais écorché, coquille lors de la copie je pense...)
J'ai supprimé le = True, juste pour t'indiquer que le = True ou = False est à peu près toujours inutile, l'expression renvoie une valeur booléenne et If... Then attend simplement True pour exécuter le code qui suit ou False pour le sauter, pas besoin de lui demander d'évaluer si True = True ou False = True...
Pour revenir au point de départ, la fonction de feuille de calcul ESTNA est tout à fait utilisable. Je n'étais intervenu que pour indiquer qu'une fonction VBA existait pour renvoyer les valeurs d'erreurs de feuille de calcul : CVErr(xlErrNA) renvoie la valeur d'erreur #N/A et pouvait également être utilisée...
Cordialement.
Bonjour MFerrand et merci beaucoup pour le temps que tu consacres à faire progresser chacun sur le forum,
Pour les select, c'est super je viens de tester dans mon fichier et je n'ai aucun problème pour m'en séparer sauf dans un cas :
If WorksheetFunction.IsNA(Cells(i, 3)) ThenSi la feuille active n'est pas la feuille "TEST" cela ne fonctionne pas, sais-tu comment je pourrais utiliser cette fonction sans utiliser de select tout en allant chercher les cellules (i, 3) de la feuille "TEST"
J'ai supprimé le = True, juste pour t'indiquer que le = True ou = False est à peu près toujours inutile, l'expression renvoie une valeur booléenne et If... Then attend simplement True pour exécuter le code qui suit ou False pour le sauter, pas besoin de lui demander d'évaluer si True = True ou False = True...
Hahaha, en effet, maintenant que tu m'explique la logique je me rends compte que ce True est totalement absurde
[EDIT] Il y avait une petite erreur dans ton code au niveau de WorkSheetFunction, il manquait le "point" (.Cells(i,3)) Then
Mais temps mieux, grâce à cette erreur, j'ai compris l'utilité du With que je n'avais pas compris précédemment.
Cela me donne donc :
With Sheets("TEST")
lastrow = .Range("B65000").End(xlUp).Row
For i = 1 To lastrow
If WorksheetFunction.IsNA(.Cells(i, 3)) Then
recherche = .Cells(i, 2).Value
Sheets("Ann").Range("E65000").End(xlUp).Offset(1, 0) = recherche
Else
End If
Next
End WithBonjour,
et bravo ! J'avais zappé le point devant .Cells(i, 3), tu l'as rétabli...
Bonne journée.