Créer des feuillets et les renommer a partir d'une liste

hassan.zer

XLDnaute Occasionnel
Re-bonsoir,

Jai réalisé une macro par enregistrement manuel pour créer des feuilles excel dans un classeur et les renommer, mais le hic c'est que lorsque je change la liste, la macro elle ne change pas et du coup, les onglets restent identiques quelque soit la liste, je dois a nouveau me refaire une nouvelle macro pfff et c'est long .... si vous avez une méthode plus simple
 

Pièces jointes

  • renommer automatiquement a l'aide d' une liste.xls
    47.5 KB · Affichages: 220

ROGER2327

XLDnaute Barbatruc
Re : Créer des feuillets et les renommer a partir d'une liste

Bonjour hassan.zer
Je n'ai pas complètement saisi votre problème, mais je vous soumets un classeur qui vous aidera peut-être.​
ROGER2327
#2590
 

Pièces jointes

  • Renommer_les_feuilles_2561.xls
    29 KB · Affichages: 241
  • Renommer_les_feuilles_2561.xls
    29 KB · Affichages: 251
  • Renommer_les_feuilles_2561.xls
    29 KB · Affichages: 245

hassan.zer

XLDnaute Occasionnel
Re : Créer des feuillets et les renommer a partir d'une liste

Bonsoir Roger, je vous renvoie le document, il s'arrete a D, je ne comprends la ligne de code en vba je débute mais quelle est la variable qui définit le nombre de lignes prises en compte ? Merci
 

Pièces jointes

  • Renommer_les_feuilles_2561.xls
    46 KB · Affichages: 121
  • Renommer_les_feuilles_2561.xls
    46 KB · Affichages: 126
  • Renommer_les_feuilles_2561.xls
    46 KB · Affichages: 116

ROGER2327

XLDnaute Barbatruc
Re : Créer des feuillets et les renommer a partir d'une liste

Re...
Voici le code avec des commentaires détaillés. Si ce n'est pas assez clair, demandez plus de détail.
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim oDat, i As Long

3  With [B5] [COLOR="SeaGreen"]'Cellule à partir de laquelle sont placés les noms des feuilles _
      à renommer. Il peut y en avoir autant qu'on veut. Les nouveaux noms à _
      donner aux feuilles sont placés dans la colonne C. _
      Exemple : si en B5 on a "Feuil50" et en C5 on a "Sheet_2327", _
      l'exécution de la procédure renommera "Sheet_2327" la feuille nommée _
      "Feuil50" à deux conditions : _
         1. il existe une feuille nommée "Feuil50" dans le classeur ; _
         2. il n'existe pas de feuille nommée "Sheet_2327" dans le classeur.[/COLOR]

