Ajout Onglet VBA : problème 31 caractères

  • Initiateur de la discussion Initiateur de la discussion Poussin
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Poussin

XLDnaute Occasionnel
Bonjour à tous voici mon code

Code:
Sub creerFeuilles()
Dim curCell As Range
Set curCell = ThisWorkbook.Sheets("Feuil4").Range("F2")
While curCell.Value <> vbNullString
    ThisWorkbook.Sheets.Add After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = curCell.Value, 31
    ThisWorkbook.Sheets("Feuil4").Hyperlinks.Add Anchor:=curCell.Offset(0, 11), Address:="", SubAddress:= _
        "'" & ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name & "'!A1", TextToDisplay:="Acces Feuille Société"
    Set curCell = curCell.Offset(1, 0)
Wend
ThisWorkbook.Sheets("Feuil4").Select
End Sub
Le problème est que lorsque le nom de la colonne est supérieur à 31 caractères. La macro refuse de créer le nouvel onglet. Je voudrais donc savoir comment faire. Je vous remercie par avance pour votre aide.
 
Re : Ajout Onglet VBA : problème 31 caractères

Salut Poussin et le forum
Le problème est que lorsque le nom de la colonne est supérieur à 31 caractères. La macro refuse de créer le nouvel onglet.
Manuellement c'est la même chose : tu n'as que 31 caractères pour un nom d'onglet !
Tu peux réduire les noms de ta colonne F, soit manuellement, soit utiliser left() ou right() dans ta macro, mais attention aux doublons.
A+
 
Re : Ajout Onglet VBA : problème 31 caractères

Bonjour Poussin,

Le problème est que lorsque le nom de la colonne est supérieur à 31 caractères.

Il n'y a pas que ça... Cette instruction n'a pas de sens et crée donc une erreur de compilation :

Code:
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = curCell.Value, 31
Par contre ceci a un sens et limite le nombre de caractères à 31 :

Code:
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Left(curCell.Value, 31)
Edit : salut Gorfael, Roger

A+
 
Dernière édition:
Re : Ajout Onglet VBA : problème 31 caractères

Bonjour Poussin

Je crains qu'il soit impossible qu'un onglet ait un nom de plus de trente-et-un caractères.

ROGER2327
#5355


Lundi 2 Gidouille 138 (Saint Lucullus, amateur(Bloosday) - fête Suprême Quarte)
28 Prairial An CCXIX, 6,0684h - thym
2011-W24-4T14:33:51Z
 
Re : Ajout Onglet VBA : problème 31 caractères

Merci pour vos réponses, cela fonctionne très bien avec left. Pour le problème de doublons par contre, cela pose réellement un problème si les 31 premiers caractères sont identiques non ?
 
Re : Ajout Onglet VBA : problème 31 caractères

Re…
Merci pour vos réponses, cela fonctionne très bien avec left. Pour le problème de doublons par contre, cela pose réellement un problème si les 31 premiers caractères sont identiques non ?
À coup sûr…​
ROGER2327
#5356


Lundi 2 Gidouille 138 (Saint Lucullus, amateur(Bloosday) - fête Suprême Quarte)
28 Prairial An CCXIX, 6,1312h - thym
2011-W24-4T14:42:53Z
 
Re : Ajout Onglet VBA : problème 31 caractères

Salut Poussin et le forum
Tu fais comme windows, avec les 8 caractères : tu codes sur 30 et tu ajoutes un séparateur et une lettre. Il suffit de faire une boucle en testant si le nom existe et en incrémentant la lettres si besoin est. S'il y a une possibilité de plus de 26 onglets, on code sur 2 lettres.
A+
 
Re : Ajout Onglet VBA : problème 31 caractères

Re,

Pour résoudre le problème des doublons, on peut mettre un indice entre parenthèses (1) ou (2) ou (3) etc... après le texte.

Le texte doit être limité à 27 caractères si l'on veut pouvoir utiliser 2 chiffres :

Code:
Sub creerFeuilles()
Dim curCell As Range, maxi As Byte, i As Byte
Set curCell = ThisWorkbook.Sheets("Feuil4").Range("F2")
While curCell.Value <> vbNullString
    ThisWorkbook.Sheets.Add After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    maxi = 31
    i = 0
1   On Error Resume Next
    ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name _
      = Left(curCell.Value, maxi) & IIf(maxi = 31, "", "(" & i & ")")
    If Err Then
      maxi = 27 'permet un indice i de 1 à 99
      i = i + 1
      GoTo 1
    End If
    ThisWorkbook.Sheets("Feuil4").Hyperlinks.Add Anchor:=curCell.Offset(0, 11), Address:="", SubAddress:= _
        "'" & ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name & "'!A1", TextToDisplay:="Acces Feuille Société"
    Set curCell = curCell.Offset(1, 0)
Wend
ThisWorkbook.Sheets("Feuil4").Select
End Sub
A+
 
Re : Ajout Onglet VBA : problème 31 caractères

Re,

Au diable l'avarice, voici pour des indices illimités :

Code:
Sub creerFeuilles()
Dim curCell As Range, maxi As Byte, i As Byte
Set curCell = ThisWorkbook.Sheets("Feuil4").Range("F2")
While curCell.Value <> vbNullString
    ThisWorkbook.Sheets.Add After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    maxi = 31
    i = 0
1   On Error Resume Next
    ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name _
      = Left(curCell.Value, maxi) & IIf(maxi = 31, "", "(" & i & ")")
    If Err Then
      i = i + 1
      maxi = 31 - Len(i) - 2 'permet n'importe quel indice
      GoTo 1
    End If
    ThisWorkbook.Sheets("Feuil4").Hyperlinks.Add Anchor:=curCell.Offset(0, 11), Address:="", SubAddress:= _
        "'" & ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name & "'!A1", TextToDisplay:="Acces Feuille Société"
    Set curCell = curCell.Offset(1, 0)
Wend
ThisWorkbook.Sheets("Feuil4").Select
End Sub
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
1 K
Réponses
3
Affichages
942
Réponses
6
Affichages
2 K
Retour