Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vba - renommer le module de feuil84 en module de feuil2 puis boucle pour les autres feuil

8 réponses
Avatar
twinley
Bonjour à tous,

J'ai ajouté des feuilles dans un classeur. Les modules de feuilles
naissent au fur et à mesure. Normal. Mais de nombreux essais ont créés
des discontinuitées et je suis en ordre inverse.

J'aimerais renommer le module de feuil84 en module de feuil2, puis dans
une boucle,
renommer le module de feuil83 en module de feuil3
renommer le module de feuil82 en module de feuil4
jusqu'à la jonction.

Position de début feuil49 à feuil84
Feuil1 et feuil48 ne doivent pas être modifiées.

J'ai bricolé avec les ligne ci-dessous, c'est passé une fois, mais avec
une err 13. Depuis je suis bloqué. C'est déjà pas la bonne syntaxe,
alors je suis loin de faire la boucle.



With Worksheets("Feuil83").CommandButton1
.Name = "Feuil3"
End With


Merci pour votre aide
--
à+twinley

8 réponses

Avatar
CAP2
Salut Twinley,

devant le silence en réponse à ton problème, je te lance un début de
réponse. Le pb c'est que tu ne peux pas avoir 2 feuilles nommée de la même
manière en même temps. Donc on peut filouter en donnant un nommant ta
feuille84 en 85, puis en nommant ta feuille1 en 84, et en repassant ta 85 en
feuill 1...
Mon truc à l'air de fonctionner sauf pour la dernière feuille (celle "du
milieu") où il donne un dernier nom qui ne va pas forcément. Et, la chaleur
aidant, mes neurones sont en rupture...

Essaie de partir de ça et tente d'adapter...

Private Sub CommandButton1_Click()
Dim i As Integer

j = 1
k = 1
For i = 11 To Int(11 / 2) Step -1

Worksheets("Feuil" & i).Name = "Feuil" & (i + k)
Worksheets("Feuil" & j).Name = "Feuil" & i
Worksheets("Feuil" & (i + k)).Name = "Feuil" & j
j = j + 1
k = k + 1

Next

End Sub

Ca donne quoi ?

CAP2
Avatar
anonymousA
bonjour,

il est bien sur possible de changer le codename des feuilles . p.e , voici
une proc qui fait ce travail

For Each ws In ActiveWorkbook.Worksheets
ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") =
"Z" & ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName")
Next ws

Ceci dit, dans ta demande, il sera impossible de donner le même codename à 2
feuilles. Il serait donc utile de passer par une renumérotation du style de
ci-dessus, "ZZFeuil49" jusqu'à ZZFeuil84" feuilles de Feuil49 à 84 . Puis
pour les feuilles Feuil1 à Feuil48 les renommer Feuil 49 à Feuil84 et enfin
renommer les Feuilles "ZZFeuil49" jusqu'à ZZFeuil84" par Feuil1 à Feuil48.
Tu peux réaliser tout ceci en utilisant la proc ci-dessus en l'adaptant avec
des test sur la valeur renvoyée par
ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName")

Je te fais confiance pour triturer le code.

A+

Bonjour à tous,

J'ai ajouté des feuilles dans un classeur. Les modules de feuilles
naissent au fur et à mesure. Normal. Mais de nombreux essais ont créés
des discontinuitées et je suis en ordre inverse.

J'aimerais renommer le module de feuil84 en module de feuil2, puis dans
une boucle,
renommer le module de feuil83 en module de feuil3
renommer le module de feuil82 en module de feuil4
jusqu'à la jonction.

Position de début feuil49 à feuil84
Feuil1 et feuil48 ne doivent pas être modifiées.

J'ai bricolé avec les ligne ci-dessous, c'est passé une fois, mais avec
une err 13. Depuis je suis bloqué. C'est déjà pas la bonne syntaxe,
alors je suis loin de faire la boucle.



With Worksheets("Feuil83").CommandButton1
.Name = "Feuil3"
End With


Merci pour votre aide
--
à+twinley



Avatar
twinley
Salut CAP2

Grand merci pour le bruit et l'écho.
Le pb n'est pas aisé.
Entre temps je partais sur quelque chose qui ressemble et que j'adapte
d'après Laurent Longre.