4     If Cells(Rows.Count, .Column).End(xlUp).Cells(1, 1).Row < .Row Then GoTo E
         [COLOR="SeaGreen"]'Si toutes les cellules en-dessous de B4 sont vides, aller à E _
         (c'est-à-dire ne rien faire).[/COLOR]

5     With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
         [COLOR="SeaGreen"]'Ligne "technique" pour accélérer l'exécution.[/COLOR]

6     oDat = Range(.Cells, Cells(Rows.Count, .Column + 1).End(xlUp)).Value
         [COLOR="SeaGreen"]'Place dans le tableau oDat (deux colonnes) les valeurs de B5/C5 à _
         Bn/Cn, où n est le numéro de la dernière ligne non vide de la colonne B.[/COLOR]

7     On Error Resume Next [COLOR="SeaGreen"]'Si une erreur se produit dans une des lignes qui _
         suivent, cette ligne est ignorée, et l'exécution continue à la ligne _
         suivante.[/COLOR]
         
8     For i = 1 To UBound(oDat, 1) [COLOR="SeaGreen"]'Pour i variant de 1 au nombre de lignes _
         du tableau oDat...[/COLOR]

9     ThisWorkbook.Sheets(CStr(oDat(i, 1))).Name = CStr(oDat(i, 2)) [COLOR="SeaGreen"]'...renomme _
            la feuille dont le nom est dans la ligne i de la première colonne de _
            oDat avec le nom qui est dans la ligne i de la deuxième colonne du _
            tableau oDat. Si une valeur est manquante dans le tableau oDat ou si _
            un nom existe déjà dans le classeur, une erreur se produit. Grâce à _
            la ligne 7 cette erreur est ignorée et l'exécution du code continue.[/COLOR]
            
10    Next [COLOR="SeaGreen"]'Reprendre l'exécution à la ligne 9 avec la valeur suivante de i, _
         tant que la dernière ligne du tableau oDat n'est pas atteinte.[/COLOR]

11    On Error GoTo 0 [COLOR="SeaGreen"]'A partir d'ici, les éventuelles erreurs ne sont plus _
         ignorées.[/COLOR]

12    With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
         [COLOR="SeaGreen"]'Ligne "technique" pour rétablir les paramètres modifiés à la ligne 4. _
         Le code fonctionne aussi si les lignes 4 et 12 sont supprimées, mais _
         l'exécution est plus lente.[/COLOR]

E: End With

End Sub[/B][/COLOR]
ROGER2327
#2591
 

ROGER2327

XLDnaute Barbatruc
Re : Créer des feuillets et les renommer a partir d'une liste

Re...
En relisant les messages précédents, je vois que le problème n'est pas de renommer des feuilles existantes, mais plutôt de créer de nouvelles feuilles en leur donnant un nom pris dans la colonne B (cellules B12 et suivantes).
Si c'est bien de cela qu'il s'agit, le code suivant est plus approprié :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Créer_Nommer_Feuilles_Click()
Dim oDat, i As Long

3  With [B12] [COLOR="SeaGreen"]'Cellule à partir de laquelle sont placés les noms des feuilles _
      à créer. Il peut y en avoir autant qu'on veut.[/COLOR]

4     If Cells(Rows.Count, .Column).End(xlUp).Cells(1, 1).Row < .Row Then GoTo E
         [COLOR="SeaGreen"]'Si toutes les cellules en-dessous de B11 sont vides, aller à E _
         (c'est-à-dire ne rien faire).[/COLOR]

5     With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
         [COLOR="SeaGreen"]'Ligne "technique" pour accélérer l'exécution.[/COLOR]

6     oDat = Range(.Cells.Offset(-1, 0), Cells(Rows.Count, .Column).End(xlUp)).Value
         [COLOR="SeaGreen"]'Place dans le tableau oDat (une colonne) les valeurs de B11 à Bn, _
         où n est le numéro de la dernière ligne non vide de la colonne B.[/COLOR]
         
7     For i = 2 To UBound(oDat, 1) [COLOR="SeaGreen"]'Pour i variant de 2 au nombre de lignes _
         du tableau oDat...[/COLOR]
         
8        Sheets.Add After:=Sheets(Sheets.Count) [COLOR="SeaGreen"]'...ajouter une feuille à la _
            fin du claseur.[/COLOR]

9        On Error GoTo S [COLOR="SeaGreen"]'Si une erreur se produit dans la ligne qui _
               suit, elle est ignorée, et l'exécution continue à la ligne _
               suivante après le traitement de l'erreur (ligne S).[/COLOR]

10       Sheets(Sheets.Count).Name = CStr(oDat(i, 1))[COLOR="SeaGreen"] '...renomme _
            la feuille créée avec le nom qui est dans la ligne i de la _
            première colonne du tableau oDat. Si une valeur est manquante _
            dans le tableau oDat ou si ce nom existe déjà dans le classeur, _
            une erreur se produit. Grâce à la ligne 9 cette erreur est _
            ignorée et l'exécution du code continue.[/COLOR]

11       On Error GoTo 0 [COLOR="SeaGreen"]'A partir d'ici, les éventuelles erreurs ne sont plus _
            ignorées.[/COLOR]

12    Next [COLOR="SeaGreen"]'Reprendre l'exécution à la ligne 8 avec la valeur suivante de i, _
         tant que la dernière ligne du tableau oDat n'est pas atteinte.[/COLOR]

13    With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
         [COLOR="SeaGreen"]'Ligne "technique" pour rétablir les paramètres modifiés à la ligne 5. _
         Le code fonctionne aussi si les lignes 5 et 13 sont supprimées, mais _
         l'exécution est plus lente.[/COLOR]

E: End With

Exit Sub

      [COLOR="SeaGreen"]'Suppression de la feuille créée si une erreur survient ligne 10.[/COLOR]
S:    With Application: .DisplayAlerts = False: Sheets(Sheets.Count).Delete: .DisplayAlerts = True: End With
   Resume Next

End Sub[/B][/COLOR]
ROGER2327
#2597
 

Pièces jointes

  • Renommer_les_feuilles_2597.xls
    20 KB · Affichages: 180

hassan.zer

XLDnaute Occasionnel
Re : Créer des feuillets et les renommer a partir d'une liste

Bonjour roger,

Votre ligne de commande fonctionne trés bien, comment puis-je la modifier pour qu'il ne me crée pas des feuilles vierges mais une copie de l'une d'entre elles, voici le document que jutilise

merci
 

Pièces jointes

  • Renommer .zip
    21.1 KB · Affichages: 80

ROGER2327

XLDnaute Barbatruc
Re : Créer des feuillets et les renommer a partir d'une liste

Re...
Voyez dans le classeur joint si ce code vous convient :
Code:
[B][COLOR="DarkSlateGray"]Private Sub Copier_Nommer_Feuilles()
Dim oDat, i As Long

30    With [B12][COLOR="SeaGreen"] 'Cellule à partir de laquelle sont placés les noms des feuilles _
      à créer. Il peut y en avoir autant qu'on veut.[/COLOR]

40    If Cells(Rows.Count, .Column).End(xlUp).Cells(1, 1).Row < .Row Then GoTo E
         [COLOR="SeaGreen"]'Si toutes les cellules en-dessous de B11 sont vides, aller à E _
         (c'est-à-dire ne rien faire).[/COLOR]

50    With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
         [COLOR="SeaGreen"]'Ligne "technique" pour accélérer l'exécution.[/COLOR]

60       oDat = Range(.Cells.Offset(-1, 0), Cells(Rows.Count, .Column).End(xlUp)).Value
            [COLOR="SeaGreen"]'Place dans le tableau oDat (une colonne) les valeurs de B11 à Bn, _
            où n est le numéro de la dernière ligne non vide de la colonne B.[/COLOR]
         
70       For i = 2 To UBound(oDat, 1) [COLOR="SeaGreen"]'Pour i variant de 2 au nombre de lignes _
            du tableau oDat...[/COLOR]

75          On Error GoTo M [COLOR="SeaGreen"]'(Pour sortir de la procédure si la feuille modèle _
               n'existe pas.)[/COLOR]

80          Sheets("Feuille_modèle").Copy After:=Sheets(Sheets.Count) [COLOR="SeaGreen"]'...ajoute une copie _
               de la feuille "Feuille_modèle" à la fin du classeur.[/COLOR]

85          Sheets(Sheets.Count).[G6].Value = CStr(oDat(i, 1)) [COLOR="SeaGreen"]'No comment.[/COLOR]
   
90          On Error GoTo S [COLOR="SeaGreen"]'Si une erreur se produit dans la ligne qui _
               suit, elle est ignorée, et l'exécution continue à la ligne _
               suivante après le traitement de l'erreur (ligne S).[/COLOR]

100         Sheets(Sheets.Count).Name = CStr(oDat(i, 1)) [COLOR="SeaGreen"]'...renomme _
               la feuille créée avec le nom qui est dans la ligne i de la _
               première colonne du tableau oDat. Si une valeur est manquante _
               dans le tableau oDat ou si ce nom existe déjà dans le classeur, _
               une erreur se produit. Grâce à la ligne 90 cette erreur est _
               ignorée et l'exécution du code continue.[/COLOR]

110         On Error GoTo 0 [COLOR="SeaGreen"]'A partir d'ici, les éventuelles erreurs ne sont plus _
               ignorées.[/COLOR]

120        Next [COLOR="SeaGreen"]'Reprendre l'exécution à la ligne 75 avec la valeur suivante de i, _
               tant que la dernière ligne du tableau oDat n'est pas atteinte.[/COLOR]

130      With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
            [COLOR="SeaGreen"]'Ligne "technique" pour rétablir les paramètres modifiés à la ligne 5. _
            Le code fonctionne aussi si les lignes 5 et 14 sont supprimées, mais _
            l'exécution est plus lente.[/COLOR]

E:    End With

Exit Sub

M:    MsgBox "Le nom de la feuille modèle est incorrect.": Resume E

     [COLOR="SeaGreen"] 'Suppression de la feuille créée si une erreur survient ligne 100.[/COLOR]
S:    With Application: .DisplayAlerts = False: Sheets(Sheets.Count).Delete: .DisplayAlerts = True: End With
   Resume Next

End Sub[/COLOR][/B]
ROGER2327
#2606
 

Pièces jointes

  • Renommer_les_feuilles_2606.zip
    18.9 KB · Affichages: 131

kau

XLDnaute Nouveau
Re : Créer des feuillets et les renommer a partir d'une liste

Bonjour,
Super boulot en effet, merci Roger.
Cette macro correspond également à mon projet, cependant j'aurai également souhaité renseigner automatiquement (et si possible avec un lien) certaines cellules des nouvelles feuilles créées par des données situées dans des cellules non-contiguës de ma BDD. Est-ce possible? Faut-il faire une 2ème macro?
Je suis novice en la matière, et malgré plusieurs essais je sèche complètement. :(
Je voudrais en faite renseigner automatiquement, et avec un lien pour les mises à jour, toutes les cellules B4, H6, B13, B26 et B6 de chaque nouvelle feuille créée (j'en ai environ 900 pour l'instant) depuis des données situées sur ma BDD (feuille "Synthèse" de mon projet) dans les colonnes C, D, E, F et K.
Je suis un peu perdu, pouvez-vous m'aider?
Je joins mon fichier au cas ou.

Merci
 

Pièces jointes

  • Modele2.zip
    42.1 KB · Affichages: 96
  • Modele2.zip
    42.1 KB · Affichages: 101
  • Modele2.zip
    42.1 KB · Affichages: 101
Dernière édition:

zeo

XLDnaute Nouveau
Je vous remercie sincèrement de tous vos conseils qui m'ont permis de mettre en place un doc adaptable à l'ensemble de mes classes.

Je me permets de vous demander un petit conseil.

J'aimerai créer une macro me permettant à partir des feuilles créées de remplir un tableau dans la page paramètre à côté de ma liste de noms.

Ma liste est en B12:B54
Mon tableau constitué de trois colonnes est en F12:H54

j'ai essayé de la créer pas à pas mais lorsque les noms de feuilles, donc ma liste de noms, change il y a un problème de références...

Par avance merci...
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35