Macro report données auto sur autres feuilles

Bonjour,

Je souhaite réaliser un macro pour l’opération suivante :

En feuille 1, j’ai la liste de mes commandes avec les infos suivantes :

Fournisseurs (via une liste déroulante)

N° Commande

Date commande

Montant

Sur cette feuille 1, on retrouve toutes les commandes de tous mes fournisseurs

Je voudrais reporter automatiquement, sur la feuille fournisseur 1 , dès que je sélectionne le fournisseur dans ma feuille 1 via la liste déroulante, le N°, la date et le montant de la commande, sur la 1ière rangée vide

Idem pour chaque fournisseur.

Aujourd'hui je le fais manuellement mais c’est assez fastidieux à faire.

Je vous joint un petit fichier exemple pour la compréhension.

Merci pour votre aide

Getget17000

15xls-pr-forum.xlsx (12.06 Ko)

Bonjour

  1. Préciser ta version Excel dans ton profil
  2. ce que tu indiques semble supposer que le liste des commandes ne garde pas l'historique : préciser davantage le processus

Quand une commande arrive, je la rentre manuellement dans ma feuille 1

C'est lors de la sélection du fournisseur que je souhaite le report des données sur la fiche du fournisseur en question

Bonjour,

Si les données doivent être reportées immédiatement, pourquoi faire une liste déroulante sur la feuille 1?

Pourquoi ne pas garder Feuille 1 comme base de données, et faire une macro pour trier et exporter les lignes par fournisseur?

J'ai une macro qui fonctionne pour ça, vois si tu peux t'en inspirer (lien en-dessous pour voir ce que ça fait)

