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

Copier automatiquement des cellules excel dans d'autres feuilles excel.

DAVID-44-

XLDnaute Occasionnel
Bonjour, j'ai besoin d'aide, car mes connaissances en VBA sont nulles.
J'aimerais savoir s'il est possible de copier automatiquement des cellules d'une feuille excel dans d'autres feuilles excel.
J'ai une feuille principale "commande" sur laquelle je marque les besoins à l'aide d'une liste déroulante semi-automatique et d'une feuille "cadancier". Cela me permet de trouver les fournisseurs de chaque produit très rapidement.
Jusqu'ici, tout va bien.
Maintenant, j'aimerais pouvoir classer automatiquement dans des feuilles nommées par fournisseurs, les produits qui leur correspondent par jour et par ordre alphabétique.
Étant donné que je ne sais pas utiliser Visual Basic pour Application, je me retourne auprès de vos connaissances en espérant que vous pouvez m'aider.

Je vous remercie par avance.

Cordialement.

David.
 
Dernière édition:

bbb38

XLDnaute Accro
Bonjour David, le forum,
Personnellement, sans un petit fichier exemple, comportant seulement quelques lignes, permettant de voir la structure des fichiers, difficile de t’aider.
Cordialement,
Bernard
 

DAVID-44-

XLDnaute Occasionnel
Bonjour, voici un exemple de fichier.

Une feuille "commande" et des feuilles "Pierre", "Paul" etc... sur lesquelles j'aimerais retrouver automatiquement les lignes des cellules de la feuille "commande" par "Fournisseurs", "Produits", "Quantités" etc...
"Maintenant, j'aimerais pouvoir classer automatiquement dans des feuilles nommées par fournisseurs, les produits qui leur correspondent par jour et par ordre alphabétique. "

Je vous remercie par avance.

Cordialement.

David.
 

Pièces jointes

  • EXEMPLE.xlsx
    19.3 KB · Affichages: 10

job75

XLDnaute Barbatruc
Bon voyez le fichier joint et cette macro dans le ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim nom$, tablo, resu(), i&, dat$, n&
nom = UCase(Sh.Name)
With Sheets("COMMANDE")
    If nom = UCase(.Name) Then Exit Sub
    tablo = .UsedRange.Resize(, 5) 'matrice, plus rapide, sur 5 colonnes
End With
ReDim resu(1 To UBound(tablo), 1 To 4)
For i = 1 To UBound(tablo)
    If UCase(Trim(tablo(i, 1))) = "DATE" Then dat = tablo(i, 2)
    If UCase(Trim(tablo(i, 1))) = nom Then
        n = n + 1
        resu(n, 1) = tablo(i, 2) 'produits
        resu(n, 2) = dat
        resu(n, 3) = tablo(i, 4) 'quantités
        resu(n, 4) = tablo(i, 5) 'remarques
    End If
Next
'---restitution---
If Sh.FilterMode Then Sh.ShowAllData 'si la feuille est filtrée
With Sh.[A2] '1ère cellule de restitution, à adapter
    If n Then
        .Resize(n, 4) = resu
        .Resize(n, 4).Sort .Cells, xlAscending, Header:=xlNo 'tri alphabétique sur les produits
        .Resize(n, 4).Borders.Weight = xlThin 'bordures
    End If
    .Offset(n).Resize(Sh.Rows.Count - n - .Row + 1, 4).Delete xlUp 'RAZ en dessous
End With
Sh.Columns.AutoFit 'ajuste les largeurs
With Sh.UsedRange: End With 'actualise la barre de défilement verticale
End Sub
La macro se déclenche quand on active une feuille.
 

Pièces jointes

  • EXEMPLE(1).xlsm
    26.9 KB · Affichages: 9

DAVID-44-

XLDnaute Occasionnel
Bonjour, est-il possible dans les feuilles des noms, classés les dates par jour comme elles le sont "lundi/mardi/mercredi/jeudi/vendredi" et également mettre les produits par ordre alphabétique ?

Cordialement.
David.
 

job75

XLDnaute Barbatruc
Bonjour DAVID-44-,

Voyez ce fichier (3) et la nouvelle macro :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim nom$, tablo, resu(), a, i&, dat$, n&
nom = UCase(Sh.Name)
With Sheets("COMMANDE")
    If nom = UCase(.Name) Then Exit Sub
    tablo = .UsedRange.Resize(, 5) 'matrice, plus rapide, sur 5 colonnes
End With
ReDim resu(1 To UBound(tablo), 1 To 5)
a = Array("LUNDI", "MARDI", "MERCREDI", "JEUDI", "VENDREDI", "SAMEDI", "DIMANCHE") 'liste classée
For i = 1 To UBound(tablo)
    If UCase(Trim(tablo(i, 1))) = "DATE" Then dat = UCase(Trim(tablo(i, 2)))
    If UCase(Trim(tablo(i, 1))) = nom Then
        n = n + 1
        resu(n, 1) = Application.Match(dat, a, 0) 'nombre de 1 à 7
        resu(n, 2) = dat
        resu(n, 3) = tablo(i, 2) 'produits
        resu(n, 4) = tablo(i, 4) 'quantités
        resu(n, 5) = tablo(i, 5) 'remarques
    End If
Next
'---restitution---
If Sh.FilterMode Then Sh.ShowAllData 'si la feuille est filtrée
With Sh.[A2] '1ère cellule de restitution, à adapter
    If n Then
        Application.ScreenUpdating = False
        .EntireColumn.Insert 'insère une colonne A auxiliaire
        With .Cells(1, 0).Resize(n, 5)
            .Value = resu
            .Sort .Cells(1), xlAscending, , .Cells(1, 3), xlAscending, Header:=xlNo 'tri sur les dates/nombres puis sur les produits
            .Borders.Weight = xlThin 'bordures
            .Cells(1).EntireColumn.Delete 'supprime la colonne auxiliaire
        End With
    End If
    .Offset(n).Resize(Sh.Rows.Count - n - .Row + 1, 4).Delete xlUp 'RAZ en dessous
End With
Sh.Columns.AutoFit 'ajuste les largeurs
With Sh.UsedRange: End With 'actualise la barre de défilement verticale
End Sub
A+
 

Pièces jointes

  • EXEMPLE(3).xlsm
    28.3 KB · Affichages: 15
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…