Sub modifnommodulefeuil()
'cochez la référence "Microsoft Visual Basic for Applications
Extensibility 5.3"
'Laurent Longre
Dim Module As VBComponent
Dim Nom As String
Nom = "Feuil"
For Each Module In ActiveWorkbook.VBProject.VBComponents
If Module.Name Like "Feuil#" Or Module.Name Like "Feuil##" Or
Module.Name Like "Feuil1" Or Module.Name Like "Feuil48" _
Then Nom = "Feuil" & CInt(Mid(Module.Name, 5)) + 1
Next
ActiveWorkbook.VBProject.VBComponents. _
Add(vbext_ct_StdModule).Name = Nom
End Sub

Cela ne tourne pas encore, mais un mix des deux pourrait me donner la
soluce.
Tes remarques montrent que je n'ai pas tout dit, bien involontairement.

J'ai :
Feuil1
Feuil48
Feuil49
Feuil50
.
.
.
Feuil83
Feuil84

discontinue de feuil49 à feuil84

Je veux passer
Feuil84 en Feuil2,
Feuil83 en Feuil3,
Feuil82 en Feuil4,

sans toucher la feuil1 ni la feuil48.

voilà,voilà, tu as raison, gare à la surchauffe...

à+twinley

CAP2 wrote:
Salut Twinley,

devant le silence en réponse à ton problème, je te lance un début de
réponse. Le pb c'est que tu ne peux pas avoir 2 feuilles nommée de la même
manière en même temps. Donc on peut filouter en donnant un nommant ta
feuille84 en 85, puis en nommant ta feuille1 en 84, et en repassant ta 85 en
feuill 1...
Mon truc à l'air de fonctionner sauf pour la dernière feuille (celle "du
milieu") où il donne un dernier nom qui ne va pas forcément. Et, la chaleur
aidant, mes neurones sont en rupture...

Essaie de partir de ça et tente d'adapter...

Private Sub CommandButton1_Click()
Dim i As Integer

j = 1
k = 1
For i = 11 To Int(11 / 2) Step -1

Worksheets("Feuil" & i).Name = "Feuil" & (i + k)
Worksheets("Feuil" & j).Name = "Feuil" & i
Worksheets("Feuil" & (i + k)).Name = "Feuil" & j
j = j + 1
k = k + 1

Next

End Sub

Ca donne quoi ?

CAP2




Avatar
twinley
Bonjour aA

Merci pour l'aide et les encouragements. Je triture.
J'ai une discontinuité de feuille, après suppression, ce qui m'évitera
le renommage, car les N° sont libres de 2 à 47.


à+twinley

anonymousA wrote:
bonjour,

il est bien sur possible de changer le codename des feuilles . p.e , voici
une proc qui fait ce travail

For Each ws In ActiveWorkbook.Worksheets
ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") =
"Z" & ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName")
Next ws

Ceci dit, dans ta demande, il sera impossible de donner le même codename à 2
feuilles. Il serait donc utile de passer par une renumérotation du style de
ci-dessus, "ZZFeuil49" jusqu'à ZZFeuil84" feuilles de Feuil49 à 84 . Puis
pour les feuilles Feuil1 à Feuil48 les renommer Feuil 49 à Feuil84 et enfin
renommer les Feuilles "ZZFeuil49" jusqu'à ZZFeuil84" par Feuil1 à Feuil48.
Tu peux réaliser tout ceci en utilisant la proc ci-dessus en l'adaptant avec
des test sur la valeur renvoyée par
ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName")

Je te fais confiance pour triturer le code.

A+


Bonjour à tous,

J'ai ajouté des feuilles dans un classeur. Les modules de feuilles
naissent au fur et à mesure. Normal. Mais de nombreux essais ont créés
des discontinuitées et je suis en ordre inverse.

J'aimerais renommer le module de feuil84 en module de feuil2, puis dans
une boucle,
renommer le module de feuil83 en module de feuil3
renommer le module de feuil82 en module de feuil4
jusqu'à la jonction.

Position de début feuil49 à feuil84
Feuil1 et feuil48 ne doivent pas être modifiées.

J'ai bricolé avec les ligne ci-dessous, c'est passé une fois, mais avec
une err 13. Depuis je suis bloqué. C'est déjà pas la bonne syntaxe,
alors je suis loin de faire la boucle.



With Worksheets("Feuil83").CommandButton1
.Name = "Feuil3"
End With


Merci pour votre aide
--
à+twinley





Avatar
CAP2
Salut twinley,

en "jouant" bien sur les indices des variables, tu devrais pouvoir t'en
sortir...

