VBA : Récupérer une liste de données par rapport à un critère

Résolu/Fermé
Minuraan - Modifié le 4 nov. 2017 à 19:02
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 5 nov. 2017 à 11:31
Bonjour,

Je souhaiterais avoir de l'aide pour coder une information en vba. J'ai quelques notions suffisantes pour comprendre les structures et bidouiller certaines choses à ma sauce mais pas pour créer des choses moi-même.... et là je suis complètement bloquée

Mon besoin :
Un sheet avec une liste de données (achats, commandes, factures, des dates, des codes commandes etc.)

J'ai ajouter un formulaire de recherche dans un deuxième onglet, en tapant le code d'une commande je voudrais récupérer toutes les informations liées à cette commande. En sachant qu'une commande peut donner lieu à plusieurs facturations donc plusieurs lignes s'affichent.


J'arrive presque à avoir ce que je veux, sauf que dans mon code je spécifie un n° de commande existant. Et je voudrais que ça aille me chercher directement la valeur tapée dans l'outil de recherche.


'Si le contenu de la cellule n'est pas le n° de commande, on passe a la ligne suivante
If Cells(i, 12) <> "Numero_commande" Then GoTo Next_i

'Si le contenu de la cellule est égal au n° de commande, on stocke les infos des colonnes desirees
If Cells(i, 12) = "Numero_commande" Then



Voilà en gros, il faudrait remplacer "Numero_commande" par la fonction qui permettrait de récupérer la valeur taper dans la recherche.

Merci beaucoup pour votre aide !!!

4 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
4 nov. 2017 à 18:58
Bonjour,

Si tu nous donnais le code que tu as réalisé, ce serait plus facile de t'aider à le finaliser de façon qu'il te soit compréhensible.
0
Sub Recherche()

'Declaration des variables
Dim resquestor As Variant
Dim project_code As Variant
Dim project_name As String
Dim PO_number_ref As Variant
Dim reception_date As Date
Dim Invoice_number As Variant
Dim Vendor As String
Dim Invoice_due_date As Date
Dim Invoice_gross_amount As Variant
Dim Invoice_currency As String
Dim Status As String

'On ecrase les anciennes donnees de l'onglet "Recherche"
Range("B14:M5000").Select
Selection.ClearContents
Range("B14").Select

'On definit la ligne ou l'on va commencer a recopier les donnees
ligne_ecriture = 14

'Balayage des lignes du tableau
For i = 3 To 5000

Sheets("AIX DEV").Activate

'Condition de sortie de la boucle For
If Cells(i, 12) = "" Then Exit For

'Si le contenu de la cellule n'est pas le PO Number, on passe a la ligne suivante
If Cells(i, 12) <> "Numero_commande" Then GoTo Next_i

'Si le contenu de la cellule est égal au PO Number, on stocke les infos des colonnes desirees
If Cells(i, 12) = "Numero_commande" Then
resquestor = Cells(i, 1).Value
project_code = Cells(i, 2).Value
project_name = Cells(i, 3).Value
PO_number_ref = Cells(i, 13).Value
reception_date = Cells(i, 21).Value
Invoice_number = Cells(i, 22).Value
Vendor = Cells(i, 23).Value
Invoice_due_date = Cells(i, 25).Value
Invoice_gross_amount = Cells(i, 26).Value
Invoice_currency = Cells(i, 28).Value
Status = Cells(i, 29).Value
End If


'Recopie des infos de la ligne dans l'onglet "Recherche"
Sheets("Recherche").Activate

Cells(ligne_ecriture, 3) = requestor
Cells(ligne_ecriture, 4) = project_code
Cells(ligne_ecriture, 5) = project_name
Cells(ligne_ecriture, 6) = PO_number_ref
Cells(ligne_ecriture, 7) = reception_date
Cells(ligne_ecriture, 8) = Invoice_number
Cells(ligne_ecriture, 9) = Vendor
Cells(ligne_ecriture, 10) = Invoice_due_date
Cells(ligne_ecriture, 11) = Invoice_gross_amount
Cells(ligne_ecriture, 12) = Invoice_currency
Cells(ligne_ecriture, 13) = Status

'On incremente la ligne de recopiage
ligne_ecriture = ligne_ecriture + 1

Next_i:
Next i

Sheets("Recherche").Activate

End Sub
0
Et dans un autre module, celui la
Mais je l'avoue, celui la je le comprends moins bien....


Private Sub CommandButton1_Click()

'Déclaration de variables
Dim DerLig As Long
Dim Cel As Range

'Masquage du raffraichissement de l'écran (gain de temps)
Application.ScreenUpdating = False

'Travail sur la feuille " Feuil1"
With Sheets("AIX DEV")

'Pour chaque cellule de L3 à la dernière cellule remplie en L de la feuille 1
For Each Cel In Range("L3:L" & [L65000].End(xlUp).Row)

'Si la valeur de la cellule est égal au PO Number
If Cel.Value = Cells(4, 5) Then

'calcul de la première ligne vide de la feuille " Feuil2"
DerLig = .[L65000].End(xlUp).Row + 1

'on copie dans la première cellule vide de la feuille " Feuil2" (.Cells(Derlig, 1))
Range(Cells(Cel.Row, 1), Cells(Cel.Row, 29)).Copy
.Cells(DerLig, 1).PasteSpecial Paste:=xlPasteValues
End If
'prochaine cellule
Next Cel
End With
End Sub
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
5 nov. 2017 à 11:31
Bonjour,

J'ai ajouter un formulaire de recherche dans un deuxième onglet, en tapant le code d'une commande
Où saisis-tu le code commande ?
Ce qui me paraitrait judicieux c'est que la saisie du code te ramène les informations dès la validation de saisie : qu'en penses-tu ?
0