VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

xorre

XLDnaute Junior
Bonjour,

étant tout nouvel utilisateur de VBA, je m'en réfère à vous pour un néophyte comme moi.
Je dois dans le cadre d'une macro réaliser une vérification du nom d'un onglet et si celui ci n'est pas nommé comme il faut, procéder à la modification par un nouveau nom fixe.

Sauriez vous m'aiguiller sur les différentes fonctions à utiliser sachant que je viens de commencer le VBA il y a de cela 10 minutes c'est assez frustrant vu tout ce qu'il y a ^^'
j'ai quelques notions de batch qui m'aident néanmoins à comprendre :)

merci d'avance à la communauté
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

Bonjour xorre et bienvenu :)

Un classeur avec un exemple. Il existe d'autres manières de le faire si cela ne te convient pas.

Le code est dans chaque module de code de chaque feuille sauf pour la première et la dernière feuille qui conservent le nom donné par l'utilisateur.

Feuil2, Feuil4, Feuil6 changent de nom chaque fois qu'elles sont activées et leur nom est inscrit en dur dans le code.

Feuil3, Feuil5 changent de nom chaque fois qu'elles sont activées et leur nom est le contenu de leur cellule A1.

Feuil1, Feuil7 ne changent pas de nom.

Tu peux changer le nom d'une feuille (ou bien changet le texte en A1), en sélectionner une autre puis revenir sur la première pour voir le changement de nom.


Exemple de code pour Feuil2:
Code:
Private Sub Worksheet_Activate()
  ActiveSheet.Name = "Nom22"
End Sub


Exemple de code pour Feuil3:
Code:
Private Sub Worksheet_Activate()
  ActiveSheet.Name = Range("A1")
End Sub
 

Pièces jointes

  • Renommer Feuille v1.xlsm
    28.4 KB · Affichages: 91
Dernière édition:

xorre

XLDnaute Junior
Re : VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

Merci pour ta disponibilité.
Je ne peux hélas pas mettre à disposition un fichier sur lequel je bosse mais imaginons :

feuil1 est renommée par un tiers : "index"
feuil2 est renommée par un tiers : "test"
feuil3 est renommée par un tiers : "3.comptabilité du jour"

Je veux faire en sorte de renommer le nom 3.comptabilité du jour comme je le souhaite afin de standardiser l'ensemble de mes fichiers qui sont tous identiques.

exemple je veux scruter dans mon .xlsx le dossier (les feuillets qui étaient feuil1 feuil2 feuil3 à la base.... ) le feuillet qui commence par 3. puis le renommer en "3.ce que je veux".
Donc parcourir l'ensemble des worksheets jusqu'a tomber sur le "3.comptatilibité du jour", tester si celui ci est écrit 3.comptabilité1 puis le renommer s'il ne se nomme pas déjà 3.comptabilité1 :)
J'espère que l'exemple est assez "démonstratif"

Je pense que tes fonctions que tu me présentes vont me servir en tous les cas dans ce que je souhaite faire! merci de ton aide déjà apportée et qui sait, future :D

Pour ma culture personnelle, d'où vient cette différence selon les feuillets.
 
Dernière édition:

Jam

XLDnaute Accro
Re : VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

Salut xorre, mapomme,

Pour parcourir les différents onglets il faut faire une boucle du type:
VB:
Sub Test
Dim wks as Worksheet

For Each wks in ThisWorkbook.Worksheets
    If left$(wks.Name,5)="feuil" Then
          "...mon traitement"
    End If
Next
End Sub

Bon courage,
 

xorre

XLDnaute Junior
Re : VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

Ok ca marche niquel et je comprends parfaitement le code encore merci :)

Pour aller un peu plus loin puisque je dois procéder au traitement sur plus de 1000 fichiers, j'aimerais faire en sorte de chercher tous les fichier excel qui ont un paramétrable 3. pour procéder aux modification de cet onglet :)

pour le moment ca donne donc :
Code:
Sub changement_feuillet()

Dim ws As Worksheet

For Each ws In Worksheets
    If Left$(ws.Name, 2) = "3." Then
          ws.Name = "3. Valeurs "
    End If

Next ws
End Sub