CAP2
Avatar
Hervé
Bonjour Twinley,
Teste ce code sur une copie de ton classeur :

Sub Renommer()
Dim Module As Object
Dim Tbl() As String
Dim I As Integer
Dim J As Integer

'récupère dans un tableau le nom
'des modules de feuilles dont
'le nombre est supérieur à 48
With ThisWorkbook.VBProject
For I = 1 To .VBComponents.Count
Set Module = .VBComponents(I)
With Module
If Left(.Name, 5) = "Feuil" And _
Right(.Name, Len(.Name) - 5) > 48 Then
J = J + 1
ReDim Preserve Tbl(1 To J)
Tbl(J) = .Name
End If
End With
Next I
'tri le tableau par ordre décroissant
Tri Tbl()
'défini à 1 pour débuter à Feuil2
J = 1
'Renomme les modules comme :
'Feuil84 = Feuil2
'Feuil83 = Feuil3
'Feuil82 = Feuil4
'etc...
For I = 1 To UBound(Tbl)
J = J + 1
.VBComponents(Tbl(I)).Name = "Feuil" & J
Next
End With

Set Module = Nothing
End Sub

Sub Tri(Tbl() As String)
Dim Tempo
Dim I As Integer
Dim J As Integer
'pour un tri décroissant "<"
'pour un tri croissant ">"
For I = 1 To UBound(Tbl) - 1
For J = I + 1 To UBound(Tbl)
If Tbl(I) < Tbl(J) Then
Tempo = Tbl(J)
Tbl(J) = Tbl(I)
Tbl(I) = Tempo
End If
Next J
Next I
End Sub

Hervé.

"twinley" a écrit dans le message de news:
OUhZuE#
Bonjour à tous,

J'ai ajouté des feuilles dans un classeur. Les modules de feuilles
naissent au fur et à mesure. Normal. Mais de nombreux essais ont créés
des discontinuitées et je suis en ordre inverse.

J'aimerais renommer le module de feuil84 en module de feuil2, puis dans
une boucle,
renommer le module de feuil83 en module de feuil3
renommer le module de feuil82 en module de feuil4
jusqu'à la jonction.

Position de début feuil49 à feuil84
Feuil1 et feuil48 ne doivent pas être modifiées.

J'ai bricolé avec les ligne ci-dessous, c'est passé une fois, mais avec
une err 13. Depuis je suis bloqué. C'est déjà pas la bonne syntaxe,
alors je suis loin de faire la boucle.



With Worksheets("Feuil83").CommandButton1
.Name = "Feuil3"
End With


Merci pour votre aide
--
à+twinley


Avatar
twinley
Bonjour Hervé

Je manque de superlatif.
Impressionnant, ça marche nickel.
J'étais encore loin de trouver.
Cette procédure mérite de rentrer au Panthéon de Misange, j'espère que
cela va tomber sous ses yeux.
Les miens sont tout embués par l'émotion, je n'ai jamais vu un tableau
d'aussi près.

Merci pour le temps gagné.

à+twinley

Hervé wrote:
Bonjour Twinley,
Teste ce code sur une copie de ton classeur :

Sub Renommer()
Dim Module As Object
Dim Tbl() As String
Dim I As Integer
Dim J As Integer

'récupère dans un tableau le nom
'des modules de feuilles dont
'le nombre est supérieur à 48
With ThisWorkbook.VBProject
For I = 1 To .VBComponents.Count
Set Module = .VBComponents(I)
With Module
If Left(.Name, 5) = "Feuil" And _
Right(.Name, Len(.Name) - 5) > 48 Then
J = J + 1
ReDim Preserve Tbl(1 To J)
Tbl(J) = .Name
End If
End With
Next I
'tri le tableau par ordre décroissant
Tri Tbl()
'défini à 1 pour débuter à Feuil2
J = 1
'Renomme les modules comme :
'Feuil84 = Feuil2
'Feuil83 = Feuil3
'Feuil82 = Feuil4
'etc...
For I = 1 To UBound(Tbl)
J = J + 1
.VBComponents(Tbl(I)).Name = "Feuil" & J
Next
End With

Set Module = Nothing
End Sub

Sub Tri(Tbl() As String)
Dim Tempo
Dim I As Integer
Dim J As Integer
'pour un tri décroissant "<"
'pour un tri croissant ">"
For I = 1 To UBound(Tbl) - 1
For J = I + 1 To UBound(Tbl)
If Tbl(I) < Tbl(J) Then
Tempo = Tbl(J)
Tbl(J) = Tbl(I)
Tbl(I) = Tempo
End If
Next J
Next I
End Sub

