OVH Cloud OVH Cloud

vba-incrementer les noms de feuilles

8 réponses
Avatar
Pierre.M
Bonjour à tous,

Je seche sur le point suivant:

A l'aide d'une feuille "modele", je cree et je remplis des formulaires
que j'enregistre en les renommant dans le meme classeur a l'aide de la
macro suivante

Private sub cb_Click()
Activesheet.Name=Activesheet.Range("J3").Value & "_" &
Format(Activesheet.Range("AK3"), "mm")
Unload F_save
End Sub

Pas de probleme jusque la. J'obtiens des feuilles avec des noms du type
1234_09 ou 1234 est le type de formulaire et 09 le mois. Le hic arrive
quand je cherche a enregistrer un autre formulaire du meme type le meme
mois. C'est pas possible car ils auraient alors le meme nom...

Comment incrementer le nom dans le cas ou ce nom existe deja (si
1234_09 existe alors le nouveau 1234_09 devient 1234_09 (2) puis le
3eme deviendra 1234_09 (3)...etc)? Serait-il possible aussi de changer
le nom du 1er en 1234_09 (1)?


Merci de votre aide pour finir ce projet.

Dominicamicalement.

Pierre

8 réponses

Avatar
JB
Bonjour,

Crée des noms d'onglets indicés:

http://cjoint.com/?kbe64mCWdC

Private Sub b_go_Click()
Sheets("Modèle").Copy Before:=Sheets(Sheets.Count)
indiceMx = 0
For Each s In ActiveWorkbook.Sheets
If s.Name Like "*_*_*" Then
p = InStrRev(s.Name, "_")
If Val(Mid(s.Name, p + 1)) > indiceMx Then indiceMx =
Val(Mid(s.Name, p + 1))
End If
Next s
ActiveSheet.Name = ActiveSheet.Range("J3").Value & "_" & _
Format(ActiveSheet.Range("AK3"), "mm") & "_" & indiceMx + 1
Unload Me
End Sub

Cordialement JB


Bonjour à tous,

Je seche sur le point suivant:

A l'aide d'une feuille "modele", je cree et je remplis des formulaires
que j'enregistre en les renommant dans le meme classeur a l'aide de la
macro suivante

Private sub cb_Click()
Activesheet.Name¬tivesheet.Range("J3").Value & "_" &
Format(Activesheet.Range("AK3"), "mm")
Unload F_save
End Sub

Pas de probleme jusque la. J'obtiens des feuilles avec des noms du type
1234_09 ou 1234 est le type de formulaire et 09 le mois. Le hic arrive
quand je cherche a enregistrer un autre formulaire du meme type le meme
mois. C'est pas possible car ils auraient alors le meme nom...

Comment incrementer le nom dans le cas ou ce nom existe deja (si
1234_09 existe alors le nouveau 1234_09 devient 1234_09 (2) puis le
3eme deviendra 1234_09 (3)...etc)? Serait-il possible aussi de changer
le nom du 1er en 1234_09 (1)?


Merci de votre aide pour finir ce projet.

Dominicamicalement.

Pierre


Avatar
JB
Solution avec compteur dans un onglet:

http://cjoint.com/?kbfoyzA7xn

Private Sub b_go_Click()
Sheets("Modèle").Copy Before:=Sheets(Sheets.Count)
indiceMx = Sheets("compteur").[A1]
ActiveSheet.Name = ActiveSheet.Range("J3").Value & "_" & _
Format(ActiveSheet.Range("AK3"), "mm") & "_" & indiceMx + 1
Sheets("compteur").[A1] = Sheets("compteur").[A1] + 1
Unload Me
End Sub

JB


Bonjour à tous,

Je seche sur le point suivant:

A l'aide d'une feuille "modele", je cree et je remplis des formulaires
que j'enregistre en les renommant dans le meme classeur a l'aide de la
macro suivante

Private sub cb_Click()
Activesheet.Name¬tivesheet.Range("J3").Value & "_" &
Format(Activesheet.Range("AK3"), "mm")
Unload F_save
End Sub

Pas de probleme jusque la. J'obtiens des feuilles avec des noms du type
1234_09 ou 1234 est le type de formulaire et 09 le mois. Le hic arrive
quand je cherche a enregistrer un autre formulaire du meme type le meme
mois. C'est pas possible car ils auraient alors le meme nom...

Comment incrementer le nom dans le cas ou ce nom existe deja (si
1234_09 existe alors le nouveau 1234_09 devient 1234_09 (2) puis le
3eme deviendra 1234_09 (3)...etc)? Serait-il possible aussi de changer
le nom du 1er en 1234_09 (1)?


Merci de votre aide pour finir ce projet.

Dominicamicalement.

Pierre


Avatar
Pierre.M
Mes excuses tout d'abord pour la reponse tardive et merci beaucoup pour
ton aide.

La 1ere solution ne semble pas fonctionner sur l'antique Excel97 de mon
etat d'employeur. Ca coince sur InstrRev (erreur de compilation/Sub ou
Function non definie). Peut-etre y a-t-il un moyen de contourner ce
probleme?

