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

Création onglet vba à partir d'une liste

  • Initiateur de la discussion Initiateur de la discussion Nashou
  • Date de début Date de début

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 !

N

Nashou

Guest
Bonjour à tous,

Mon projet est le suivant :
Je souhaite créer des onglets en fonction d'une liste (bon ça je sais faire)
Exemple qui fonctionne :

Mais si une valeur de la colonne A est en double, je ne veux pas qu'il ajoute l'onglet, je veux qu'il passe au suivant.
Bref, je n'arrive pas à intégrer ça dans mon code ...

Si vous aviez le petit bout de code qu'il me manque ... ca serait un plaisir 🙂
Merci !
 

Pièces jointes

Re : Création onglet vba à partir d'une liste

Bonjour à Camarchepas et Roger2327,

Je joins mon fichier.

Pour ce quiconcerne le code, y'en a pas vraiment, je ne sais pas d'où partir du coup j'ai essayé en utilisant le code donné par pierrejean celui du post datant du 01/12/2010 à 13h22.
Mais ça ne fonctionne pas.

Une question aussi, c'est quoi la différence entre Sub et Private Sub ?

Dans le fichier que je joins, ce que je veux faire c'est créer des onglets à partir de ce qui est contenu dans les celulles de l'onglet "Données", dans les cellules C2:Cx.

Merci.
 

Pièces jointes

Re : Création onglet vba à partir d'une liste

Re...

(...)
Je joins mon fichier.
(...)
Bonne idée !

(...)
Pour ce quiconcerne le code, y'en a pas vraiment, je ne sais pas d'où partir du coup j'ai essayé en utilisant le code donné par pierrejean celui du post datant du 01/12/2010 à 13h22.
Mais ça ne fonctionne pas.
(...)
Il s'agit de mon code, corrigé par pierrejean (bonjour).
Ça ne fonctionne pas parce que ce n'est pas écrit pour votre fichier.

(...)
Une question aussi, c'est quoi la différence entre Sub et Private Sub ?
(...)
Voyez d'abord l'aide fournie avec VBA (regardez la rubrique Sub). Si c'est insuffisant, revenez !

(...)
Dans le fichier que je joins, ce que je veux faire c'est créer des onglets à partir de ce qui est contenu dans les celulles de l'onglet "Données", dans les cellules C2:Cx.
(...)
Voyez le classeur joint. En cas de problème, n'hésitez pas à revenir.​


Bonne journée.


ℝOGER2327
#7683


Samedi 14 As 142 (Saint Pierre Bonnard, peintre des Phynances - fête Suprême Quarte)
26 Brumaire An CCXXIII, 5,0494h - pistache
2014-W46-7T12:07:07Z
 

Pièces jointes

Re : Création onglet vba à partir d'une liste

Suite...


J'ai répondu trop rapidement et le code proposé est incorrect.
Pour tenir compte des cellules C2:Cx, il faut écrire​
Code:
  Colonne = "C" 'ou 3
  For z = 2 To Me.Cells(Me.Rows.Count, Colonne).End(xlUp).Row
et non​
Code:
  Colonne = "C" 'ou 3
  For z = 1 To Me.Cells(Me.Rows.Count, Colonne).End(xlUp).Row