Hervé.

"twinley" a écrit dans le message de news:
OUhZuE#

Bonjour à tous,

J'ai ajouté des feuilles dans un classeur. Les modules de feuilles
naissent au fur et à mesure. Normal. Mais de nombreux essais ont créés
des discontinuitées et je suis en ordre inverse.

J'aimerais renommer le module de feuil84 en module de feuil2, puis dans
une boucle,
renommer le module de feuil83 en module de feuil3
renommer le module de feuil82 en module de feuil4
jusqu'à la jonction.

Position de début feuil49 à feuil84
Feuil1 et feuil48 ne doivent pas être modifiées.

J'ai bricolé avec les ligne ci-dessous, c'est passé une fois, mais avec
une err 13. Depuis je suis bloqué. C'est déjà pas la bonne syntaxe,
alors je suis loin de faire la boucle.



With Worksheets("Feuil83").CommandButton1
.Name = "Feuil3"
End With


Merci pour votre aide
--
à+twinley







Avatar
Hervé
Bonjour Twinley,
Merci, merci, je n'en demande pas tant, du coup j'ai les chevilles qui
enflent ;o)
Heureux de t'avoir aidé.
Bonne journée.
Hervé.

"twinley" a écrit dans le message de news:
e6$nnv$
Bonjour Hervé

Je manque de superlatif.
Impressionnant, ça marche nickel.
J'étais encore loin de trouver.
Cette procédure mérite de rentrer au Panthéon de Misange, j'espère que
cela va tomber sous ses yeux.
Les miens sont tout embués par l'émotion, je n'ai jamais vu un tableau
d'aussi près.

Merci pour le temps gagné.

à+twinley

Hervé wrote:
Bonjour Twinley,
Teste ce code sur une copie de ton classeur :

Sub Renommer()
Dim Module As Object
Dim Tbl() As String
Dim I As Integer
Dim J As Integer

'récupère dans un tableau le nom
'des modules de feuilles dont
'le nombre est supérieur à 48
With ThisWorkbook.VBProject
For I = 1 To .VBComponents.Count
Set Module = .VBComponents(I)
With Module
If Left(.Name, 5) = "Feuil" And _
Right(.Name, Len(.Name) - 5) > 48 Then
J = J + 1
ReDim Preserve Tbl(1 To J)
Tbl(J) = .Name
End If
End With
Next I
'tri le tableau par ordre décroissant
Tri Tbl()
'défini à 1 pour débuter à Feuil2
J = 1
'Renomme les modules comme :
'Feuil84 = Feuil2
'Feuil83 = Feuil3
'Feuil82 = Feuil4
'etc...
For I = 1 To UBound(Tbl)
J = J + 1
.VBComponents(Tbl(I)).Name = "Feuil" & J
Next
End With

Set Module = Nothing
End Sub

Sub Tri(Tbl() As String)
Dim Tempo
Dim I As Integer
Dim J As Integer
'pour un tri décroissant "<"
'pour un tri croissant ">"
For I = 1 To UBound(Tbl) - 1
For J = I + 1 To UBound(Tbl)
If Tbl(I) < Tbl(J) Then
Tempo = Tbl(J)
Tbl(J) = Tbl(I)
Tbl(I) = Tempo
End If
Next J
Next I
End Sub

Hervé.

"twinley" a écrit dans le message de news:
OUhZuE#

Bonjour à tous,

J'ai ajouté des feuilles dans un classeur. Les modules de feuilles
naissent au fur et à mesure. Normal. Mais de nombreux essais ont créés
des discontinuitées et je suis en ordre inverse.

J'aimerais renommer le module de feuil84 en module de feuil2, puis dans
une boucle,
renommer le module de feuil83 en module de feuil3
renommer le module de feuil82 en module de feuil4
jusqu'à la jonction.

Position de début feuil49 à feuil84
Feuil1 et feuil48 ne doivent pas être modifiées.

J'ai bricolé avec les ligne ci-dessous, c'est passé une fois, mais avec
une err 13. Depuis je suis bloqué. C'est déjà pas la bonne syntaxe,
alors je suis loin de faire la boucle.



With Worksheets("Feuil83").CommandButton1
.Name = "Feuil3"
End With


Merci pour votre aide
--
à+twinley