Problème Doublons Onglet

Problème Doublons Onglet - VB/VBA/VBS - Programmation

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
 

Reply

Marsh Posté le 18-06-2009 à 08:49:42   

Reply

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.

Reply

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

Reply

Marsh Posté le 18-06-2009 à 12:07:29    

mmarle a écrit :

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


 
Justement, si c'est passionnant, raison de plus pour chercher par toi-même !  :p  
Allez, c'est pas trop dur, mais je te le donne quand même, histoire de te mettre le pied à l'étrier :

Code :
  1. dim i as integer
  2. For i = 1 To Worksheets.Count    ' passe en revue tous tes onglets. Si "base" et "test" sont les deux premiers, tu peux les enlever de la boucle avec i=3
  3.   If not Worksheets(i).Name = Cells(1, 1) Then  ' si le nom du i-ème onglet n'est pas égal à la cellule (1, 1), alors... Bien sûr, modifie les coordonnées de la cellule comme tu veux
  4.       ...   ' ton traitement
  5.   End If
  6. Next


 
Voila, y'a plus qu'à adapter.


---------------
If you think it could look good, then I guess it should
Reply

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

Reply

Marsh Posté le 23-06-2009 à 11:11:22    

Si tu nous disais où ça plante et quelle est l'erreur ça serait mieux.

Reply

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  

Reply

Marsh Posté le 23-06-2009 à 14:40:28    

mmarle a écrit :


Code :
  1. Sub Macro1()
  2. '
  3. ' Macro1 Macro
  4. ' Macro enregistrée le 09/06/2009 par Michaël
  5. '
  6. ' Touche de raccourci du clavier: Ctrl+b
  7. '
  8. Dim i As Integer
  9. Dim j As String
  10. Dim z As Integer
  11. Dim r As Integer
  12. 'Dernière cellule non vide colonne A
  13. z = Range("Test!A2" ).End(xlDown).Row - 1
  14. For i = 0 To z
  15.     j = Range("Test!A2" ).Offset(i, 0)
  16.         If Not j = Worksheets(i + 2).Name Then
  17.             Sheets("Base" ).Copy after:=Sheets(Sheets.Count)
  18.             Worksheets(Sheets.Count).Name = j
  19.         End If
  20. Next i
  21. Sheets("Test" ).Select
  22. End Sub




 
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 !  ;)  


---------------
If you think it could look good, then I guess it should
Reply

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

Reply

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! @+

Reply

Marsh Posté le 30-06-2009 à 11:38:24   

Reply

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  :jap:


---------------
If you think it could look good, then I guess it should
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed