Comment changer des noms de feuilles dans une macro

PFRANCO

XLDnaute Junior
Bonsoir à tous,

Je cherche depuis un petit moment comment changer automatiquement une ou plusieurs noms de feuille situés dans une macro.
Le nom de la feuille se situe dans une cellule précise ex: "A2" et la cellule en question se trouve dans la feuille nommée "Base".

Je tourne en rond en essayant de reprendre des bouts de codes mais Pufff...

quelqu'un a-t-il une piste?

Ci joint un fichier exemple.

Merci à tous.

Philippe.
 

Pièces jointes

  • remplacement contenu macro.xls
    27 KB · Affichages: 81

Staple1600

XLDnaute Barbatruc
Re : Comment changer des noms de feuilles dans une macro

Bonsoir


Oui

Edition/remplacer


Cela m'a pris 15 secondes

voir pj





EDITION: une solution plus "vbaistique"
Code:
Sub RemplacementMotDansProcedure()
[COLOR=Green]'auteur: silkyroad[/COLOR]
    'Nécéssite d'activer la référence
    '"Visual basic For Application Extensibility 5.3"
    '
    Dim Ancien As String, Nouveau As String, Cible As String
    Dim VBComp As VBComponent
    Dim i As Integer
    Dim Wb As Workbook
    
    Set Wb = Workbooks("NomClasseur.xls")
    
    Ancien = "Feuil1"
    Nouveau = "Feuil3"
    
    For Each VBComp In Wb.VBProject.VBComponents
        For i = 1 To VBComp.CodeModule.CountOfLines
            Cible = VBComp.CodeModule.Lines(i, 1)
            Cible = Replace(Cible, Ancien, Nouveau)
            VBComp.CodeModule.ReplaceLine i, Cible
        Next i
    Next VBComp
End Sub
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Re : Comment changer des noms de feuilles dans une macro

Bonsir à tous,

Je ne suis pas sûr d'avoir bien compris ta question.
Tu veux pouvoir utiliser une sorte d'indirection dans ta macro ou alors tu veux réellement changer le code de la macro en fonction du contenu d'une cellule ???


Si tu veux pouvoir utiliser le nom, inscrit dans une cellule, comme nom de feuille pour y faire référence dans ta macro (c'est ce que j'ai nommé au-dessus une "indirection"), le mieux est sans doute de passer par une variable mise à jour avec le contenu de la cellule comportant le nom de l'onglet.

Tu commences par définir, en tout début de ta macro, une variable qui va contenir le nom de l'onglet :
Dim Nom As String

Ensuite, tu remplis ta variable Nom avec le contenu de la cellule de la feuille désirée.
Par exemple : Nom = Sheets("Base").Range("A2")
(cela va donc prendre le contenu de la cellule A2 de la feuille "Base" et le mettre dans la variable Nom)

Enfin, tu utilises la variable Nom dans le reste de ta macro à la place de "X1".
Par exemple au lieu d'écrire Sheets("X1").Select tu écris Sheets(Nom).Select
 
Dernière édition:

PFRANCO

XLDnaute Junior
Re : Comment changer des noms de feuilles dans une macro

Bonjour Staple1600 et Marcel 32,

Je sens que cela devient trés difficile pour moi. J'aimerais pourtant tellement résoudre ce problème.

Je fais donc appel à votre compréhension et à votre patience et de mon côté je vais essayé de m'expliquer du mieux possible.

Je vais joindre un fichier le plus complet possible et les explications seront dans le premier onglet nommé "Explications"

Merci à vous.
 

Pièces jointes

  • essai 2.zip
    98.9 KB · Affichages: 72
  • essai 2.zip
    98.9 KB · Affichages: 66
  • essai 2.zip
    98.9 KB · Affichages: 73

TooFatBoy

XLDnaute Barbatruc
Re : Comment changer des noms de feuilles dans une macro

Ca semble pourtant correspondre à ce que je t'ai proposé comme solution.

Tu définis, en tout début de ta macro, une variable qui va contenir le nom de l'onglet :
Dim Nom As String

Ensuite, tu remplis ta variable Nom avec le contenu de la cellule de la feuille désirée.
Par exemple : Nom = Sheets("Base").Range("B2")
Cela va donc prendre le contenu de la cellule B2 de la feuille "Base" (c'est à dire actuellement "X1", mas si tu mets "Y2", ce sera alors "Y2" qui sera utilisé) et le mettre dans la variable Nom.

Enfin, tu utilises la variable Nom dans le reste de ta macro à la place de "X1".
Par exemple au lieu d'écrire Sheets("X1").Select tu écris Sheets(Nom).Select


As-tu essayé ?

Veux-tu aussi faire varier la cellule de référence, c'est à dire la cellule B2 de la feuille "Base", de façon à utiliser au choix le contenu d'une des cellules de la colonne B de la feuille "Base" pour désigner le nom de l'onglet à utiliser ?

Ou peut-être veux-tu changer le nom de l'onglet (mais je n'ai pas compris ça) ?
 
Dernière édition:

PFRANCO

XLDnaute Junior
Re : Comment changer des noms de feuilles dans une macro

Bonsoir Marcel 32,

J'ai essayé la solution que tu proposes et cela ne fonctionne pas.
Dans le fichier que je t'ai fais passé, il y a la "macro1". Peux tu la regarder et me dire plus précisément ou je dois placé ce que tu proposes.

Dans la macro il y a Trois emplacements ou "X1" est présent. Deux d'entre eux servent à se déplacer vers la feuille "X1" et un sert à selectionner par le filtre les noms "X1" pour les copier vers "X1".

Merci . je nage........
 

TooFatBoy

XLDnaute Barbatruc
Re : Comment changer des noms de feuilles dans une macro

J'ai bien vu ta macro nommée Macro1 dans les deux fichiers que tu as postés. ;)
PS : c'est plus pratique sous forme d'une vraie macro comme dans ton deuxième fichier que dans des cellules.

Début de la macro :
Code:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 22/06/2008 par PH CONSULTANTS
'
[COLOR="Red"][B]Dim Nom As String

    Nom = Sheets("Base").Range("B2")[/B][/COLOR]
    Application.ScreenUpdating = False
Ensuite, partout où tu as "X1" tu remplaces par Nom

Attention : pour que ça fonctionne, il faut qu'un onglet portant le nom inscrit en cellule B2 de la feuille "Base" existe déjà.

PS : Tu peux aussi modifier ta macro pour qu'elle reçoive comme paramètre le nom de l'onglet.
Ainsi tu pourra toujours appeler la même macro mais pour des noms d'onglet (donc de personnel) différents.
Mais je ne sais pas si c'est ce que tu recherches.
 
Dernière édition:

PFRANCO

XLDnaute Junior
Re : Comment changer des noms de feuilles dans une macro

Bonjour Marcel 32 et à tous le courageux du dimanche,

Merci pour ta patience. Ca progresse mais comme tu le dis cela ne peut pas fonctionner sans que l'onglet prenne le nom se situant en "B2" "Feuille "Base".

Comment puis je procéder?
Je joins le ficheir réactualiser avec ton bout de code.

En tout cas, en y allant progessivement, je comprends de mieux en mieux la logique. Ce qui me manque, c'est la technique.

Merci.
 

Pièces jointes

  • essai 3.zip
    99.1 KB · Affichages: 56
  • essai 3.zip
    99.1 KB · Affichages: 54
  • essai 3.zip
    99.1 KB · Affichages: 55

TooFatBoy

XLDnaute Barbatruc
Re : Comment changer des noms de feuilles dans une macro

Salut,

Je pense qu'il faudrait que tu expliques clairement ce que tu veux obtenir comme fonctionnement. ;)

Veux-tu que ça recherche l'onglet parmi ceux existant et que s'il n'est pas trouvé il soit alors automatiquement créé ?


Je viens de regarder ton dernier fichier et je constate que tu n'as pas fait exactement ce que je disais dans mon post précédent :
Ensuite, partout où tu as "X1" tu remplaces par Nom

Commence donc par corriger ceci puis dis-nous si ça te convient mieux ou si au contraire ce n'est pas du tout ce que tu recherches.
 
Dernière édition:

PFRANCO

XLDnaute Junior
Re : Comment changer des noms de feuilles dans une macro

Bonjour Marcel32 et bonjour à tous les forumeurs,

Excusez moi pour le silence mais en déplacement à l'étranger toute la semaine.

J'ai fais attention à tes remarques (Fichier joint)

Quand je ne change pas le nom "X1" en Feuil "Base" Range ("B2") et que je change le planning de "X1". Ca foncrionne.

