Boucle sélectioner ligne avec condition cellule

Bonjour,

J'ai un fichier Excel avec 2 Feuilles : Client et Facture. La première est un répertoire et la seconde un récap des factures enregistrées.

J'aimerais qu'en cliquant sur mon client TRUC, j'ai l'état des factures passées avec ce dernier.

Autrement dit, dans ma feuille Facture, je dois sélectionner toutes les lignes dont la colonne D contient le mot TRUC pour, par exemple, les copier dans une nouvelle feuille.

Pour l'instant j'arrive à sélectionner une facture correspondant à mon client, mais je ne sais pas comment les toutes les sélectionner. Je ne vois pas quelle boucle ou condition utiliser ni comment.

Voici le code que j'ai fait actuellement grâce à mon super niveau VBA :

Sub Selection_des_factures_clients()

Worksheets(2).Activate

If Range("D2").Value Like "TRUC" Then

Range("A2:E2").Activate

End If

End Sub

Je vous joint le fichier en question.

Merci d'avance pour votre aide!

17bdd-test.xlsm (22.08 Ko)

Bonjour,

une petite question : comment voudrez-vous afficher les information trouver ( une par une , ou une fenêtre avec tous ces facture ? et quels sont les information de la facture intéresser(tout les colonne ou juste certaine) )

Bonjour Minanse,

J'aimerais afficher une fenêtre avec toutes les factures, toutes les infos concernant les factures m'intéressent.

Merci

voila une solution à tester (mais pas très optimal) :

Sub test()
Worksheets(1).Activate
Dim r As Range
Dim nom As String
Dim res As String
res = ""

nom = CStr(Selection.Value)
Worksheets("Facture").Activate
For i = 2 To Worksheets("Facture").Range("D" & Rows.Count).End(xlUp).Row
  If Range("D" & i).Value Like nom Then
   ' Range("A" & i & ":E" & i).Select
    res = res & Range("A" & i) & " " & Range("B" & i) & " " & Range("C" & i) & " " & Range("D" & i) & " " & Range("E" & i) & vbLf

' ici tu peut personnaliser l'affichage du message(j'ai utiliser msgBox au lieu de userform par manque de temps)  mais pas  très optimiser 

 End If
Next i
MsgBox (res)

End Sub

à mince c'était ma version de teste , je suis désolé

je te met la bonne version dès que j'ai le temps


à mince c'était ma version de teste , je suis désolé

je te met la bonne version dès que j'ai le temps

voila ce que je vous propose :

à mettre dans le code de la feuille client (clic droit sur la feuille/ visualisé le code ensuite collé )

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Worksheets(1).Activate
  Dim nom As String
  Dim res As String
  res = ""

If ActiveCell.Value = "" Then
  Exit Sub
 End If
nom = ActiveCell.Value

For i = 2 To Worksheets("Facture").Range("D" & Rows.Count).End(xlUp).Row
  If Worksheets("Facture").Range("D" & i).Value = nom Then
   ' Range("A" & i & ":E" & i).Select

    res = res & Worksheets("Facture").Range("A" & i) & " " & Worksheets("Facture").Range("B" & i) & " " & Worksheets("Facture").Range("C" & i) & " " & Worksheets("Facture").Range("D" & i) & " " & Worksheets("Facture").Range("E" & i) & vbLf
  End If
Next i
MsgBox (res)

End Sub

à adapter


reprendre les commentaire du 1er code

Je n'arrive pas à la faire fonctionner, mais merci beaucoup pour votre aide!

Je m'y repencherai demain à tête reposé et je vous dirais si ça fonctionne.

Bonsoir Nairda et minanse,

Juste un essai tout simple en filtrant le nom du client.

Cdt

Henri

Bonjour,

Normalement en VBA le but du jeu est de ne jamais Activer ni Sélecter quoi que ce soit !

Comme il n'y avait pas d'indication sur ce que tu voulais faire avec ta "sélection", j'ai copié les infos sur la Feuille "Cible"

A adapter si c'est pour faire de la copie, sinon expliquer le pb.

Il est supposé que si tu cliques colonne 1 c'est pour lancer la macro...

A+

EDIT] Salut AFEH !

14nairda.xlsm (25.07 Ko)

Bonsoir à tous,

Une autre idée en cliquant sur le nom en colonne A.

Cdt

Henri

Bonjour,

Tout d'abord un grand merci à tous pour vos réponses!

Je débute sur VBA et chacune de vos propositions me sont précieuses pour mon apprentissage.

Au final, c'est la solution d' AFEH qui convient le mieux à mes besoins. J'ai juste supprimé la fin du code pour ne pas faire apparaitre la msgbox et rester sur la feuille Facture avec le tri car j'aurais besoin par la suite d'exploiter ces données.

Il reste cependant un problème que je n'arrive pas à résoudre : Le doubleclick produit un effet dans toute la feuille client alors qu'il ne devrait le faire que dans la colonne A.

Je pense comprendre d'où viens le problème (n'hésitez pas à me corriger).

Dans le code actuel de la feuille Client, le double click n'est sensé rien produire s'il n'est pas effectué dans la colonne A. Cependant, la suite du code appel la macro Filtrage qui s'exécute donc automatiquement à chaque doubleclick, peu importe la case.

Est-ce bien la source du problème?

Y-a-il une solution?

Bien cordialement,

Si j'ai bien compris il faudrait en quelque sorte remplacer le "Is Nothing Then" par un "End Sub Then" mais VBA ne semble pas être d'accord .

En fin de compte j'ai trouvé une solution qui fonctionne. Au lieu d'appeler une seconde macro à la fin de la première, j'ai rentré le code de la seconde directement dans la première.

Je ne pense pas avoir été très clair mais ça marche maintenant, c'est l'essentiel !

Voici la macro :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Range("a:a"), Target) Is Nothing Then

Sheets("Facture").Select

ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=4, Criteria1:= _

[Target], Operator:=xlAnd

End If

Encore merci à tous!

End Sub

Bonjour Nairda,

Bien vu et bien raisonné. Le End If est mal placé.

Remplace le code dans Client par celui-ci

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Range("A:A"), Target) Is Nothing Then
        Range("Z1") = Target
   ' End If
    Call Filtrage
    End If
End Sub

Cdt

Henri

Rechercher des sujets similaires à "boucle selectioner ligne condition"