Transférer des données d'une feuille à une autre

  • Initiateur de la discussion Initiateur de la discussion Anne27
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

A

Anne27

Guest
Bonjour,

J'ai une liste d'achat sur une feuille et j'aimerais classer toutes ces données (plus de 1000 lignes) par marque sur d'autres feuilles.
Y a t'il une solution sachant que je suis nulle en VBA ?

Merci d'avance.

Anne
 

Pièces jointes

Re : Transférer des données d'une feuille à une autre

Bonjour Anne27 et bienvenue sur ce forum 😉

Tu as de la chance, je passais par là avant d'aller me coucher

Voici le fichier avec le code suivant
VB:
Sub TriDansFeuille()  ' Définition des variables
  Dim DLig As Long, Lig As Long, ShtD As Worksheet
  Dim sMarque As String
  ' Avec l'objet feuille "Achats"
  With Sheets("Achats")
    ' Trouver la dernière ligne du tableau
    DLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' pour chaque ligne à partir de la 2ème
    For Lig = 2 To DLig
      ' En cas d'erreur on continue la procédure
      On Error Resume Next
      ' Récupérer le nom de la marque
      sMarque = .Range("E" & Lig).Value
      ' Définir la feuille de destination = la marque
      Set ShtD = Sheets(sMarque)
      ' Si une erreur est renvoyée = la feuille n'existe pas => la créer
      If Err.Number <> 0 Then
        ' Empêcher le scintillement de l'écran
        Application.ScreenUpdating = False
        ' Créer la feuille
        Sheets.Add After:=Sheets(Sheets.Count)
        ' La renommer du nom de la marque
        ActiveSheet.Name = sMarque
        ' Définir la feuille de destination
        Set ShtD = Sheets(sMarque)
        ' activer la feuille des achats
        .Activate
        ' Copier la permière ligne
        .Rows(1).Copy Destination:=ShtD.Range("A1")
        ' Activer de nouveau le rafraichissement
        Application.ScreenUpdating = False
      End If
      ' Copier la ligne dans la feuille de destination
      ' sur la dernière ligne remplie + 1
      Rows(Lig).Copy Destination:=ShtD.Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    Next Lig
  End With
End Sub

Pour voir le code dans le fichier, utilises les touches ALT+F11

A+
 

Pièces jointes

Re : Transférer des données d'une feuille à une autre

Bonjour à tous


Une autre procédure :​
VB:
Sub tata()
    Dim i&, l&, nChp&, calcEtat&, lstFl(), dicFl As New Dictionary, tmp As Range, plgChp As Range, aFl As Worksheet, pFl As Worksheet
    With Sheets("Achats")
        With .Range("A1")
            Set plgChp = .Parent.Range(.Cells, .Parent.Cells(.Row, .Parent.Columns.Count).End(xlToLeft))
            For nChp = 1 To plgChp.Count
                If LCase(plgChp(nChp).Value) = "marque" Then Exit For
            Next
        End With
        If nChp <= plgChp.Count Then
            Set tmp = .Range(plgChp(nChp), .Cells(.Rows.Count, plgChp(nChp).Column).End(xlUp))
            For i = 2 To tmp.Count
                If Not dicFl.Exists(CStr(tmp(i).Value)) Then dicFl.Add CStr(tmp(i).Value), 1
            Next
            If dicFl.Count > 0 Then
                lstFl = dicFl.Keys
                Set dicFl = Nothing
                With Application: .ScreenUpdating = 0: calcEtat = .Calculation: .Calculation = -4135: .EnableEvents = 0: End With
                Set pFl = ActiveSheet
                With plgChp.Resize(tmp.Count, plgChp.Count)
                    For i = 0 To UBound(lstFl)
                        On Error Resume Next
                        Set aFl = Sheets(lstFl(i))
                        If Err.Number <> 0 Then
                            Sheets.Add After:=Sheets(Sheets.Count)
                            ActiveSheet.Name = lstFl(i)
                            l = 0
                        Else
                            aFl.Activate
                            l = aFl.Cells(aFl.Rows.Count, 1).End(xlUp).Row + IsEmpty(aFl.[A1])
                        End If
                        .AutoFilter Field:=nChp, Criteria1:=lstFl(i)
                        .Copy Destination:=ActiveSheet.[A1].Offset(l)
                        With ActiveSheet
                            .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp).Offset(0, plgChp.Count - 1)).RemoveDuplicates _
                                Columns:=Array(1, 2, 3, 4, 5), Header:=xlNo
                            .Move After:=Sheets(ThisWorkbook.Sheets.Count)
                        End With
                    Next
                End With
                plgChp.AutoFilter
                pFl.Activate
                With Application: .EnableEvents = 1: .Calculation = calcEtat: .ScreenUpdating = 1: End With
            End If
        End If
    End With
End Sub




ROGER2327
#6098


Samedi 28 Gidouille 139 (Poche du Père Ubu - Vacuation)
24 Messidor An CCXX, 1,3704h - orcanète
2012-W28-4T03:17:21Z
 

Pièces jointes

Re : Transférer des données d'une feuille à une autre

Merci beaucoup Bruno et Roger.
Je n'ai pas eu le temps de tester la deuxième procedure, mais la première à l'air de très bien fonctionner.
Par contre Bruno comment fais-tu pour avoir le gros bouton "Lancer le tri" sur la première feuille ?
Et encore merci à tous les deux.
Anne
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
6
Affichages
321
Retour