Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Générer des Feuilles par fournisseur

Raziel abel

XLDnaute Occasionnel
Supporter XLD
Bonjour et bon Dimanche à tous!

Je voulais savoir si vous pouvez arriver au résultat du fichier ci-joint sans passer par le résultat d'un filtre et d'un copier-coller dans une autre feuille.
Je veux filtrer par fournisseur.

Pouvez vous réaliser cela?

En vous remerciant par avance.

Cordialement
 

Pièces jointes

  • CARCO_SEM_ESSAI.xls
    50 KB · Affichages: 65

Staple1600

XLDnaute Barbatruc
Re : Générer des Feuilles par fournisseur

Bonsoir à tous

Raziel Abel
En attendant mieux et parce que fainéantise oblige, voici un code glané sur le net et modifié pour répondre à ton besoin
(test OK sur ton fichier joint)
Avant de lancer la macro SplitData, ne garder que la feuille 1 et supprimer les autres.

NB: Pour trouver d'autres codes, faire par exemple une recherche sur le net avec ces mots clés:
vba excel split worksheet

Code:
Sub SplitData() 'EDITION version modifiée pour copier la ligne d'entête
'code initial d'Alex P. ->-> stackoverflow
    Dim DataMarkers(), Names As Range, name As Range, n As Long, i As Long

    Set Names = Range(Cells(2, "D"), Cells(Rows.Count, "D").End(xlUp))
    n = 0
    DeleteWorksheets

    For Each name In Names
        If name.Offset(1, 0) <> name Then
            ReDim Preserve DataMarkers(n)
            DataMarkers(n) = name.Row
            Worksheets.Add(After:=Worksheets(Worksheets.Count)).name = name
            n = n + 1
        End If
    Next name
'
    For i = 0 To UBound(DataMarkers)
        If i = 0 Then
        Worksheets(1).Range("A1:R1").Copy Destination:=Worksheets(i + 2).Range("A1")
        Worksheets(1).Range("A2:R" & DataMarkers(i)).Copy Destination:=Worksheets(i + 2).Range("A2")
        Else
        Worksheets(1).Range("A1:R1").Copy Destination:=Worksheets(i + 2).Range("A1")
        Worksheets(1).Range("A" & (DataMarkers(i - 1) + 1) & ":R" & DataMarkers(i)).Copy Destination:=Worksheets(i + 2).Range("A2")
        End If
    Next i
End Sub

Code:
Sub DeleteWorksheets()
    Dim ws As Worksheet, activeShtIndex As Long, i As Long

    activeShtIndex = ActiveSheet.Index

    Application.DisplayAlerts = False
    For i = ThisWorkbook.Worksheets.Count To 1 Step -1
        If i <> activeShtIndex Then
            Worksheets(i).Delete
        End If
    Next i
    Application.DisplayAlerts = True
End Sub
 
Dernière édition:

Discussions similaires

Réponses
12
Affichages
332
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…