Menu

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

Minuraan - 4 nov. 2017 à 18:54 - Dernière réponse : gbinforme 15097 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention
- 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 !!!
Afficher la suite 

Votre réponse

4 réponses

gbinforme 15097 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - 4 nov. 2017 à 18:58
0
Merci
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.
Commenter la réponse de gbinforme
0
Merci
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
Commenter la réponse de Minuraan
0
Merci
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
Commenter la réponse de Minuraan
gbinforme 15097 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - 5 nov. 2017 à 11:31
0
Merci
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 ?
Commenter la réponse de gbinforme