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

Résolu
Minuraan -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  2. Minuraan
     
    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
  3. Minuraan
     
    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
  4. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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