Création d'un bouton en boucle

Résolu
siamens_duj Messages postés 212 Statut Membre -  
diablo13800 Messages postés 3469 Date d'inscription   Statut Membre Dernière intervention   -
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.

3 réponses

  1. diablo13800 Messages postés 3469 Date d'inscription   Statut Membre Dernière intervention   1 872
     
    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
    1. siamens_duj Messages postés 212 Statut Membre 7
       
      Cette ligne se met en jaune
      ThisWorkbook.ActiveSheet("Feuil1").Range ("D1:D900")

      Sauriez vous pourquoi ?
      0
    2. diablo13800 Messages postés 3469 Date d'inscription   Statut Membre Dernière intervention   1 872 > siamens_duj Messages postés 212 Statut Membre
       
      Il te dit quoi au niveau de l'erreur? Problème de syntaxe?
      0
    3. siamens_duj Messages postés 212 Statut Membre 7
       
      Il me met un code d'erreur et me dit "Propriété ou méthode non gérée"
      0
    4. diablo13800 Messages postés 3469 Date d'inscription   Statut Membre Dernière intervention   1 872
       
      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
    5. siamens_duj Messages postés 212 Statut Membre 7
       
      Super ça fonctionne merci beaucoup !!!
      0
  2. diablo13800 Messages postés 3469 Date d'inscription   Statut Membre Dernière intervention   1 872
     
    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
  3. siamens_duj Messages postés 212 Statut Membre 7
     
    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
    1. diablo13800 Messages postés 3469 Date d'inscription   Statut Membre Dernière intervention   1 872
       
      Oublie pas le "Loop" avant ton "End sub" pour dire quand ta boucle "Do While" s'arrête :)
      0
    2. siamens_duj Messages postés 212 Statut Membre 7
       
      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