[VBA Excel] recherche valeur->écrire cellule

Résolu/Fermé
Xiombarg2911 - 23 avril 2008 à 17:18
 xiombarg2911 - 24 avril 2008 à 20:28
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 :)

4 réponses

Utilisateur anonyme
23 avril 2008 à 18:30
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
xiombarg2911
23 avril 2008 à 21:08
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
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
Utilisateur anonyme
24 avril 2008 à 13:07
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
Utilisateur anonyme
24 avril 2008 à 15:03
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
xiombarg2911
24 avril 2008 à 20:21
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
xiombarg2911 > xiombarg2911
24 avril 2008 à 20:28
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