Ajout Onglet VBA : problème 31 caractères

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.
 

Gorfael

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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:

ROGER2327

XLDnaute Barbatruc
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
 

Poussin

XLDnaute Occasionnel
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 ?
 

ROGER2327

XLDnaute Barbatruc
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
 

Gorfael

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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+
 

Statistiques des forums

Discussions
312 316
Messages
2 087 177
Membres
103 491
dernier inscrit
bilg1