La seconde fonctionne bien, mais ne convient pas a mon probleme car
toutes les feuilles sont numerotees chronologiquement et moi je
voudrais une numerotation par nom en cas de doublons ou triplons
(1234_09, 1234_09_2..., 2345_10, 2345_10_2, 2345_10_3...,
3456_07,...etc).

En tous les cas merci encore.

Pierre
Avatar
JB
Solution1 version 97:

http://cjoint.com/?kcu7jpn2vI

Private Sub b_go_Click()
Sheets("Modèle").Copy Before:=Sheets(Sheets.Count)
indiceMx = 0
For Each s In ActiveWorkbook.Sheets
If s.Name Like "*_*_*" Then
'--- ou p=InstRev(s.name,"_")
p = Len(s.Name)
témoin = True
Do While témoin
If Mid(s.Name, p, 1) = "_" Then
témoin = False
Else
p = p - 1
End If
Loop
'---
If Val(Mid(s.Name, p + 1)) > indiceMx Then indiceMx =
Val(Mid(s.Name, p + 1))
End If
Next s
ActiveSheet.Name = ActiveSheet.Range("J3").Value & "_" & _
Format(ActiveSheet.Range("AK3"), "mm") & "_" & indiceMx + 1
Unload Me
End Sub

JB



Mes excuses tout d'abord pour la reponse tardive et merci beaucoup pour
ton aide.

La 1ere solution ne semble pas fonctionner sur l'antique Excel97 de mon
etat d'employeur. Ca coince sur InstrRev (erreur de compilation/Sub ou
Function non definie). Peut-etre y a-t-il un moyen de contourner ce
probleme?

La seconde fonctionne bien, mais ne convient pas a mon probleme car
toutes les feuilles sont numerotees chronologiquement et moi je
voudrais une numerotation par nom en cas de doublons ou triplons
(1234_09, 1234_09_2..., 2345_10, 2345_10_2, 2345_10_3...,
3456_07,...etc).

En tous les cas merci encore.

Pierre


Avatar
Pierre.M
Je suis vraiment desole JB, mais je dois etre plutot embrouille dans ma
demande...

Je reessaye encore une fois.

J'ai 6 types de chantiers possibles 1111, 2222, 3333, 4444, 5555, 6666.
Je peux en faire un ou plusieurs de chaque type, chaque mois, ce qui me
donne le nom de la feuille correspondante (3333_09 pour un chantier
type 3333 en septembre).

Au moment de l'enregistrement s'il n'existe pas de feuille 3333_09,
alors j'enregistre sous ce nom.

