Macro Condition Nom d'onglet

magnusyou

XLDnaute Junior
Bonjour à tous :)

J'ai une petite question concernant la mise en place d'une macro sur Excel.

L'idée est d'automatiser la mise en forme d'une base de données pour regrouper dans un onglet "récap" les données de toutes les feuilles du classeur.

Seulement, je souhaite qu'en plus de la copie de Datas de toutes mes feuilles du classeur, je retrouve (dans des colonnes avant mes datas) le nom de l'onglet.

Ex: nom d'onglet : "G_FR_TOT_XXX" alors:

colonne A=G
colonne B=FR
colonne C=TOT
colonne D=XXX
colonne suivantes --> les datas des onglets

Je ne suis pas sur que cela apparaisse très claire, je mets donc le fichier en pj pour vous faire voir de quoi je pars et à que je voudrais arriver.

Comment puis-je conditionner cela à l'aide d'une macro? Est-ce possible selon vous?

Par avance merci de votre aide,


magnusyou,
 

Pièces jointes

  • Macro.xlsx
    37.3 KB · Affichages: 37
  • Macro.xlsx
    37.3 KB · Affichages: 37
  • Macro.xlsx
    37.3 KB · Affichages: 39

camarchepas

XLDnaute Barbatruc
Re : Macro Condition Nom d'onglet

Bonjour ,

Code à mettre dans un module standard :

Code:
Sub Recap()
 Dim Onglet As Worksheet
 Dim LigneVide As Long, LigneFin As Long
 For Each Onglet In ThisWorkbook.Worksheets
  If Onglet.Name <> "Recap" Then
    LigneFin = Onglet.Range("A" & Rows.Count).End(xlUp).Row
    With Sheets("Recap")
     LigneVide = .Range("B" & Rows.Count).End(xlUp).Row + 1
     Onglet.Range("A2:D" & LigneFin).Copy Destination:=.Range("F" & LigneVide)
    .Range("B" & LigneVide) = Split(Onglet.Name, "_")(0)
    .Range("C" & LigneVide) = Split(Onglet.Name, "_")(1)
    .Range("D" & LigneVide) = Split(Onglet.Name, "_")(2)
    .Range("E" & LigneVide) = Split(Onglet.Name, "_")(3)
     LigneFin = .Range("F" & Rows.Count).End(xlUp).Row
    .Range("B" & LigneVide & ":E" & LigneVide).Select
    Selection.AutoFill Destination:=Range("B" & LigneVide & ":E" & LigneFin)
   End With
  End If
 Next
End Sub
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro Condition Nom d'onglet

Bonjour magnusyou, camarchepas,

Même méthode, mais avec un code un peu différent qui fonctionne dans tous les cas de figure :

Code:
Private Sub Worksheet_Activate()
Dim lig&, coldeb%, w As Worksheet, h&, s, ub As Byte, col%
Application.ScreenUpdating = False
lig = 3 '1ère ligne de restitution
coldeb = 2 '1ère colonne
Rows(lig & ":" & Rows.Count).Delete 'RAZ
For Each w In Worksheets
  If w.Name <> Me.Name Then
    With w.[A1].CurrentRegion
      h = .Rows.Count - 1
      If h Then
        .Offset(1).Resize(h).Copy Cells(lig, coldeb + 4)
        s = Split(w.Name, "_")
        ub = UBound(s)
        For col = coldeb To coldeb + IIf(ub > 3, 3, ub)
          Cells(lig, col) = s(col - coldeb)
        Next
        Cells(lig, coldeb).Resize(, 4).Copy Cells(lig, coldeb).Resize(h, 4)
        lig = lig + h
      End If
    End With
  End If
Next
End Sub
La macro se déclenche quand on active la feuille "Recap", voir fichier joint.

A+
 

Pièces jointes

  • Macro(1).xls
    78.5 KB · Affichages: 41
  • Macro(1).xls
    78.5 KB · Affichages: 37
  • Macro(1).xls
    78.5 KB · Affichages: 45
Dernière édition:

magnusyou

XLDnaute Junior
Re : Macro Condition Nom d'onglet

Bonjour à tous,

Merci infiniment pour vos retours dans tous les cas cela fonctionne :) !

@camarchepas: j'ai une petite question, pourquoi lorsque j'intègre la macro dans mon classeur de macro (personal.xlsb) cela ne fonctionne pas et le résultat sur l'onglet récap est : "Feuil1"?

En revanche lorsque j'intègre la macro dans le classeur où je dois lancer l’exécution cela fonctionne..

Avez-vous une explication à cela?

Bien à vous,
 

camarchepas

XLDnaute Barbatruc
Re : Macro Condition Nom d'onglet

Bonjour ,

Bien oui j'ai une explication, j'ai spécifié dans la macro le classeur concerné :

For Each Onglet In ThisWorkbook.Worksheets ' Soit le classeur contenant la macro

Mon avis perso , mais cela n'engage que moi est que les macros dans le classeur Perso , c'est surement bien pour le catalogage, mais pour la portabilité , c'est zéro .

Etant habitué à écrire des appli portables , c'est devenu un réflexe .
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette