[Excel] Négation du Equiv

Résolu/Fermé
alphonse - 31 janv. 2011 à 10:42
 alphonse - 1 févr. 2011 à 10:03
Bonjour,

Voilà ma formule...
=SI(ESTNA(EQUIV(B2;{"test1";"test2"};0)))
=FAUX;EQUIV(B2;{"test1";"test2"};0);"")

ça marche mais ma formule est trop longue (+1024 car) à cause des conditions : ";{"test1";"test2"};" à réécrire 2 fois... Avez vous une méthode pour remplacer ce #N/A quand la condition est fausse ?
A voir également:

9 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
31 janv. 2011 à 16:57
Bonjour

Excusez l'incruste

vrai si NA
If Sheets(feuille).Cells(ligne, colonne) = CVErr(xlErrNA) Then
vrai si non NA
If Not Sheets(feuille).Cells(ligne, colonne) = CVErr(xlErrNA
) Then

peut-être suffisant
If IsError(Sheets(feuille).Cells(ligne, colonne)) Then
If Not IsError(Sheets(feuille).Cells(ligne, colonne)) Then

1
Bonjour,
As tu essayé =SI(#N/A; Valeur1; Valeur2) ?
(ou "#N/A")
0
Merci youha, mais J'ai des centaines de valeurs dans ma condition, le si ne suffirait pas... L'Equiv est limite... et ne peux donc pas être copié 2 fois. Je pensais a un script VBA...
0
Dim Ligne,Colonne as Integer
Dim Feuille as String
Feuille = ActiveSheet

For Ligne = 1 to ActiveSheet.UsedRange.Rows.Count
    For Colonne = 1 to ActiveSheet.UsedRange.Column.Count
        If Sheets(Feuille).Cells(Ligne,Colonne) = "#NA" then
                Sheets(Feuille).Cells(Ligne,Colonne) = "Ce que tu veux"
        end if
   next colonne
next ligne


Je pense que cela devrait faire l'affaire.
0
Merci Youha mais...

il me dit "Erreur 438 : Propriété ou méthode non gérée par cet objet"

qui renvoie à : Feuille = ActiveSheet
0
Oublie de ma part, c'est ActiveSheet.CodeName
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Il me dit : Objet requis

If Sheets(Feuille).Cells(Ligne, colonne) = "#NA" Then

et quand j'enlève la colonne et que je met 1 :

If Sheets(Feuille).Cells(Ligne,1) = "#NA" then

il me dit : l'indice n'appartient pas a la selection .
0
On va faire autrement.
Dim Ligne,Colonne as Integer
Dim Feuille as String
Feuille = "Le Nom de Ta Feuille"

For Ligne = 1 to ActiveSheet.UsedRange.Rows.Count
    For Colonne = 1 to ActiveSheet.UsedRange.Column.Count
        If Sheets(Feuille).Cells(Ligne,Colonne) = "#NA" then
                Sheets(Feuille).Cells(Ligne,Colonne) = "Ce que tu veux"
        end if
   next colonne
next ligne



0
Merci, mais il me dit toujours "objet requis" :
For Colonne = 1 to ActiveSheet.UsedRange.Column.Count


j'ai Office Excel 2000...
0
Ah ok, Excel 2000 (c'est très loin ça).
Je vais te donner une liste à essayer parce que je n'ai pas Excel 2000 (et j'ai jamais eu l'occasion de travailler dessus).

Essaye avec ça
Sheets("Le Nom de Ta Feuille").Cells.Find("*", , , , xlByColumns, xlPrevious).Column

Ce que fait ActiveSheet.UsedRange.Column.Count, c'est te trouver l'indice de la dernière colonne non nulle. Donc au pire, tu le vires tu ajoutes l'indice de cette colonne.

Sinon je suis en train de me dire un truc tout con. Tu peux pas faire une Recherche (Ctrl + F) et cliquer sur "Remplacer tout" ?
0
ça a l'air de marcher ta méthode... Mais il me met l'erreur "incompatibilité de type... à If Sheets(Feuille).Cells(Ligne, Colonne) = "#NA" Then


mais Même lorsque je fais un truc Bidon du genre j'ai "incompatibilité de type :

If sheets(feuil1).cells(1,1) = 1 then
sheets(feuil1).cells(1,1) = 2
end if

Je dois être vraiment fatigué ^^. Et non je ne peux pas faire "recherche", puisque après je met ça dans un bouton qui fait beaucoup de choses automatiquement.
0
AHHHH Mais oui, Excuses, c'est moi qui suis vraiment fatigué.
Il faut mettre un .Value
C'est donc Sheets(Feuille).Cells(Ligne, Colonne).Value (dans les nouvelles versions, le .value est la valeur par défaut)
0
c'est vrai le value... Donc ça donne ?

ça marche pour la 1ère colonne ^^... Après ça me met : "Objet requis". encore pour For Colonne = 1 To Sheets("Feuil1").Cells.Value.Find("*", , , , xlByColumns, xlPrevious).Column...

Au pire je remplace la colonne par un chiffre c'est pas grave :). Les lignes c'est le plus important. Merci de ton aide !


Private Sub CommandButton1_Click()


Dim Ligne, Colonne As Integer
Dim Feuille As String
Feuille = "Feuil1"

For Ligne = 1 To ActiveSheet.UsedRange.Rows.Count
For Colonne = 1 To Sheets("Feuil1").Cells.Value.Find("*", , , , xlByColumns, xlPrevious).Column


If Sheets(Feuille).Cells(Ligne, Colonne).Value = "#NA" Then
Sheets(Feuille).Cells(Ligne, Colonne).Value = "Ce que tu veux"
End If
Next Colonne
Next Ligne



End Sub
0
J'ai un collègue qui me dit que tu de passer par une variable intermédiaire, cela pourrait fonctionner.
Donc ce serait :
Dim DerniereColonne as Integer
DerniereColonne = For Colonne = 1 To Sheets("Feuil1").Cells.Value.Find("*", , , ,xlByColumns, xlPrevious).Column

(Et puis comme ça tu peux voir la valeur qu'aura DerniereColonne)
0
Après de nombreux tests , il m'aura simplement fallut :

If IsError(Sheets(feuille).Cells(ligne, colonne)) Then
If Not IsError(Sheets(feuille).Cells(ligne, colonne)) Then

Combinée à la boucle...

L'inconvénient du CVErr(xlErrNA) était qu'il me mettait une erreur de type dès qu'il ne lisait pas une erreur.
Et l'inconvénient du If Sheets(Feuille).Cells(Ligne, Colonne).Value = "#N/A"
est qu'il ne me mettait jamais d'erreur quand il y en avait et il me mettait une erreur de type puisqu'il ne lit pas les erreurs.

Merci à vous 2.
0