Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
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.
(...)
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.
(...)
(...)
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.
(...)
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, Valuen'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
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.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.