Création d'un bouton en boucle

Résolu/Fermé
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 - 27 oct. 2015 à 15:39
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 - 28 oct. 2015 à 14:55
Bonjour,

Je débute en VBA et je suis bloqué sur un petit problème :

J'aimerais faire un code pour dire " Tant que la case D1, D2, D3 ... n'est PAS vide, créer un bouton" .
Je veux placer ces boutons à côté des cases D qui ne sont pas vide.
Normalement ce code, je pense aurait du le faire mais j'ai du commettre une erreur car cela ne fonctionne pas.

Private Sub CommandButton3_Click()
Do While Range("D").Value <> " "
Sub Macro()
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=370.5, Top:=114.75, Width:=72, Height:= _
24).Select
Selection.ShapeRange.IncrementLeft -39#
Selection.ShapeRange.IncrementTop -11.25
End Sub

End Sub


Merci pour votre aide.
A voir également:

3 réponses

diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
27 oct. 2015 à 17:04
Test avec ceci Ça peut marcher

ThisWorkbook.Activesheet("Feuil1").Range(D1;D900)
i=1
do While i<900
if thisWorkbook.activesheet("Feuil1").Cells(i;4).Value <> ""
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=370.5, Top:=114.75, Width:=72, Height:= _
24).Select
Selection.ShapeRange.IncrementLeft -39#
Selection.ShapeRange.IncrementTop -11.25
i=i+1
Else
End Sub
End If
Loop

End Sub
1
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
Modifié par siamens_duj le 28/10/2015 à 09:20
Cette ligne se met en jaune
ThisWorkbook.ActiveSheet("Feuil1").Range ("D1:D900")

Sauriez vous pourquoi ?
0
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844 > siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019
28 oct. 2015 à 09:45
Il te dit quoi au niveau de l'erreur? Problème de syntaxe?
0
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
28 oct. 2015 à 09:48
Il me met un code d'erreur et me dit "Propriété ou méthode non gérée"
0
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
Modifié par diablo13800 le 28/10/2015 à 12:02
Ok Celle-ci fonctionne correctement , a toi d'adapter Suivant le décalage Verticale que tu veux

Sub macroBouton()


i = 1
BLeft = 370.5
BTop = 114.75
BWidth = 72
BHeight = 24
Do While i < 900

If Cells(i, 4).Value <> "" Then

ActiveSheet.Buttons.Add(BLeft, BTop, BWidth, BHeight).Select
BTop = BTop + 11.25
i = i + 1
Else
MsgBox ("On est a la fin la")
GoTo Fin:
End If
Loop
Fin:
End Sub


N'oublie pas de rajouter un : Selection.OnAction = "Nom_De_La_Macro_A_Affecter" Si tu veux définir une action au clic des bouton:) et a supprimer le MsgBox qui indique la fin de la macro
0
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
28 oct. 2015 à 13:41
Super ça fonctionne merci beaucoup !!!
0
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
Modifié par diablo13800 le 27/10/2015 à 15:56
Bonjour,

Je pense que tu dois mettre ta boucle dans la macro et non à l'extérieur

Private Sub CommandButton3_Click()

Do While Range("D").Value <> " "

ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=370.5, Top:=114.75, Width:=72, Height:= _
24).Select
Selection.ShapeRange.IncrementLeft -39#
Selection.ShapeRange.IncrementTop -11.25

Loop

End Sub


Essaie comme ça ( n'oublie pas le ctrl+ pause dans le cas ou ça boucle a l'infinie )
0
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
27 oct. 2015 à 16:00
Merci pout cette réponse rapide !

comme ça ? :

Private Sub CommandButton3_Click()
Do While Range("D").Value <> " "
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=370.5, Top:=114.75, Width:=72, Height:= _
24).Select
Selection.ShapeRange.IncrementLeft -39#
Selection.ShapeRange.IncrementTop -11.25

End Sub


Là il me dit "Do sans boucle"
0
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
27 oct. 2015 à 16:07
Oublie pas le "Loop" avant ton "End sub" pour dire quand ta boucle "Do While" s'arrête :)
0
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
27 oct. 2015 à 16:09
Oui après réflexion je me suis bien dit qu'il me manquait quelque chose ! ^^
Apparemment il y aurait une erreur dans :
Do While Range("D").Value <> " "

car il me le surligne en jaune.
Sauriez vous me dire si ma syntaxe est bonne ?

Encore merci.
0