Si le nom existe deja (j'ai deja enregistre un chantier de type 3333 en
septembre) alors j'incremente (3333_09_2) et si une feuille porte aussi
deja ce nom (j'ai deja enregistre 2 chantiers 3333 en septembre) alors
j'incremente encore (3333_09_3)...etc

Je voudrais donc une incrementation du nom, mais seulement en cas de
doublon (plus d'un chantier 3333 en septembre). Si j'ai aussi plus d'un
chantier 5555 en septembre il me faut alors une nouvelle serie
incrementee(5555_09, 5555_09_2,...) et ainsi de suite...

Et chaque mois on recommence autant de series incrementees que necessaire.

Ainsi j'aurais:
3333_09, 3333_09_2, 3333_09_3, 5555_09, 5555_09_2... en septembre
3333_10, 3333_10_2, 4444_10, 5555_10, 5555_10_2... en octobre
...
3333_12, 3333_12_2... en decembre

Peut-etre est ce plus clair ainsi.

Quoiqu'il en soit merci, merci beaucoup pour ta patience et ton assiduite ;-))

Pierre
Avatar
Pierre.M
Bonsoir tous,

Je me permets d'insister une derniere fois, ne trouvant toujours pas de
solutions a ce probleme...

JB m'en a fourni 2 (merci encore a lui) mais qui ne conviennent pas
vraiment a ma demande (probablement n'ai-je su m'expliquer
correctement...).

Si quelqu'un avait une autre proposition, c'est avec grand plaisir
qu'elle serait acceptee ;-))

Merci encore et bon weekend a tous.

Pierre



On 2006-10-03 00:20:38 +0200, Pierre.M said:

Je suis vraiment desole JB, mais je dois etre plutot embrouille dans ma
demande...

Je reessaye encore une fois.

J'ai 6 types de chantiers possibles 1111, 2222, 3333, 4444, 5555, 6666.
Je peux en faire un ou plusieurs de chaque type, chaque mois, ce qui me
donne le nom de la feuille correspondante (3333_09 pour un chantier
type 3333 en septembre).

Au moment de l'enregistrement s'il n'existe pas de feuille 3333_09,
alors j'enregistre sous ce nom.

Si le nom existe deja (j'ai deja enregistre un chantier de type 3333 en
septembre) alors j'incremente (3333_09_2) et si une feuille porte aussi
deja ce nom (j'ai deja enregistre 2 chantiers 3333 en septembre) alors
j'incremente encore (3333_09_3)...etc

Je voudrais donc une incrementation du nom, mais seulement en cas de
doublon (plus d'un chantier 3333 en septembre). Si j'ai aussi plus d'un
chantier 5555 en septembre il me faut alors une nouvelle serie
incrementee(5555_09, 5555_09_2,...) et ainsi de suite...

Et chaque mois on recommence autant de series incrementees que necessaire.

Ainsi j'aurais:
3333_09, 3333_09_2, 3333_09_3, 5555_09, 5555_09_2... en septembre
3333_10, 3333_10_2, 4444_10, 5555_10, 5555_10_2... en octobre
...
3333_12, 3333_12_2... en decembre

Peut-etre est ce plus clair ainsi.

Quoiqu'il en soit merci, merci beaucoup pour ta patience et ton assiduite ;-))

Pierre


Avatar
isabelle
Bonjour Pierre,

voici une autre approche, dit moi si cela te va ?

'à copier sur le module :

Sub num()
Dim model()
For Each f In ActiveWorkbook.Sheets
nn = Left(f.Name, 4)
mm = CStr(Sheets("Modèle").Range("J3").Value)
If nn = mm Then x = x + 1
Next
MsgBox "dernier numéro du model " & mm & "= " & _
x & " le prochain model sera à " & x + 1

''Sheets("Modèle").Copy Before:=Sheets(Sheets.Count)
''ActiveSheet.Name = ActiveSheet.Range("J3").Value & "_" & _
'' Format(ActiveSheet.Range("AK3"), "mm") & "_" & x + 1
End Sub

isabelle


Bonsoir tous,

Je me permets d'insister une derniere fois, ne trouvant toujours pas de
solutions a ce probleme...

JB m'en a fourni 2 (merci encore a lui) mais qui ne conviennent pas
vraiment a ma demande (probablement n'ai-je su m'expliquer
correctement...).

Si quelqu'un avait une autre proposition, c'est avec grand plaisir
qu'elle serait acceptee ;-))

Merci encore et bon weekend a tous.

Pierre



On 2006-10-03 00:20:38 +0200, Pierre.M said:

Je suis vraiment desole JB, mais je dois etre plutot embrouille dans
ma demande...

Je reessaye encore une fois.

J'ai 6 types de chantiers possibles 1111, 2222, 3333, 4444, 5555,
6666. Je peux en faire un ou plusieurs de chaque type, chaque mois, ce
qui me donne le nom de la feuille correspondante (3333_09 pour un
chantier type 3333 en septembre).

Au moment de l'enregistrement s'il n'existe pas de feuille 3333_09,
alors j'enregistre sous ce nom.

Si le nom existe deja (j'ai deja enregistre un chantier de type 3333
en septembre) alors j'incremente (3333_09_2) et si une feuille porte
aussi deja ce nom (j'ai deja enregistre 2 chantiers 3333 en septembre)
alors j'incremente encore (3333_09_3)...etc

Je voudrais donc une incrementation du nom, mais seulement en cas de
doublon (plus d'un chantier 3333 en septembre). Si j'ai aussi plus
d'un chantier 5555 en septembre il me faut alors une nouvelle serie
incrementee(5555_09, 5555_09_2,...) et ainsi de suite...

Et chaque mois on recommence autant de series incrementees que
necessaire.

Ainsi j'aurais:
3333_09, 3333_09_2, 3333_09_3, 5555_09, 5555_09_2... en septembre
3333_10, 3333_10_2, 4444_10, 5555_10, 5555_10_2... en octobre
...
3333_12, 3333_12_2... en decembre

Peut-etre est ce plus clair ainsi.

Quoiqu'il en soit merci, merci beaucoup pour ta patience et ton
assiduite ;-))

Pierre







Avatar
Pierre.M
Bonjour Isabelle,

Merci beaucoup pour ton code. On approche de tres pres mon besoin.

Le petit probleme c'est que l'incrementation se fait sur les 4
premiers chiffres alors que dans mon cas j'aimerais qu'elle se fasse
sur le nom complet (1234_09 est different de 1234_10)

Pour toi 1234_09_1 / 1234_09_2 / 1234_10_3 / 1234_10_4 / 5678_10_1...
alors que j'aurais besoin de 1234_09_1 / 1234_09_2 / 1234_10_1 /
1234_10_2 / 5678_10_1...

La cerise sur le gateau, ce serait d'avoir l'incrementation seulement
au 2eme enregistrement (nouvelle feuille avec meme numero XXX). Le 1er
enregistrement d'une feuille (1ere feuille avec un numero XXX) ne
comporterait pas de numero d'incrementation (enregistrement "normal"
donc).

Si je n'ai qu'une feuille -> xxxx_yy
Si j'ai 2 feuilles (ou plus) -> xxxx_yy et xxxx_yy_2 / xxxx_yy_3

Peut-etre que j'exagere, non?( ;-)

En tous cas, merci encore et bonne journee.

Pierre