Problème Doublons Onglet - VB/VBA/VBS - Programmation
Marsh Posté le 18-06-2009 à 09:49:54
Il faut juste tester avant de copier que l'onglet existe déjà sous ce nom là (tester si worksheet(name) existe ou pas) et si cela existe passer à la ligne suivante.
Marsh Posté le 18-06-2009 à 11:04:18
Merci pour cette suggestion!
J'y avais pensé, mais malheureusement je bute sur la programmation.
Je suis débutant en VBA, mais c'est tellement passionant.
Avez-vous une idée de test?
Merci
Marsh Posté le 18-06-2009 à 12:07:29
mmarle a écrit : Merci pour cette suggestion! |
Justement, si c'est passionnant, raison de plus pour chercher par toi-même !
Allez, c'est pas trop dur, mais je te le donne quand même, histoire de te mettre le pied à l'étrier :
Code :
|
Voila, y'a plus qu'à adapter.
Marsh Posté le 23-06-2009 à 10:47:16
Bonjour,
Après bien des essais, je reste toujours bloqué bien que divers renseignements aient été donné.
Voici mon code adapté d'après les infos de TURKLETON (enfin ce que j'ai pu essayer d'écrire)
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 09/06/2009 par Michaël
'
' Touche de raccourci du clavier: Ctrl+b
'
Dim i As Integer
Dim j As String
Dim z As Integer
Dim r As Integer
'Dernière cellule non vide colonne A
z = Range("Test!A2" ).End(xlDown).Row - 1
For i = 0 To z
j = Range("Test!A2" ).Offset(i, 0)
If Not j = Worksheets(i + 2).Name Then
Sheets("Base" ).Copy after:=Sheets(Sheets.Count)
Worksheets(Sheets.Count).Name = j
End If
Next i
Sheets("Test" ).Select
End Sub
Mais ça plante toujours!
Pas évident la boucle dans une boucle!
Aider un pauvre mouton s'égarant du troupeau. Merci
Marsh Posté le 23-06-2009 à 11:11:22
Si tu nous disais où ça plante et quelle est l'erreur ça serait mieux.
Marsh Posté le 23-06-2009 à 11:22:53
Oui, pardon
J'ai toujours le problème de doublon
Je récapitule un peu. En fait je souhaite executer une macro qui permet de créer des onglets en copiant une feuille "type" appelée "Base" dans mon projet, puis d'attribuer à chaque onglet la valeur de la Cellule "A1" à "An" d'une seconde feuille, ici la feuille s'appelle "Test". Je souhaite également, une fois l'application éxecutée (c'est à dire les onglets crées), que l'on puisse insérer d'autres
valeurs dans la feuille "Test" et pouvoir relancer l'application et ainsi ajouter le nouvel onglet correspondant à cette nouvelle valeur.
Les erreurs rencontrées sont:
- erreur d'execution
- copie de la feuille Test en doublon
Ai-je été clair?
Merci
Marsh Posté le 23-06-2009 à 14:40:28
mmarle a écrit :
|
Heu, non, effectivement, faut faire une boucle dans la boucle. Là, ce que tu fais c'est juste comparer une cellule sur la ligne i avec le nom de l'onglet numéro i+2...
Il faut que tu fasses une première boucle sur tes cellules de ton onglet "Test", comme tu as fait ici (quoique je te conseillerais d'utiliser "Cells(i,1)" plutôt que "Range("Test!A2" ).Offset(i, 0)", tu te repèreras plus facilement), et à l'intérieur, une autre boucle pour parcourir le nom de tes onglets. Tu fais un test à chaque fois pour voir si ça correspond ou pas, et tu effectues les actions en conséquence.
Tu es sur la bonne voie, continue !
Marsh Posté le 30-06-2009 à 11:35:12
Ca y est j'ai trouvé! Et ça marche à merveille.
Je vous donne le lien pour télécharger le fichier, la macro se déclenche à l'aide de ctrl+b
après quoi vous pouvez- insérer d'autres va
Marsh Posté le 30-06-2009 à 11:38:24
Pardon mauvaise manip'
Je continues donc: vous pouvez insérer d'autres valeurs dans la feuille Test et relancer la macro
http://www.megaupload.com/?d=LN52EIIE
Voici le code:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 09/06/2009 par Michaël
'
' Touche de raccourci du clavier: Ctrl+b
'
Dim i As Integer
Dim z As Integer
Dim r As Integer
Dim j As String
Dim l As String
'Dernière cellule non vide colonne A
z = Range("Test!A1" ).End(xlDown).Row - 1
'Etendu des cellules
For i = 1 To z
'Incrémentation Cellules
j = Range("Test!A1" ).Offset(i, 0)
'Etendu des Feuilles
For r = 1 To Sheets.Count
l = Sheets(r).Name
If j <> l Then
MsgBox "Cellule= " & j & Chr(10) & "Feuille= " & l
Else
MsgBox "Feuille existante!"
GoTo fini
End If
Next r
Sheets("Base" ).Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = j
fini:
Next i
Sheets("Test" ).Select
End Sub
Merci de votre aide! @+
Marsh Posté le 30-06-2009 à 12:13:28
Pas mal du tout ça !
Bon, y'a bien un petit "Goto" disgracieux mais on va pas chipoter. Tu vois, une boucle dans une autre, c'est pas la mort non plus.
Félicitations
Marsh Posté le 18-06-2009 à 08:49:42
Bonjour,
Je souhaite créer automatiquement autant d'onglet qu'il y a de cellules remplies dans la colonne "A" d'une Feuille, et d'attribuer le nom de ces cellules aux onglets (jusque là ça va).
Le problème surgit lorsque l'on renseigne une cellule supplémentaire dans cette feuille et que l'on relance la procédure --> Erreur d'execution
Hé oui normal, le code cherche à recréer ces onglets mais il ne peut y avoir de "Doublons". Comment peut-on y remédier?
Il faut d'abord créer un fichier avec 2 feuilles
- L'une nommée "Base": feuille devant être copiée et renommée automatiquement en fonction du nombre de cellule de la feuille "Test"
- L'autre nommée "Test": feuille dans laquelle il suffit de remplir les case de "A1" à "An", création de n onglet
Voici le code:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 09/06/2009 par Michaël
'
' Touche de raccourci du clavier: Ctrl+b
'
Dim i As Integer
Dim j As String
Dim z As Integer
'Dernière cellule non vide colonne A
z = Range("Test!A1" ).End(xlDown).Row - 1
For i = 0 To z
Sheets("Base" ).Copy after:=Sheets(Sheets.Count)
'Attribue le nom de la cellule à l'onglet
ActiveSheet.Name = Range("Test!A1" ).Offset(i, 0)
Next i
End Sub
Merci de vos réponses