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
Bonjour
- Préciser ta version Excel dans ton profil
- 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 SubBonjour,
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
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 SubAprè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 ...