Recopie modèle et le renomme

La Vouivre

XLDnaute Occasionnel
Bonsoirs amis du forum
J’ai une macro qui me recopie et renomme un onglet en l'incrémentant d'un chiffre ,je voudrais avoir une lettre à la place
Comment changer la ligne de code

i = WorksheetFunction.Max(i, CInt(Mid(s.Name, Len(PREFIX) + 1)) + 1)

pour avoir à la place de " lettre 1 " "lettre A" ;"letre B"

Je n'arrive pas à entrer l'alphabet à la place des chiffres .
De plus si possible après l'alphabet simple pouvoir ajouter plusieurs lettre exemple "lettre AA " "lettre AB" " lettre AAA" "lettre AAB" ainsi de suite

Merci à tous
Bonne soirée
 

Pièces jointes

  • POUR ESSAIS.xls
    39.5 KB · Affichages: 90
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Recopie modèle et le renomme

Re

une 2ème solution que j'évoquait tout à l'heure, pour déterminer les noms comme suit :

A, B, C => Z ensuite AA, AB, AC => AZ ensuite BA, BB, BC => BZ, quand on arrive à ZZ, repart sur 3 caractères AAA...

Code:
Sub test2()
Dim p As String, ws As Worksheet, x As String, i As Integer, j As Byte, b As Boolean
p = "Lettre "
For Each ws In Worksheets
    If ws.Name Like p & "*" Then
        If Len(Mid(ws.Name, 8)) > Len(x) Or Mid(ws.Name, 8) > x Then x = Mid(ws.Name, 8)
    End If
Next ws
If Asc(Right(x, 1)) < 90 Then
    x = Mid(x, 1, (Len(x) - 1)) & Chr(Asc(Right(x, 1)) + 1)
Else
    If Len(x) > 1 Then
        For i = Len(x) - 1 To 1 Step -1
            If Asc(Mid(x, i, 1)) < 90 Then
                Mid(x, i, 1) = Chr(Asc(Mid(x, i, 1)) + 1)
                For j = i + 1 To Len(x)
                    Mid(x, j, 1) = Chr(65)
                Next j
                b = True
                Exit For
            End If
        Next i
        If b = False Then
            For i = 1 To Len(x) + 1
                x = IIf(i = 1, Chr(65), x & Chr(65))
            Next i
        End If
    Else
        x = "AA"
    End If
End If
Sheets("modele").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = p & x
End Sub

tu peux déclarer tes variable sur plusieurs lignes, faut faire précéder la variable d'une instruction "DIM" par exemple :

Code:
Sub test2()
Dim p As String, ws As Worksheet, x As String
Dim i As Integer, j As Byte, b As Boolean

@+
 

La Vouivre

XLDnaute Occasionnel
Re : Recopie modèle et le renomme

Chapeau bas monsieur vous êtes bien un expert, et moi qu’un pousseur de souris voir de souriceau, je viens d’essayer le code qui marche bien.
Mais première question : Combien de page on peut avoir dans un fichier ?
Seconde question : combien de fois la « méthode copy » peut recopier un modèle ?
Car un bug apparais avec la copie « lettre GI »
Et merci pour la seconde leçon
 

Pierrot93

XLDnaute Barbatruc
Re : Recopie modèle et le renomme

Re

D'après l'aide Excel, le nombre de feuilles est dépendant de la mémoire disponible sur la machine.

Effectivement moi je bogue sur IV lors de la copie, quand le nombre de feuilles est 257. Même si je copie manuellement la feuille pas de message d'erreur, mais copie non faite, bizarre peut être un bogue Excel, vois pas trop de solution...

@+
 

La Vouivre

XLDnaute Occasionnel
Re : Recopie modèle et le renomme

D’après mes recherche sur le web c’est la solution qui arrive, on est limité par la mémoire, solution à apporter si nécessaire augmenter la mémoire.
Je viens d’essayer la macro sur un fichier tous neuf et la ça plante depuis le début
Le sort s’acharne sur nous.
Allons déjeuner tranquillement, on pense mieux le ventre plein.
La solution viendra cette après midi.
Je vous offre l’apéro ‘‘virtuel’’ « avec modération »
Bon appétit
A bientôt
 

La Vouivre

XLDnaute Occasionnel
Re : Recopie modèle et le renomme

Apres recherche et observation j’ai trouver mon erreur , le texte de l’onglet doit être conforme à celui de la macro « modele » et « Lettre A » doivent être rigoureusement identique en format , j’avais libellé l’onglet avec « lettre A » manquais une majuscule donc plantage .
Y as pas le ventre commande bien la tête, une fois remplis on pense plus facilement.
Monsieur Pierrot93 je vous félicite pour ce magnifique travail.
Je viens à nouveau vous remercier pour ce travail qui va beaucoup m’aider.
Une dernière chose, comme vous êtes un maître, pouvez-vous m’explique le code ou mettre des commentaire entre les lignes afin que je comprenne le mécanisme de cette macro .
Merci par avance
 

cibleo

XLDnaute Impliqué
Re : Recopie modèle et le renomme

Bonjour à tous,
Bonjour La Vouivre,

Pour m'immiscer dans la conversation et répondre à ton dernier post, il s'agit effectivement d'un problème de mémoire.

J'évoquais le même souci que toi dans le lien ci-dessous :

Vois la solution apportée par BrunoM45, cela fonctionnait parfaitement chez moi.

https://www.excel-downloads.com/threads/vba-dupliquer-1-modele.96765/

Amicalement Cibleo
 

La Vouivre

XLDnaute Occasionnel
Re : Recopie modèle et le renomme

Une solution pour avoir plus de feuille incrémenté avec l’alphabet
Cette magnifique macro fait bien le travail, à nous de l’exploiter, si on refait un second classeur avec les feuilles « modele » et « Lettre A » et la dernière feuille du premier classeur « Lettre GI » (pour moi) nous avons la suite des onglets .
Sur un second classeur j’ai fais tous les onglets à deux lettres et ensuite miracle la macro à poursuivi son incrémentation avec les onglets « Lettre AAA » ; « lettre AAB » donc à nous de nous organiser pour avoir ce que l’on veux .
Il suffi de faire plusieurs classeur que l’on peut ensuite regrouper sous un classeur avec des liaisons dynamiques.

Encore BRAVO monsieur Pierrot93 cette macro vous appartient vous en êtes le père, que ceux qui veuille s’en servir n’oublie pas
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Recopie modèle et le renomme

Bonjour LaVouivre, le fil

Une autre alternative, plutôt que d'appliquer la methode "copy" sur la feuille "modele", utiliser la methode "add".

En procedant de la sorte, j'arrive à créer plus de 1100 feuilles.

Pour ce faire, tu dupliques ta feuille "modele" et tu l'enregistres séparément en tant que classeur "xls" dans le même répertoire.

Modifies ensuite la fin du code comme suit :

Code:
End If
Sheets.Add After:=Sheets(Sheets.Count), Type:= _
    ThisWorkbook.Path & "\modele.xls"
Sheets(Sheets.Count).Name = p & x
End Sub

bon dimanche
@+
 
Dernière édition:

Statistiques des forums

Discussions
312 558
Messages
2 089 596
Membres
104 220
dernier inscrit
Fredericchau