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.:confused:
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.:D
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.:oops:
É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:

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.:oops: "

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

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

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 814
dernier inscrit
JLGalley