D'autre part, malgré une rumeur lancée et entretenue par une flopée de "professionnels" autoproclamés, Value n'est pas la propriété par défaut d'un objet Range.
Il se trouve que VisualBasic est très tolérant et qu'il est parfois capable de deviner une propriété omise.
Par exemple :​
VB:
Sub prout()
Dim Plage As Variant
1:  Plage = Range("A1")
2:  Set Plage = Range("A1")
End Sub
À la ligne 1:, l'interpréteur devine que le programmeur veut récupérer la valeur de la cellule A1.
À la ligne 2:, il devine (car il y est fermement invité par l'instruction Set) qu'il faut attribuer une référence d'objet à la variable Plage. Ce qui prouve que Range("A1") sans propriété n'est pas nécessairement vu comme Range("A1").Value.​


Conclusion : Un objet Range n'a pas de propriété par défaut.


Pour être précis, on devrait écrire :​
Code:
Sub prout()
Dim Plage As Variant
1:  Plage = Range("A1").Value
2:  Set Plage = Range("A1").Cells
End Sub

Lorsqu'on sait ce que l'on fait, on peut bien sûr profiter du laxisme de VB et se contenter de la première écriture. Mais il faut en être conscient et ne pas croire les balivernes des "professionnels" évoqués plus haut, car, dans un module de feuille, on écrirait des inepties du genre :​
Code:
Sub prout()
1:  [A1] = "toto"
2:  Sheets.Add After:=Sheets(Sheets.Count)
3:  ActiveSheet.Name = Me.Cells(1, 1)
4:  Sheets(Me.Cells(1, 1)).Delete
End Sub
En supposant qu'il n'existe pas d'onglet nommé toto dans le classeur, pas de problème jusqu'à la ligne 4:.
À la ligne 3:, Me.Cells(1, 1) est interprété comme Me.Cells(1, 1).Value. Tout va bien...
Mais pas à la ligne 4:. On obtient une erreur d'exécution 13 commentée par Incompatibilité de type. L'interpréteur croit deviner que la propriété omise n'est pas Value mais, probablement, Cells...
Tout rentre dans l'ordre si on écrit :​
Code:
4:  Sheets(Me.Cells(1, 1).Value).Delete
Pour être propre, on écrit prudemment :​
Code:
Sub prout()
1:  [A1].Value = "toto"
2:  Sheets.Add After:=Sheets(Sheets.Count)
3:  ActiveSheet.Name = Me.Cells(1, 1).Value
4:  Sheets(Me.Cells(1, 1).Value).Delete
End Sub
ce qui dispense l'interpréteur d'imaginer des conneries et de se prendre les pieds dans le tapis.

Finalement, un code correct (parmi d'autres) pour la feuille Feuil1 (onglet "Données") du classeur Boîtes de dérivation1 peut s'écrire :​
Code:
Sub CommandButton4_Click()
Dim z&
Const Colonne$ = "C"
  For z = 2 To Me.Cells(Me.Rows.Count, Colonne).End(xlUp).Row
    If Not IsEmpty(Me.Cells(z, Colonne).Value) Then
      Sheets.Add After:=Sheets(Sheets.Count)
      On Error Resume Next
      ActiveSheet.Name = Me.Cells(z, Colonne).Value
      If Err.Number <> 0 Then
        Application.DisplayAlerts = False
        ActiveSheet.Delete
        Application.DisplayAlerts = True
      End If
      On Error GoTo 0
    End If
  Next z
End Sub

Pour supprimer les feuilles créées :​
Code:
Sub Effacer()
Dim z&
Const Colonne$ = "C"
  For z = 2 To Me.Cells(Me.Rows.Count, Colonne).End(xlUp).Row
    If Not IsEmpty(Me.Cells(z, Colonne).Value) Then
      Application.DisplayAlerts = False
      On Error Resume Next
      Sheets(Me.Cells(z, Colonne).Value).Delete
      On Error GoTo 0
      Application.DisplayAlerts = True
    End If
  Next z
End Sub
Attention ! C'est sans retour !


Bonne soirée.


ℝOGER2327
#7684


Samedi 14 As 142 (Saint Pierre Bonnard, peintre des Phynances - fête Suprême Quarte)
26 Brumaire An CCXXIII, 7,1965h - pistache
2014-W46-7T17:16:18Z
 
Dernière édition:
Re : Création onglet vba à partir d'une liste

Re,

Merci pour les infos Roger2327, ça marche nickel, merci pour les différentes infos aussi.
Je vais analyser le code pour voir si j'arrive à comprendre, j'ai essayé de chercher des infos sur les macros hier mais j'ai dû mal chercher parce que j'avais trouvé des tutos que sur les déclarations de variable, je vais aller fouiller dans la partie VBA.

Merci beaucoup !
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
839
Réponses
2
Affichages
496
Réponses
15
Affichages
657
Réponses
8
Affichages
749
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…