Quand je change le nom "X1" par "X2", la macro bloque.
L'onglet de la feuille concerné porte l'ancien nom "X1".

Tu as sans doute remarqué que le nom de l'onglet change en principe automatiquement avec:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Range("E4").Value <> "" Then ActiveSheet.Name = Range("E4").Value
End Sub

Je me sens vraiment en difficulté pour réaliser mon projet.

En fait, je veux créer un nombre de 30 feuilles qui porteraient les noms de 30 personnes différentes et que je puisse changer les noms. En changeant les noms dans "Base" cela changerait automatiquement le contenu des macros et les noms des onglets.

Merci ,je sens que je vais craquer , je suis la dessus depuis au moins 24 heures
 

Pièces jointes

  • dernier.zip
    91.2 KB · Affichages: 45

PFRANCO

XLDnaute Junior
Re : Comment changer des noms de feuilles dans une macro

Bonjour staple1600,

En effet, tu m'a proposé un code que je n'ai pas pu mettre en oeuvre car je n'étais pas sur mon ordi (déplacement). Je viens de le faire mais je ne sais pas comment l'adapter.
Pour le nom de fichier c'est OK comme tu peux le voir ci dessous mais je ne sais pas comment adapter:
Ancien = "Feuil1"
Nouveau = "Feuil3"

Je pense que tu as compris que je ne voulais avoir à changer que le nom dans "Base" cellule "B2" ou "B3" ect..

Ensuite, comment intègrer ce code dans ma macro?

Sub RemplacementMotDansProcedure()
'auteur: silkyroad
'Nécéssite d'activer la référence
'"Visual basic For Application Extensibility 5.3"
'
Dim Ancien As String, Nouveau As String, Cible As String
Dim VBComp As VBComponent
Dim i As Integer
Dim Wb As Workbook

Set Wb = Workbooks("dernier.xls")

Ancien = "Feuil1"
Nouveau = "Feuil3"

For Each VBComp In Wb.VBProject.VBComponents
For i = 1 To VBComp.CodeModule.CountOfLines
Cible = VBComp.CodeModule.Lines(i, 1)
Cible = Replace(Cible, Ancien, Nouveau)
VBComp.CodeModule.ReplaceLine i, Cible
Next i
Next VBComp
End Sub
 

PFRANCO

XLDnaute Junior
Re : Comment changer des noms de feuilles dans une macro

Bonjour Staple1600 et Marcel32,

Merci pour votre aide. Staple1600, je ne parviens pas à adapter ton code et comment intégrer dans ma macro et j'ai vraiment envie d'avancer.

Marcel 32, j'ai soigneusement reproduit ta proposition et cela ne fonctionne pas.

Pourriez vous m'aider S'il vous plait.

Je sens que je ne comprends pas trop et je sais que je suis quand même beaucoup un bricoleur

Merci à vous.

Philippe.
 

PFRANCO

XLDnaute Junior
Re : Comment changer des noms de feuilles dans une macro

Bonsoir Marcel32, bonsoir Staple1600,

Marcel32
J'ai enfin réussi à adapter le code que tu m'as gentillement donné. Ca fonctionne comme je le souhaitais, même si, je me suis mal fait comprendre. Je suis plutôt intuitif et j'ai du mal à expliquer clairement. Mais... oui bien sûr, il y a un MAIS.

L'opération que je souhaitais faire était la suivante: A partir d'un tableau (déjà envoyé) général "REPARTITION CHAMBRES", je crée une macro qui copie les données realtives à chaque personne (au moyen d'un filtre) et je crée une nouvelle feuille et reporte ces informations. Dans un même module, j'ai enchainé autant de macros que de feuilles à créer (30). RESULTAT: Je ne peux pas mettre plus de 9 créations de feuilles dans un module. Cela affiche "MACRO TROP GRANDE". Peux tu me dire Marcel 32 comment faire?

Merci pour ton aide.

Staple1600, je n'ai pas réussi à adapter ta proposition, c'est encore trop fort pour moi. J'ai apprécier ton attention.

PS. Ci joint, le fichier. la macro "module5" ou "macro1"
Salutations.

Philippe.
 

Pièces jointes

  • Copie de ESSAI.zip
    234.2 KB · Affichages: 56
  • Copie de ESSAI.zip
    234.2 KB · Affichages: 53
  • Copie de ESSAI.zip
    234.2 KB · Affichages: 52

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin