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
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
A voir également:
- VBA : Récupérer une liste de données par rapport à un critère
- Mkdir vba ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba dépassement de capacité ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
4 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 711
4 nov. 2017 à 18:58
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.
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.
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
'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
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
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
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 711
5 nov. 2017 à 11:31
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 ?
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 ?