XL 2013 Incrémenter une feuille issue d'autres feuilles

matteo0701

XLDnaute Junior
Bonjour,
Je souhaite automatisé un "copier/coller" mais j'imagine qu'il faille passer par une macro que je ne maitrise pas.
Je souhaite que les informations contenues dans la colonne G et I de CHAQUE feuille (TOUS et ORLEANS) soit 'copiées" dans la colonne B de la feuille "DI" et que dans la colonne C de cette feuille soit repris le nom de la feuille d'ù vient cette information.
Et ainsi de suite à chaque que je créerais une donnée dans la colonne G des feuilles TOURS et ORLEANS.

sur le fichier joint je pense que ce sera plus clair avec le fichier joint.

Merci par avance
 

Pièces jointes

  • Classeur2.xlsx
    18.1 KB · Affichages: 7

vgendron

XLDnaute Barbatruc
si, on pourrait lancer la macro automatiquement à chaque fois que tu actives la feuille DI

voir exemple ci joint
dans l'évènement "Activate" de la feuille DI, j'appelle la macro "Rassemble"
la meme qui est appelée quand tu cliques sur le bouton
 

Pièces jointes

  • Classeur2.xlsm
    29.9 KB · Affichages: 10

matteo0701

XLDnaute Junior
si, on pourrait lancer la macro automatiquement à chaque fois que tu actives la feuille DI

voir exemple ci joint
dans l'évènement "Activate" de la feuille DI, j'appelle la macro "Rassemble"
la meme qui est appelée quand tu cliques sur le bouton
Merci j'y suis presque mais j'avais juste oubliée de dire que j'allais crée une feuille "Accueil" et donc je ne veux pas que la macro scan cette feuille
 

Pièces jointes

  • Copie de Classeur2.xlsm
    27.9 KB · Affichages: 8

vgendron

XLDnaute Barbatruc
Hello
suffit d'ajuster le code

VB:
Sub rassemble()

Dim tablo() As Variant 'déclaration d'un tableau VBA
With Sheets("DI") ' avec les feuille DI
    .UsedRange.Offset(1, 0).Clear 'on efface tout SAUF la première ligne
End With
For Each ws In Worksheets 'pour chaque feuille du classeur
    If ws.Name <> "DI" And ws.Name <> "ACCUEIL" Then 'si le nom de la feuille testée est différent de DI
        With ws 'avec la feuille testée
            fin = .Range("B" & .Rows.Count).End(xlUp).Row 'on récupère le numéro de la dernière ligne en colonne B
            tablo = .Range("G5:I" & fin).Value 'on met de G5 à I fin dans le tablo
        End With
        For i = LBound(tablo, 1) To UBound(tablo, 1)
            tablo(i, 2) = ws.Name 'on met le nom de la feuille dans la seconde colonne du tableau
        Next i
        With Sheets("DI") 'on colle le tablo dans la feuille DI
            .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
        End With
    End If
Next ws
End Sub
 

matteo0701

XLDnaute Junior
Hello
suffit d'ajuster le code

VB:
Sub rassemble()

Dim tablo() As Variant 'déclaration d'un tableau VBA
With Sheets("DI") ' avec les feuille DI
    .UsedRange.Offset(1, 0).Clear 'on efface tout SAUF la première ligne
End With
For Each ws In Worksheets 'pour chaque feuille du classeur
    If ws.Name <> "DI" And ws.Name <> "ACCUEIL" Then 'si le nom de la feuille testée est différent de DI
        With ws 'avec la feuille testée
            fin = .Range("B" & .Rows.Count).End(xlUp).Row 'on récupère le numéro de la dernière ligne en colonne B
            tablo = .Range("G5:I" & fin).Value 'on met de G5 à I fin dans le tablo
        End With
        For i = LBound(tablo, 1) To UBound(tablo, 1)
            tablo(i, 2) = ws.Name 'on met le nom de la feuille dans la seconde colonne du tableau
        Next i
        With Sheets("DI") 'on colle le tablo dans la feuille DI
            .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
        End With
    End If
Next ws
End Sub

ca marche enfin presque car quand j'ai fait mon projet final je rencontre un bug car la macro reprend la première ligne du tableau

Ce sera ma dernière sollicitation , après je ne vous dérange plus.
 

Pièces jointes

  • anomalie test.xlsm
    33 KB · Affichages: 5

vgendron

XLDnaute Barbatruc
Bonjour
regarde le code et execute le en mode pas à pas (touche F8)

le "problème" vient du fait que ta colonne B n'est pas remplie ==> fin =5 et donc, il prend la première ligne d'entete
si on cherche la dernière ligne sur la colonne F (dans ton exemple, c'est la seule remplie) il aura bien fin=7,et la c'est ok

VB:
Sub rassemble()
Dim tablo() As Variant 'déclaration d'un tableau VBA
With Sheets("DI") ' avec les feuille DI
     .UsedRange.Offset(1, 0).Clear 'on efface tout SAUF la première ligne
End With
For Each ws In Worksheets 'pour chaque feuille du classeur
     If ws.Name <> "DI" And ws.Name <> "Accueil" Then 'si le nom de la feuille testée est différent de DI
         With ws 'avec la feuille testée
             fin = .Range("F" & .Rows.Count).End(xlUp).Row 'on récupère le numéro de la dernière ligne en colonne F
             tablo = .Range("F6:H" & fin).Value 'on met de G5 à H fin dans le tablo
         End With
         For i = LBound(tablo, 1) To UBound(tablo, 1)
             tablo(i, 2) = ws.Name 'on met le nom de la feuille dans la seconde colonne du tableau
         Next i
         With Sheets("DI") 'on colle le tablo dans la feuille DI
             .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
         End With
     End If
Next ws
End Sub
==> il faut donc que la recherche de "fin" se fasse sur une colonne dont tu es certain qu'elle sera TOUJOURS remplie jusqu'en bas
 

Discussions similaires

Statistiques des forums

Discussions
312 145
Messages
2 085 762
Membres
102 966
dernier inscrit
InitialPP