Généraliser une macro

Bonjour,
je suis novice en vba et je ne parviens pas à réaliser une macro.
Voici ma macro mais elle ne fonctionne que sur les 2 premières lignes et je voudrais la généraliser et en faire une boucle sur un nombre infini de lignes :

Sub Macro2()

Dim facture As String
facture = InputBox("Numéro de facture", "Facture")
Range("c5") = facture

Dim dat As String
dat = InputBox("Date de facture", "Facture")
Range("d5") = dat

ActiveSheet.Buttons.Add(390, 60, 64, 14).Select
Selection.Characters.Text = facture
With Selection.Font
.Name = "Lucida Grande"
.FontStyle = "Normal"
.Size = 12
.StrikeThrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With

While MsgBox("Voulez-vous vérifier une autre facture?", vbYesNo) = vbYes

Dim facture2 As String
facture2 = InputBox("Numéro de facture", "Facture")
Range("c6") = facture2

Dim dat2 As String
dat2 = InputBox("Date de facture", "Facture")
Range("d6") = dat2

ActiveSheet.Buttons.Add(390, 75, 65, 14).Select
Selection.Characters.Text = facture2
With Selection.Font
.Name = "Lucida Grande"
.FontStyle = "Normal"
.Size = 12
.StrikeThrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic

End With

Wend

End Sub

Merci d'avance pour vos réponses

4 réponses

  1. merci encore boubou pour la solution donnée et pour avoir consacré du temps à répondre à ma question.
    a +
    1. Bonjour,

      Les quatre chiffres entre parenthèses sont les paramètre fourni au bouton.
      J'ai pas eu le temps de tester, mais c'est La position horizontale, verticale, longueur et largeur.

      Tu pourrais remplacer
      UneLigne = 1

      Range("c" & UneLigne) = facture
      Range("d" & UneLigne) = dat

      While MsgBox("Voulez-vous vérifier une autre facture?", vbYesNo) = vbYes
      UneLigne = UneLigne + 1
      Range("c" & UneLigne + 5) = facture
      Range("d" & UneLigne + 5) = dat

      ActiveSheet.Buttons.Add(390, 60*UneLigne, 64, 14).Select

      Si le 390 est la position horizontale, on aurait un bouton avec un interval régulier de 60. Si l'interval ne te convient pas, tu peux toujours mettre une longueur fixe avant l'interval (390, + 40*UneLigne + 20, 64, 14)

      Je n'ai pas eu le temps de tester, mais j'ai bon espoir que ca t'aide.
      1. Bonjour, désolé pour le retard
        merci boubou pour la boucle, ça marche!
        Par contre serait-il possible que les boutons créés à chaque ligne puissent eux aussi aller à la ligne à chaque fois? Car pour l'instant même si j'insère dans la boucle :

        ActiveSheet.Buttons.Add(390, 60, 64, 14).Select
        Selection.Characters.Text = facture
        With Selection.Font
        .Name = "Lucida Grande"
        .FontStyle = "Normal"
        .Size = 12
        .StrikeThrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        End With

        ils s'empilent au même endroit, ce qui est normal.
        Désolé d'en demander encore^^
        1. Tu peux mettre une variable dans ta fonction range

          Exemple

          DIM UneLigne as integer
          Dim facture As String
          Dim dat As String

          UneLigne = 5

          Range("c" & UneLigne) = facture
          Range("d" & UneLigne) = dat

          While MsgBox("Voulez-vous vérifier une autre facture?", vbYesNo) = vbYes
          UneLigne = UneLigne + 1
          Range("c" & UneLigne) = facture
          Range("d" & UneLigne) = dat
          Wend

          J'ai conservé ta mise en forme pour que tu puisse rapidement l'exécuter.