ou bien pour être plus précis. scruter l'ensemble des fichiers d'un dossier unique (l'ensemble des excels sont au même endroit) histoire de simplifier la macro ^^. Je me débrouillera après pour checker les dossiers.
En attendant je cherche sur le forum quelque chose d'identique :)
 
Dernière édition:

xorre

XLDnaute Junior
Re : VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

merci ca me met sur la piste mais il y a beaucoup de chose inutiles pour moi et j'ai au final beaucoup de mal à faire fonctionner le tout :S

Code:
Sub changement_feuillet()

Dim ws                  As Worksheet

Dim oFiles              As Object
Dim Chemin              As Object
Dim wkbSource           As Workbook

'chemin à modifier
Chemin = "C:\Documents and Settings\I271823\Bureau\Jean Christophe\tests"


'On parcourt les fichiers du répertoire /!\ pas de vérification s'il y a des fichiers dans le dosssier
For Each oFiles In Chemin
    If Right$(oFile.Name, 5) = ".xlsx" Then
    'Workbooks.Open Range("sPath") '& "\" & oFile.Name, 0 ' sans mettre à jours les liens externes
    Set wkbSource = ActiveWorkbook
    
 'on parcourt les onglets fichiers
         For Each ws In wkbSource.Worksheets
            If Left$(ws.Name, 2) = "3." Then
                ws.Name = "3. Valeurs "
            End If
         Next ws
    
    End If
    
Next

End Sub

J'essaye j'essaye ....
 
Dernière édition:

Jam

XLDnaute Accro
Re : VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

xorre,

Bon j'va t'aider puisque tu m'as l'air un peu perdu :rolleyes:

VB:
Option Explicit


'Déclaration du chemin
Const sPath As String = "C:\Documents and Settings\I271823\Bureau\Jean Christophe\tests"


'========================
'= Procédure principale =
'========================
Sub Main()
    '# Déclaration des variables de la procédure
    Dim oFso            As Object
    Dim oFile           As Object
    Dim wkbSource   As Workbook
    Dim oDirectory      As Object
    Dim wks             As Worksheet
    Dim i               As Long   'Compteur pour décalage des lignes
    
    '# Création des objets de scripting
    Set oFso = CreateObject("Scripting.FileSystemObject")
    Set oDirectory = oFso.getfolder(sPath)
    
'# On active la gestion d'erreur

    On Error GoTo GestionErreur
    
    '# On vérifie qu'il y a bien des fichiers dans le répertoire
    If Not (oDirectory.Files.Count > 0) Then
        MsgBox "Le répertoire sélectionné ne contient aucun fichier !", vbCritical + vbOKOnly, "Erreur répertoire"
        Exit Sub
    End If
    
    '# Désactivation de certains paramètres pour accélerer le traitement
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
    End With
    
    '# On parcours tous les fichiers du répertoire
    For Each oFile In oDirectory.Files
        '# Si le fichier est un fichier Excel on l'ouvre. Pas de vérification de l'objet du fichier par défaut
        If Right$(oFile.Name, 4) = ".xls" Or Right$(oFile.Name, 5) = ".xlsx" Then
            Workbooks.Open sPath & "\" & oFile.Name, 0 '<- 0: ne pas mettre à jour les liens externes.
            Set wkbSource = ActiveWorkbook
            '# On parcours les onglets du fichier.
            For Each wks In wkbSource.Worksheets
                
                '# Si le nom fait 3 caractère alors il s'agit d'un site
                If Left$(wks.Name, 2) = "3." Then wks.Name = "3. Valeurs"
                
            Next
            
        End If
        
        '# On ferme le fichier après récupération
        wkbSource.Close SaveChanges:=False
    Next
    
    MsgBox "Les onglets des fichiers ont été modifiés avec succès.", vbOKOnly + vbInformation, "Fin Traitement"
    
GestionErreur:
    '# On ferme les objets créés
    Set oFso = Nothing
    Set oDirectory = Nothing
    Set wkbSource = Nothing

    '# Rétablissement des paramètres Excel
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .StatusBar = False
    End With
    
End Sub


Bon courage
 
Dernière édition:

xorre

XLDnaute Junior
Re : VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

merci :eek:

Je fais du VBA que depuis ce matin merci de votre indulgence ^^'

les fichiers sont biens ouverts, mais le traitement If Left$(wks.Name, 2) = "3." Then wks.Name = "3. Valeurs" ne s'effectue pas correctement alors qu'il s'effectuait lorsque je test simplement cette modification

des idées ?


EDIT : la petite ligne maline : wkbSource.Close SaveChanges:=False, remplacé par true ... tout fonctionne du feu de dieu !
 
Dernière édition:

xorre

XLDnaute Junior
Re : VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

Bonjour et encore merci, tout marche impeccablement et on voit la portée du VBA :).

Néanmoins, un fichier bug sur un certain nombre ce qui est ridicule, mais j'aimerai comprendre pourquoi ....
Y'a t'il une option dans excel qui pourrait "bloquer" la macro mise en place ?
 

Jam

XLDnaute Accro
Re : VBA : renommage d'onglet/feuillet (feuil1 - feuil2 - feuil3)

Bonjour xorre

Bien vu pour le SaveChanges:=False ! Vu que j'ai repris ça sur un précédent dév, j'avais omis de préciser ce point.

Concernant le bug, je ne peux pas vraiment aider comme ça, car je n'ai pas de renseignements suffisant pour comprendre l'erreur.
La meilleure façon de comprendre est de basculer en mode Pas à Pas pour débugger. Il s'agit d'une exécution ligne à ligne de la macro qui permet d'étudier son comportement, les changements de valeur et les endroits où ont lieu les erreurs. Pour le lancer il suffit de se positionner dans le module et d'appuyer sur {F8}. Auparavant, il vaut mieux afficher la fenêtre "Variables Locales" via le menu Affichage dans l'IDE. Cette fenêtre affiche toutes les variables du programme au fur et à mesure qu'elles s'initialisent ou se modifient.
Cet exercice est aussi un excellent moyen de progresser en VBA car il permet de comprendre ce qui se passe durant le déroulement du programme. Tout bon développeur se doit d'utiliser et connaître le débogage.
Si tu cibles l'erreur sans arriver à la comprendre, n'hésite pas à revenir sur le post.

Bon courage.
 

Statistiques des forums

Discussions
312 571
Messages
2 089 804
Membres
104 276
dernier inscrit
helenevellocet