Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1244 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème Doublons Onglet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème Doublons Onglet

n°1896489
mmarle
Posté le 18-06-2009 à 08:49:42  profilanswer
 

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
 

mood
Publicité
Posté le 18-06-2009 à 08:49:42  profilanswer
 

n°1896500
produvba
Posté le 18-06-2009 à 09:49:54  profilanswer
 

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.

n°1896548
mmarle
Posté le 18-06-2009 à 11:04:18  profilanswer
 

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

n°1896567
Turkleton
I don't quite understand you
Posté le 18-06-2009 à 12:07:29  profilanswer
 

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
n°1898017
mmarle
Posté le 23-06-2009 à 10:47:16  profilanswer
 

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

n°1898057
Deamon
Posté le 23-06-2009 à 11:11:22  profilanswer
 

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

n°1898066
mmarle
Posté le 23-06-2009 à 11:22:53  profilanswer
 

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  

n°1898186
Turkleton
I don't quite understand you
Posté le 23-06-2009 à 14:40:28  profilanswer
 

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
n°1900510
mmarle
Posté le 30-06-2009 à 11:35:12  profilanswer
 

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

n°1900512
mmarle
Posté le 30-06-2009 à 11:38:24  profilanswer
 

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

mood
Publicité
Posté le 30-06-2009 à 11:38:24  profilanswer
 

n°1900533
Turkleton
I don't quite understand you
Posté le 30-06-2009 à 12:13:28  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème Doublons Onglet

 

Sujets relatifs
probléme de numerotation des fichiers lors du downloadprobleme pour parser des dates [résolu]
Problème java.lang.NullPointerExceptionProblème d'importation PhpMyAdmin
Probleme menu déroulantproblème avec un update
[Resolu]Problème de compilation API MYSQLparseur php avec @implode, preg_split . Probleme pour adapter le code
[Oracle & PHP] boucle if dans while : problèmeProblème de code dans userform
Plus de sujets relatifs à : Problème Doublons Onglet


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR