Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Limite de l'incrémentation lors de la création d'un objet de manière répétitif ?

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 !

Roland_M

XLDnaute Barbatruc
Bien le bonsoir à tous,

j'ai un classeur dans lequel je crée, via vb, des menus et autres objets sur feuille.
certains sont effacés puis recréés.

prenons un exemple simple, création d'un commentaire sur cellule !
que je renomme ou pas ce commentaire, Excel garde en mémoire le numéro de ce nouveau commentaire
soit: Commentaire 1, Commentaire 2, Commentaire 3 . . .
j'ai fais un essai en boucle plusieurs fois créé/effacé quand j'ai arrêté, j'en étais au Commentaire 90000 !?

1' question: y a t'il une limite à ce compteur ?
2' question: ne va t'il pas y avoir un bug ou Excel va t'il repartir à zéro au bout d'un certain nombre ?
3' question: comment réinitialiser ce compteur ?

j'avais pensé, enregistrer et recharger le classeur, mais rien n'y fait le compteur continu à grimper !

si quelqu''un pouvait éclairer ma lanterne à ce sujet ce serait sympa !
merci d'avance pour les réponses !
 
Re : Limite de l'incrémentation lors de la création d'un objet de manière répétitif ?

Bonsoir Roland,

J'ai été confronté à ce problème pour une de mes appli qui créait des feuilles selon un modèle , afin de préparer des documents à imprimer. Le soucci effectivement était que lorsque je copiait plus de 53 fois la même feuille et pa tatra , erreur. Voici donc la parade employée. bon si y mieux je suis preneur , mais au moins ça permet de ne pas resté bloqué.

En 2 mots , l'on utilise un classeur brouillon

Code:
 'Compteur d'onglet construits 
 NbOnglet = Worksheets("Messages").Range("D3").Value + 1
  'Indice de dépassement de capacité
   Indice = Indice + 1
   'Vérifie si l'indice de dépassement est divisible par 50 ou premiere copie 
  If Indice = 1 Or NbOnglet Mod 50 = 0 Then
    ' si pas la premiere alors on ferme le classeur virtuel
    If Indice > 1 Then   Workbooks(NomTempo).Close False
      "Ajout d'un nouveau classeur
      Application.Workbooks.Add
       NomTempo = ActiveWorkbook.Name
      'copie les modeles dans le classeur virtuel
     ThisWorkbook.Sheets(NomFeuille).Copy before:=Workbooks(NomTempo).Sheets(1)
     ThisWorkbook.Sheets("Vide").Copy before:=Workbooks(NomTempo).Sheets(1)
  End If
 'copie enfin vers le vrai classeur
   Workbooks(NomTempo).Sheets(NomFeuille).Copy before:=ThisWorkbook.Sheets("Saisie")
 
Re : Limite de l'incrémentation lors de la création d'un objet de manière répétitif ?

re

Salut et merci à vous !

@camarchepas:
effectivement cette façon de faire permet de remettre tous les compteurs à zéro !
mais bon, c'est un peu contraignant !

@Bruno:
Commandbutton ou autres comme des commentaires
le principe est le même !
exemple avec ce Sub tout simple (on aura Commentaire 1000)
il suffit de retourner sur la feuille et cliquer sur le Commentaire pour le voir !

Public Sub CreatSupComment()
On Error Resume Next: Err.Clear
Adres$ = Cells(1, 1).Address
For I = 1 To 1000
Range(Adres$).Comment.Delete
Range(Adres$).AddComment
With Range(Adres$).Comment: .Text Text:="essai": .Visible = True: End With
Next
On Error GoTo 0: Err.Clear
End Sub
 
Re : Limite de l'incrémentation lors de la création d'un objet de manière répétitif ?

re:

dans le même ordre d'idée de notre ami "camarchepas"
j'ai trouvé une façon de faire très simple, manuellement !

le problème vient uniquement des objets divers créés/effacés/recréés sur les feuilles !

alors, je charge mon classeur et je clic sur nouveau classeur,
- je sélectionne toutes mes feuilles et je fais une copie de ces feuilles dans ce nouveau classeur
- je supprime toutes les feuilles de mon classeur source et j'enregistre mon classeur source.
- je vais dans le nouveau classeur et je refais copie des feuilles dans mon classeur source.
et j'enregistre mon classeur !

et voilà les compteurs sont à zéro ! j'ai vérifié !

merci encore à vous !

EDIT:
je vais voir pour me faire une macro qui automatiser tout ça.
 
Dernière édition:
Re : Limite de l'incrémentation lors de la création d'un objet de manière répétitif ?

re:

et voilà l'automatisme de sauvegarde des feuilles !
je précise qu'il s'agit d'un classeur de gestion compte banquaire,
que les feuilles sont nommées par année 2010 2011 2012 ...
et qu'il y a une fonction qui gère les feuilles valides !
Je confirme qu'il n'y a plus le problème en question tout repart à zéro !

Code:
Private Sub SaveEtReloadFeuil()
Application.ScreenUpdating = False: Application.EnableEvents = False
'load les noms des feuilles
NameMonClasseur$ = ThisWorkbook.Name
Workbooks(NameMonClasseur$).Activate
ReDim MesFeuil(0) As String: TotFeuil = 0
For I = 1 To Worksheets.Count
 If FSiCestUneFeuilAnnee(Sheets(I).Name) Then 'fonction qui test les feuil valides
    TotFeuil = TotFeuil + 1: ReDim Preserve MesFeuil(TotFeuil)
    MesFeuil(TotFeuil) = Sheets(I).Name
  End If
Next
'cré new.class et copi feuil > new.class
Workbooks.Add: NameNewClasseur$ = ActiveWorkbook.Name
TotF = Workbooks(NameNewClasseur$).Sheets.Count
For I = 1 To TotFeuil
  Workbooks(NameMonClasseur$).Sheets(MesFeuil(I)).Move After:=Workbooks(NameNewClasseur$).Sheets(TotF)
  TotF = TotF + 1
Next
'reactive et save mon class
Workbooks(NameMonClasseur$).Activate: Workbooks(NameMonClasseur$).Save
'recopi de new > mon.clas
TotF = Workbooks(NameMonClasseur$).Sheets.Count
For I = 1 To TotFeuil
  Workbooks(NameNewClasseur$).Sheets(MesFeuil(I)).Move After:=Workbooks(NameMonClasseur$).Sheets(TotF)
  TotF = TotF + 1
Next
Workbooks(NameNewClasseur$).Close SaveChanges:=False 'close class.tmp
Workbooks(NameMonClasseur$).Save 'resave mon.class
Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub
 
Re : Limite de l'incrémentation lors de la création d'un objet de manière répétitif ?

Merci Roland-M pour ce code

Mais alors .... qu'elle machine à gaz pour simplement réinitialiser le compteur d'objets !?

Ce que j'en dis 😉
 
Re : Limite de l'incrémentation lors de la création d'un objet de manière répétitif ?

Bonjour Bruno , Roland,

Je regarde de prêt ton amélio , mais je vois que pour le moment y'a pas mieux que passer par un classeur intermédiaire , c'est vrai que là , c'est dur dur , bon si un jour on trouve , l'on dirat , mais pourtant c'est si simple , mais bon en attendant selon permet de ne pas rester en panne au bord de la route. en tout cas , c'est bon à savoir que pour tous les objets , ça marche .

Merci
 
Re : Limite de l'incrémentation lors de la création d'un objet de manière répétitif ?

re:

voici la routine standard ! car la mienne m'est propre !
effectivement comme le dit Bruno ça pourrait "sauter" si on a pas des feuilles nommées correctement !?
car par exemple on peut avoir des Feuil1 Feuil2 qui dans le classeur de destination vont se retrouver en Feuil1(2) Feuil2(2) ...
et lorsqu'on va les reprendre le Tableau des Feuilles lui c'est "Feuil1" ! soit la feuille vide du classeur temp !
de plus il faut garder une feuille dans le classeur source ! on ne peut pas effectuer .Move sur toutes !
j'ai palié à tous ça dans cette routine qui fonctionne correctement puisque je l'ai testée !

Code:
'placer cette routine dans un module et TAPEZ F5 pour l'exécuter
'pour reinitialiser les compteurs d'objets excel
'une feuil tmp est créée puis effacée car il faut en garder une dans mon classeur !
'les feuil sont renommées pour éviter exp Feuil2 copiée qui se retouve en Feuil2(2)
Private Sub ReinitClassExportImportFeuil()
Application.DisplayAlerts = False: Application.EnableEvents = False
Application.ScreenUpdating = False
NameMonClasseur$ = ThisWorkbook.Name
Workbooks(NameMonClasseur$).Activate
'load noms des feuil
TotFeuil = Worksheets.Count
ReDim NomDesFeuilSource(1 To TotFeuil) As String, NomDesFeuilTemp(1 To TotFeuil) As String
For F = 1 To TotFeuil
  NomDesFeuilSource(F) = Sheets(F).Name: NomDesFeuilTemp(F) = "FeuilTMP" & F
