Généraliser une macro

ok22 Messages postés 4 Statut Membre -  
ok22 Messages postés 4 Statut Membre -
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. boubou
     
    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.
    1
  2. ok22 Messages postés 4 Statut Membre
     
    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^^
    0
  3. Boubou
     
    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.
    0
  4. ok22 Messages postés 4 Statut Membre
     
    merci encore boubou pour la solution donnée et pour avoir consacré du temps à répondre à ma question.
    a +
    0