[VBA Excel] recherche valeur->écrire cellule

Résolu
Xiombarg2911 -  
 xiombarg2911 -
Bonjour,

Dans un cadre professionnel, je dois permettre à des utilisateurs de filtrer un fichier excel en fonction de checkbox cochée ou non.
J'ai donc le Caption des 3 checkbox enregistré dans une variable :

Sub GetClasses()
If TypeName(Ctrl) = "CheckBox" Then
If Ctrl.Value = True Then
strTemp = strTemp & Ctrl.Caption & ";"
End If
End If
End Sub

Ensuite je recherche cette valeur dans mes lignes

nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To nbLignes
If InStr(1, CStr(Range("K" & i)), strTemp) = 1 Then
Range("M" & i) = "X"

Sauf que la, il me met un X dans la colonne M de toutes les lignes, peu importe si cette ligne contient la valeur de strTemp ou pas .....
Moi je veux qu'il cherche la valeur de strTemp dans la colonne K de toutes les lignes, et si il la trouve, il me met un X au bout de la ligne correspondante, dans la Colonne M. Ce X me servira plus tard a faire mon tri.

Ca a pas l'air compliqué dit comme ça, mais je galère !

aidez moi svp :)
Configuration: Windows XP
Firefox 2.0.0.8

4 réponses

  1. Utilisateur anonyme
     
    Bonjour,

    suggestion :

    Sub Essai()
    
        nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
        For i = 1 To nbLignes
        If (InStr(1, CStr(Range("K" & i).Value), strTemp, vbTextCompare) > 0) Then
            Range("M" & i) = "X"
        End If
    
    End Sub
    '
    

    Lupin
    1
    1. xiombarg2911
       
      Merci Lupin mais j'ai toujours le meme problème

      Il me met un X dans toutes les lignes, peu importe la case cochée
      c'est peut être un problème au niveau du compteur, il devrait peut être juste retenir le numéro de la ligne dans la laquelle se trouve la donnée ?

      Très clairement cela dépasse largement mes compétences
      Si toi ou quelqu'un d'autre peu aider :-)

      merci!
      0
  2. amigo
     
    Bonsoir,

    Peut-on avoir un exemple des valeurs que prennent les variables à comparer, c-à-d la variable strTemp et le contenu des cellules de la colonne K, ça aiderait à comprendre pourquoi ça ne marche pas.

    A+.
    0
  3. Utilisateur anonyme
     
    re :

    essai ces autres façons de faire :

    Option Explicit
    
    
    Sub Essai1()
    
        nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
        For i = 1 To nbLignes
        If (InStr(1, Range("K" & i).Value, strTemp, vbTextCompare) > 0) Then
            Range("M" & i) = "X"
        End If
    
    End Sub
    '
    
    Sub Essai2()
    
        nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
        For i = 1 To nbLignes
        If (InStr(1, Range("K" & i).Value, strTemp, vbBinaryCompare) > 0) Then
            Range("M" & i) = "X"
        End If
    
    End Sub
    '
    

    Lupin
    0
  4. Utilisateur anonyme
     
    re:

    voici le code modifié et fonctionnel chez moi !

    Sub Essai1()
    
        Dim nbLignes As Long, strTemp As String, i As Long
    
        strTemp = "b"
    
        nbLignes = Range("A" & Rows.Count).End(xlUp).Row
        For i = 1 To nbLignes
            If (InStr(1, Range("K" & i).Value, strTemp, vbTextCompare) > 0) Then
                Range("M" & i) = "X"
            End If
        Next i
        
    End Sub
    '
    

    Lupin
    -1
    1. xiombarg2911
       
      Bonsoir Lupin,

      Ta dernière proposition est tout à fait fonctionnelle tant que la valeur de strTemp est fixe et parfaitement exacte.

      Sauf que j'enregistre dans strTemp les valeurs des checkbox cochées, en les séparant par des " ; "
      Du coup, avec ta sub il cherche une valeur avec un " ; " et forcément ne trouve pas

      Je pense qu'il faudrait rajouter dans Instr un paramètre qui dirait de regarder entre les " ; " mais je ne vois pas comment oO
      0
      1. xiombarg2911 > xiombarg2911
         
        Oups je viens de tester un truc et *pouf* ça marche .....

        j'ai interverti 2 valeurs dans le Instr

        If (InStr(1, Range("K" & i).Value, strTemp, vbTextCompare) > 0)

        en

        If (InStr(1, strTemp, Range("K" & i).Value, vbTextCompare) > 0)

        Ca marche en faisant juste ça !

        intéressant non ?
        0