[Excel] Négation du Equiv

Résolu
alphonse -  
 alphonse -
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 ?

9 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. Youha
     
    Bonjour,
    As tu essayé =SI(#N/A; Valeur1; Valeur2) ?
    (ou "#N/A")
    0
  3. alphonse
     
    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
    1. Youha
       
      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
  4. alphonse
     
    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
    1. Youha
       
      Oublie de ma part, c'est ActiveSheet.CodeName
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. alphonse
     
    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
    1. Youha
       
      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
  7. alphonse
     
    Merci, mais il me dit toujours "objet requis" :
    For Colonne = 1 to ActiveSheet.UsedRange.Column.Count

    j'ai Office Excel 2000...
    0
    1. Youha
       
      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
  8. alphonse
     
    ç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
    1. Youha
       
      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
  9. alphonse
     
    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
    1. Youha
       
      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
  10. alphonse
     
    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