Généraliser une macro

Fermé
ok22 Messages postés 3 Date d'inscription mardi 18 juin 2013 Statut Membre Dernière intervention 25 juin 2013 - 18 juin 2013 à 19:41
ok22 Messages postés 3 Date d'inscription mardi 18 juin 2013 Statut Membre Dernière intervention 25 juin 2013 - 25 juin 2013 à 22:47
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
A voir également:

4 réponses

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
ok22 Messages postés 3 Date d'inscription mardi 18 juin 2013 Statut Membre Dernière intervention 25 juin 2013
24 juin 2013 à 18:19
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
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
ok22 Messages postés 3 Date d'inscription mardi 18 juin 2013 Statut Membre Dernière intervention 25 juin 2013
25 juin 2013 à 22:47
merci encore boubou pour la solution donnée et pour avoir consacré du temps à répondre à ma question.
a +
0