(J'ai enlevé la partie sur l’ajout automatique de ligne vide)

Traduis shtGen par Feuille 1; shtTotal par Feuille où tu veux exporter

Traduis cDis et cType par Critère 1 et Critère 2

lr = LastRow = Trouve automatiquement la dernière ligne du tableau de feuille 1

Option Explicit

Sub CustomExport()
  Dim shtGen As Worksheet, shtTotal As Worksheet
  Dim cDir, cType
  Dim lr As Long
  Dim lrt As Long
  Dim r As Range

  Set shtGen = ActiveWorkbook.Worksheets("Tab_Général")
  Set shtTotal = ActiveWorkbook.Worksheets("RECAP_TOTAL")

' shtGen show all
  shtGen.ListObjects("Tableau12").Range.AutoFilter Field:=3
  shtGen.ListObjects("Tableau12").Range.AutoFilter Field:=14
  shtGen.ListObjects("Tableau12").Sort.SortFields.Clear
  shtGen.ListObjects("Tableau12").Sort.SortFields.Add Key:=Range("Tableau12[[#All],[Date création]]"), SortOn:= _
  xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

' Clear former export
  If shtGen.AutoFilterMode Then shtGen.AutoFilterMode = False
  lr = shtGen.Range("C" & Rows.Count).End(3).Row
  shtTotal.Range("A16:P" & Rows.Count).ClearContents
  shtTotal.Range("A16:P" & Rows.Count).ClearFormats
  cDir = shtTotal.Range("B6").Value
  cType = shtTotal.Range("B7").Value

  With shtGen.Range("A15:P" & lr)
    If cDir <> "" Then .AutoFilter 3, cDir Else .AutoFilter 3, "*"
    If cType <> "" Then .AutoFilter 14, cType Else .AutoFilter 14, "*"
  End With

  If shtGen.Range("C" & Rows.Count).End(3).Row > 16 Then
    shtGen.AutoFilter.Range.Offset(1).Copy shtTotal.Range("A16")
    If shtGen.AutoFilterMode Then shtGen.AutoFilterMode = False
  Else
  End If

' shtGen show all + chronological order
  shtGen.ListObjects("Tableau12").Range.AutoFilter Field:=3
  shtGen.ListObjects("Tableau12").Range.AutoFilter Field:=14
  shtGen.ListObjects("Tableau12").Sort.SortFields.Clear
  shtGen.ListObjects("Tableau12").Sort.SortFields.Add Key:=Range("Tableau12[[#All],[Date création]]"), SortOn:= _
  xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

  With shtGen.ListObjects("Tableau12").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
  End With

' Msg if no result
lrt = shtTotal.Range("A" & Rows.Count - 1).End(xlUp).Row
    With shtTotal.Range("A16:P" & lrt)
        If Application.WorksheetFunction.Sum(shtTotal.Range("A16:P" & lrt)) = 0 Then
            MsgBox "Aucun résultat trouvé"
        Else
        End If
    End With

End Sub

https://forum.excel-pratique.com/excel/filtre-selon-criteres-export-ajout-lignes-et-deplacement-de-c...

Bonjour,

Parce que j'ai une multitude de fournisseurs et que la feuille 1 évolue sans cesse.

Bonjour,

Moi j'ai ça à proposer. Tu as juste à double clicker sur les fournisseurs, cela te crée l'onglet si ce n'est pas déja fait et sinon ça le met à jours. Via power query et vba

Cdt

14tcd-like.xlsm (38.05 Ko)

La précédente macro permet d'afficher une liste de commandes fournisseurs en fonction de tes critères sur une seule feuille.

Si tu veux une formule pour trier et exporter les transactions de chaque fournisseur sur une feuille rien qu'à eux, tente d'appliquer ça:

Option Explicit

Sub ExportFilteredData()

    Dim Feuille1 As Worksheet
    Dim arrFournisseurs As Variant, sF As Variant, shtFournisseur As Worksheet
    Dim LastRow As Long
    Dim LastColumn As Long
    Dim StartCell As Range

' Ici tu peux faire un array dynamique qui s'adapte à l'ajout de nouveaux fournisseurs:
    arrFournisseurs = Array(LA LISTE DE TES FOURNISSEURS)

    Set Feuille1 = ActiveWorkbook.Worksheets("Feuille1")
    LastRow = Feuille1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Set StartCell = Feuille1.Range(PREMIERE CELLULE EN HAUT A GAUCHE DE TON TABLEAU)
    Feuille1.Range("PREMIERE CELLULE:DERNIERE COLONNE" & LastRow).AutoFilter

    Feuille1.ListObjects("ma_table_fournisseurs").Sort. _
        SortFields.Clear
    Feuille1.ListObjects("ma_table_fournisseurs").Sort. _
        SortFields.Add Key:=Range("TA_TABLE[[#All],[Date création]]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Feuille1.ListObjects("ma_table_fournisseurs").Sort
           .Header = xlYes
           .MatchCase = False
           .Orientation = xlTopToBottom
           .SortMethod = xlPinYin
           .Apply
    End With
    '
    For Each sF In arrFournisseur
        Set shtFournisseur = Worksheets(sF)
        shtFournisseur.Range("PREMIERE CELLULE:DERNIERE COLONNE" & LastRow).Delete
        Feuille1.Range("PREMIERE CELLULE:DERNIERE COLONNE" & LastRow).AutoFilter Field:=3, Criteria1:=sCat
        Feuille1.Range("PREMIERE CELLULE:DERNIERE COLONNE" & LastRow).Copy
        shtFournisseur.Range("PREMIERE CELLULE OU TU VEUX COLLER LES DONNEES DANS CHAQUE FEUILLE").PasteSpecial Paste:=xlPasteAll
    Next sF

    Application.CutCopyMode = False
    Feuille1.ShowAllData
    Feuille1.AutoFilterMode = False

End Sub

Après je précise quand même que cette deuxième macro implique que tu crées (manuellement ou en rajoutant du code) une feuille excel pour chaque fournisseur.

Personnellement j'ai fait cette macro car mon array contient seulement 5 valeurs, si tu as 150 fournisseurs, tu vas vite t'y perdre.

Tiens-moi au courant.

J'ai fais une macro pour créer une fiche fournisseur.

Le nombre de fournisseur ne devrais pas dépasser les 10 à 15...

Après je débute, donc je fais comme je peux, mais j'arrive à avancer pti à pti ...

Rechercher des sujets similaires à "macro report donnees auto feuilles"