rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[VBA Excel] recherche valeur->écrire cellule

Posté par Xiombarg2911, le mercredi 23 avril 2008 à 17:18:14
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
Répondre à Xiombarg2911  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Lupin.A, le mercredi 23 avril 2008 à 18:30:21
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
Répondre à Lupin.A

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
xiombarg2911, le mercredi 23 avril 2008 à 21:08:12
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!
Répondre à xiombarg2911

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
amigo, le mercredi 23 avril 2008 à 23:49:00
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+.
Répondre à amigo

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Lupin.A, le jeudi 24 avril 2008 à 13:07:28
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
Répondre à Lupin.A

5


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
Lupin.A, le jeudi 24 avril 2008 à 15:03:51
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
Répondre à Lupin.A

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
xiombarg2911, le jeudi 24 avril 2008 à 20:21:31
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
Répondre à xiombarg2911

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 xiombarg2911, le jeudi 24 avril 2008 à 20:28:01
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 ?
Répondre à xiombarg2911
Logiciels pertinents trouvés dans les téléchargements
Télécharger Excel Viewer 2003Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même...Catégorie: Tableur
Licence: Freeware/gratuit
Télécharger Restoration 2.5.14Restoration - Restoration est un outil gratuit, en anglais seulement, permettant de récupérer les données effacées, même après avoir vidé...Catégorie: Sauvegarde
Licence: Freeware/gratuit
Télécharger GANTT Project 2.0.7GANTT Project - GanttProject est un outil de gestion de projet libre, permettant de réaliser des diagrammes de GANTT afin de planifier un...Catégorie: Gestion de projet
Licence: Open Source
Télécharger FastStone Capture 5.9FastStone Capture - Ce logiciel de capture est léger, efficace et simple à utiliser. Vous pouvez capturer l'écran complet, une fenêtre, une...Catégorie: Capture
Licence: Shareware
Plus de logiciels gratuits sur « [VBA Excel] recherche valeur >écrire cellule »