Next
'ajoute une feuil tmp dans mon class
FeuilTmp$ = "FeuilTMP": Sheets.Add: ActiveSheet.Name = FeuilTmp$
'création class.tmp
Workbooks.Add: NameClassTemp$ = ActiveWorkbook.Name
'déplace feuil de mon.class NomDesFeuilSource(F) dans class.tmp en NomDesFeuilTemp(F)
TotF = Workbooks(NameClassTemp$).Sheets.Count
For F = 1 To TotFeuil
  Workbooks(NameMonClasseur$).Sheets(NomDesFeuilSource(F)).Move After:=Workbooks(NameClassTemp$).Sheets(TotF)
  TotF = TotF + 1: Workbooks(NameClassTemp$).Sheets(TotF).Name = NomDesFeuilTemp(F)
Next
'opération inverse du class.tmp NomDesFeuilTemp(F) dans mon.class NomDesFeuilSource(F)
Workbooks(NameMonClasseur$).Activate
TotF = Workbooks(NameMonClasseur$).Sheets.Count
For F = 1 To TotFeuil
  Workbooks(NameClassTemp$).Sheets(NomDesFeuilTemp(F)).Move After:=Workbooks(NameMonClasseur$).Sheets(TotF)
  TotF = TotF + 1: Workbooks(NameMonClasseur$).Sheets(TotF).Name = NomDesFeuilSource(F)
Next
Workbooks(NameClassTemp$).Close SaveChanges:=False 'close class temp
Workbooks(NameMonClasseur$).Sheets(FeuilTmp$).Delete 'delete feuil temp
Workbooks(NameMonClasseur$).Save 'save mon class
Application.DisplayAlerts = True: Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
 
Dernière édition:
Re : Limite de l'incrémentation lors de la création d'un objet de manière répétitif ?

re:

vu que ça vous interresse . . .
je me suis penché un peu plus sur ma routine perso(que vous pouvez adapter)
que j'ai simplifié et qui est encore plus fiable !
donc il s'agit de certaines feuilles dans le classeur, ici des feuilles nommées avec années 2010 2011 ...
j'ai donc une fonction qui confirme si cette feuille est ok
fonction que vous pouvez remplacer par la votre. ici If FSiCestUneFeuilAnnee(Sheets(I).Name) Then

Code:
'je mets en tableau toutes les feuilles concernées
'ce qui permet de copier tout d'un bloc
'et qui crée un class avec uniquement mes feuilles
'je delete toutes mes feuilles d'un bloc
'le fait de re-déplaçer toutes les feuil ce classeur n'existera plus
'Application.DisplayAlerts = False Excel n'affichera pas de message!

Public Sub ReinitClassExportImportFeuil()
Application.DisplayAlerts = False: Application.EnableEvents = False: Application.ScreenUpdating = False
ThisWorkbook.Activate: NameMonClasseur$ = ThisWorkbook.Name
'load les noms des feuil concernées(ici avec test perso)
ReDim MesFeuil(1 To 1) As String: TotF = 0
For F = 1 To Worksheets.Count
 If FSiCestUneFeuilAnnee(Sheets(F).Name) Then
   If TotF > 0 Then ReDim Preserve MesFeuil(1 To TotF + 1)
   TotF = TotF + 1: MesFeuil(TotF) = Sheets(F).Name
 End If
Next
If TotF = 0 Then Exit Sub
'copy le tablo des feuil
Sheets(MesFeuil()).Copy: NameNewClasseur$ = ActiveWorkbook.Name: DoEvents
'delete les feuil de mon.class
Workbooks(NameMonClasseur$).Activate: Sheets(MesFeuil()).Delete: DoEvents
'récup les feuil vers mon.class et save
Workbooks(NameNewClasseur$).Sheets(MesFeuil()).Move After:=Workbooks(NameMonClasseur$).Sheets(Sheets.Count)
Workbooks(NameMonClasseur$).Save
Application.DisplayAlerts = True: Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub
 
Dernière édition:
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…