Optimiser mon code afin d'éviter des répétitions
Bonjour à tous!
Voilà j'ai réalisé un code qui fonctionne, mais le problème c'est qu'il est long... et je pense qu'il serait possible de pouvoir l'optimiser.
Il y a pas mal de tâches récurrentes et de similitudes mais je ne vois pas trop comment optimiser tout ça. J'avais pensé à une fonction mais ce n'est pas approprié car la fonction renvoie une valeur, j'ai pensé à une boucle for mais je ne vois pas comment l'intégrer.
Avez-vous une idée pour pouvoir dégraisser ce code?
Merci beaucoup!!
Nat
Sub prix()
Dim price1 As Double, price2 As Double, price3 As Double, price4 As Double, price5 As Double
Dim nb502
Dim bs1 As String, bs2 As String, bs3 As String, bs4 As String, bs5 As String
Dim qte1 As String, qte2 As String, qte3 As String, qte4 As String, qte5 As String
Dim isin1 As String, isin2 As String, isin3 As String, isin4 As String, isin5 As String
Sheets("502").Select
nb502 = Range("A1048576").End(xlUp).Row 'Procédure différente à lancer en fonction du nombre de lignes dans la feuille 502
'ici chaque valeur est stockée sur la fauille 502, on utilise ces informations pour personnaliser les boîtes de dialogue
bs1 = Range("J5")
bs2 = Range("J6")
bs3 = Range("J7")
bs4 = Range("J8")
bs5 = Range("J9")
qte1 = Range("K5")
qte2 = Range("K6")
qte3 = Range("K7")
qte4 = Range("K8")
qte5 = Range("K9")
isin1 = Range("L5")
isin2 = Range("L6")
isin3 = Range("L7")
isin4 = Range("L8")
isin5 = Range("L9")
If nb502 = 37 Then 'S'il y a 37 lignes dans la feuille 502, On demande d'insérer un prix que l'on va stocker en I5
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p1) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price1 = p1
Range("I5") = price1
ElseIf nb502 = 74 Then 'S'il y a 2*37 lignes dans la feuille 502, On demande d'insérer 2 prix que l'on va stocker en I5 et en I6
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p1) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price1 = p1
Range("I5") = price1
p2 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs2 & " " & qte2 & " " & isin2 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p2) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p2 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs2 & " " & qte2 & " " & isin2 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price1 = p2
Range("I6") = price2
ElseIf nb502 = 111 Then 'S'il y a 3*37 lignes dans la feuille 502, On demande d'insérer 3 prix que l'on va stocker en I5, en I6 et en I7
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p1) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price1 = p1
Range("I5") = price1
p2 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs2 & " " & qte2 & " " & isin2 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p2) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p2 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs2 & " " & qte2 & " " & isin2 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price1 = p2
Range("I6") = price2
p3 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs3 & " " & qte3 & " " & isin3 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p3) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p3 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs3 & " " & qte3 & " " & isin3 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price3 = p3
Range("I7") = price3
ElseIf nb502 = 148 Then 'S'il y a 4*37 lignes dans la feuille 502, On demande d'insérer 4 prix que l'on va stocker en I5, en I6 en I7 et en I8
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p1) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price1 = p1
Range("I5") = price1
p2 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs2 & " " & qte2 & " " & isin2 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p2) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p2 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs2 & " " & qte2 & " " & isin2 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price1 = p2
Range("I6") = price2
p3 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs3 & " " & qte3 & " " & isin3 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p3) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p3 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs3 & " " & qte3 & " " & isin3 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price3 = p3
Range("I7") = price3
p4 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs4 & " " & qte4 & " " & isin4 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p4) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p4 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs4 & " " & qte4 & " " & isin4 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price4 = p4
Range("I8") = price4
ElseIf nb502 = 185 Then 'S'il y a 5*37 lignes dans la feuille 502, On demande d'insérer 5 prix que l'on va stocker en I5, en I6 en I7 en I8 et en I9
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p1) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p1 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price1 = p1
Range("I5") = price1
p2 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs2 & " " & qte2 & " " & isin2 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p2) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p2 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs2 & " " & qte2 & " " & isin2 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price1 = p2
Range("I6") = price2
p3 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs3 & " " & qte3 & " " & isin3 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p3) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p3 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs3 & " " & qte3 & " " & isin3 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price3 = p3
Range("I7") = price3
p4 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs4 & " " & qte4 & " " & isin4 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p4) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p4 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs4 & " " & qte4 & " " & isin4 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price4 = p4
Range("I8") = price4
p5 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs5 & " " & qte5 & " " & isin5 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p5) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p5 = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs5 & " " & qte5 & " " & isin5 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
price5 = p5
Range("I9") = price5
End If
End Sub
Bonjour,
Une version dégraissée de ton code :
Sub prix()
Dim price As Double
Dim nb502
Dim bs As Range, qte As Range, isin As Range
Sheets("502").Select
nb502 = Range("A" & Rows.count).End(xlUp).Row 'Procédure différente à lancer en fonction du nombre de lignes dans la feuille 502
'ici chaque valeur est stockée sur la fauille 502, on utilise ces informations pour personnaliser les boîtes de dialogue
Set bs = Range("J5")
Set qte = Range("K5")
Set isin = Range("L5")
For i = 0 To WorksheetFunction.RoundUp(nb502 / 37, 0)
Do
p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) _
& bs.Offset(i, 0) & " " & qte.Offset(i, 0) & " " & isin.Offset(i, 0) & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
If IsNumeric(p) = False Then
MsgBox "La saisie n'est pas correcte.", vbCritical
End If
While IsNumeric(p) = False
price = p
Range("I5").Offset(i, 0) = price
Next i
End Sub
à tester pour me dire si c'est bon,
L'astuce c'est d'utiliser des offset pour décaler la cellule sur laquelle on écrit, dans lesquelles on va chercher les infos, et de faire un faire avec arrondi au supérieur du nombre de fois qu'on a 37 dans la valeur nb502.
à bientôt sur le forum
Merci!!
Alors quand je lance la macro j'ai une erreur de compilation il me dit: "Next sans For" c'est bizarre
Rebonjour,
En effet petit soucis qui vient de ma boucle Do while...
Je n'en n'écris pas souvent c'est pour ça, me dire si cette fois ça va avec ce code :
Sub prix()
Dim price As Double
Dim nb502
Dim bs As Range, qte As Range, isin As Range
Sheets("502").Select
nb502 = Range("A" & Rows.count).End(xlUp).Row 'Procédure différente à lancer en fonction du nombre de lignes dans la feuille 502
'ici chaque valeur est stockée sur la fauille 502, on utilise ces informations pour personnaliser les boîtes de dialogue
Set bs = Range("J5")
Set qte = Range("K5")
Set isin = Range("L5")
For i = 0 To WorksheetFunction.RoundUp(nb502 / 37, 0)
Do While IsNumeric(p) = False
p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) _
& bs.Offset(i, 0) & " " & qte.Offset(i, 0) & " " & isin.Offset(i, 0) & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
If IsNumeric(p) = False Then
MsgBox "La saisie n'est pas correcte.", vbCritical
End If
loop
price = p
Range("I5").Offset(i, 0) = price
Next i
End Sub
Bonjour le fil, bonjour le forum,
Assez similaire de Ausecour...
Sub prix()
Dim O As Worksheet
Dim I As Integer
Dim price
Dim nb502 As Integer
Dim bs1 As String, bs2 As String, bs3 As String, bs4 As String, bs5 As String
Dim qte1 As String, qte2 As String, qte3 As String, qte4 As String, qte5 As String
Dim isin1 As String, isin2 As String, isin3 As String, isin4 As String, isin5 As String
Set O = Sheets("502")
nb502 = O.Range("A1048576").End(xlUp).Row 'Procédure différente à lancer en fonction du nombre de lignes dans la feuille 502
'ici chaque valeur est stockée sur la fauille 502, on utilise ces informations pour personnaliser les boîtes de dialogue
bs1 = O.Range("J5")
bs2 = O.Range("J6")
bs3 = O.Range("J7")
bs4 = O.Range("J8")
bs5 = O.Range("J9")
qte1 = O.Range("K5")
qte2 = O.Range("K6")
qte3 = O.Range("K7")
qte4 = O.Range("K8")
qte5 = O.Range("K9")
isin1 = O.Range("L5")
isin2 = O.Range("L6")
isin3 = O.Range("L7")
isin4 = O.Range("L8")
isin5 = O.Range("L9")
For I = 1 To nb502 / 37
p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
While IsNumeric(p) = False
MsgBox "La saisie n'est pas correcte.", vbCritical
p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Wend
Price = p
O.Range("I5").Offset(I - 1, 0) = Price
Next I
End Sub
Bonjour le fil, bonjour le forum,
Assez similaire de Ausecour...
SpoilerSub prix() Dim O As Worksheet Dim I As Integer Dim price1 As Double, price2 As Double, price3 As Double, price4 As Double, price5 As Double Dim nb502 As Integer Dim bs1 As String, bs2 As String, bs3 As String, bs4 As String, bs5 As String Dim qte1 As String, qte2 As String, qte3 As String, qte4 As String, qte5 As String Dim isin1 As String, isin2 As String, isin3 As String, isin4 As String, isin5 As String Set O = Sheets("502") nb502 = O.Range("A1048576").End(xlUp).Row 'Procédure différente à lancer en fonction du nombre de lignes dans la feuille 502 'ici chaque valeur est stockée sur la fauille 502, on utilise ces informations pour personnaliser les boîtes de dialogue bs1 = O.Range("J5") bs2 = O.Range("J6") bs3 = O.Range("J7") bs4 = O.Range("J8") bs5 = O.Range("J9") qte1 = O.Range("K5") qte2 = O.Range("K6") qte3 = O.Range("K7") qte4 = O.Range("K8") qte5 = O.Range("K9") isin1 = O.Range("L5") isin2 = O.Range("L6") isin3 = O.Range("L7") isin4 = O.Range("L8") isin5 = O.Range("L9") Debug.Print nb502 / 37 For I = 1 To nb502 / 37 p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre") While IsNumeric(p) = False MsgBox "La saisie n'est pas correcte.", vbCritical p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre") Wend Price = p O.Range("I5").Offset(I - 1, 0) = Price Next I End Sub
Ah je ne savais pas que ça fonctionnerait avec un nombre qui n'est pas entier pour la boucle...
Je déclare un peu moins de variables par contre
Bonne solution aussi en tout cas
Alors ici j'ai un petit souci, la msgbox ne se lance pas pour me demander de renseigner un prix:
En fait dans ce code on demande de lancer la boite de dialogue uniquement si p n'est pas un nombre.
Or il faudrait que la msgbox s'ouvre pour nous demander de renseigner le prix dans un premier temps, puis si jamais ce n'est pas un nombre, afficher une alerte pour dire que ce n'est pas correct puis rafficher de nouveau la boite de saisie pour renseigner le prix à nouveau:
For i = 0 To WorksheetFunction.RoundUp(nb502 / 37, 0)
Do While IsNumeric(p) = False
p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) _
& bs.Offset(i, 0) & " " & qte.Offset(i, 0) & " " & isin.Offset(i, 0) & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
If IsNumeric(p) = False Then
MsgBox "La saisie n'est pas correcte.", vbCritical
End If
loop
price = p
Range("I5").Offset(i, 0) = price
Next i
Re,
As-tu essayé le code que je t'ai proposé ?...
Alors ici j'ai un petit souci, la msgbox ne se lance pas pour me demander de renseigner un prix:
En fait dans ce code on demande de lancer la boite de dialogue uniquement si p n'est pas un nombre.
Or il faudrait que la msgbox s'ouvre pour nous demander de renseigner le prix dans un premier temps, puis si jamais ce n'est pas un nombre, afficher une alerte pour dire que ce n'est pas correct puis rafficher de nouveau la boite de saisie pour renseigner le prix à nouveau:
For i = 0 To WorksheetFunction.RoundUp(nb502 / 37, 0) Do While IsNumeric(p) = False p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) _ & bs.Offset(i, 0) & " " & qte.Offset(i, 0) & " " & isin.Offset(i, 0) & Chr(10) & "Exemple: 328,45", "Prix de l'ordre") If IsNumeric(p) = False Then MsgBox "La saisie n'est pas correcte.", vbCritical End If loop price = p Range("I5").Offset(i, 0) = price Next i
Encore un essai du coup, désolé des bugs, mais comme je n'ai pas ton fichier, je ne peux pas tester...
For i = 0 To WorksheetFunction.RoundUp(nb502 / 37, 0)
Do
p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) _
& bs.Offset(i, 0) & " " & qte.Offset(i, 0) & " " & isin.Offset(i, 0) & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
If IsNumeric(p) = False Then
MsgBox "La saisie n'est pas correcte.", vbCritical
End If
loop while IsNumeric(p) = False
price = p
Range("I5").Offset(i, 0) = price
Next i
Ps: Merci d'essayer le code de ThauThème et de lui faire un retour
Bonjour,
Merci pour ton code
Je l'ai essayé mais juste dans les fenêtre de saisie, cela reprend toujours les même informations dans les messages (bs,qte et isin) comme si elle n'étaient pas incrémentées
Rebonjour,
Tu parles de quel code? Parce que j'ai remarqué que chez ThauThème il mettait :
InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Du coup c'est toujours bs1, qte1, et isin1 qui sont affichés dans l'inputbox, en revanche il écrit bien dans une cellule décallée par sa variable I.
Rebonjour,
Tu parles de quel code? Parce que j'ai remarqué que chez ThauThème il mettait :
InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) & bs1 & " " & qte1 & " " & isin1 & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
Du coup c'est toujours bs1, qte1, et isin1 qui sont affichés dans l'inputbox, en revanche il écrit bien dans une cellule décallée par sa variable I.
Au secours ton code fonctionne très bien mais je vais encore t'embêter
Les boîtes de saisie s'affichent parfaitement en fonction du nombre de lignes comme demandé mais à la fin il y en a toujours une qui s'ouvre en plus (par exemple si nombre de ligne = 74, j'en ai une troisième qui s'ouvre au lieu de 2) sans bs1,qt1,isin1 (il doit incrémenter sans trouver les valeurs).
Y a-t-il moyen de stopper cette boucle juste avant?
Merci mille fois!!!
Sub prix()
Dim price As Double
Dim nb502
Dim bs As Range, qte As Range, isin As Range
Sheets("502").Select
nb502 = Range("A" & Rows.Count).End(xlUp).Row 'Procédure différente à lancer en fonction du nombre de lignes dans la feuille 502
'ici chaque valeur est stockée sur la fauille 502, on utilise ces informations pour personnaliser les boîtes de dialogue
Set bs = Range("J5")
Set qte = Range("K5")
Set isin = Range("L5")
For I = 0 To WorksheetFunction.RoundUp(nb502 / 37, 0)
Do
p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) _
& bs.Offset(I, 0) & " " & qte.Offset(I, 0) & " " & isin.Offset(I, 0) & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
If IsNumeric(p) = False Then
MsgBox "La saisie n'est pas correcte.", vbCritical
End If
Loop While IsNumeric(p) = False
price = p
Range("I5").Offset(I, 0) = price
Next I
End Sub
Rebonjour,
En effet petit bug dû à une erreur de ma part , voici la correction :
Sub prix()
Dim price As Double
Dim nb502
Dim bs As Range, qte As Range, isin As Range
Sheets("502").Select
nb502 = Range("A" & Rows.Count).End(xlUp).Row 'Procédure différente à lancer en fonction du nombre de lignes dans la feuille 502
'ici chaque valeur est stockée sur la fauille 502, on utilise ces informations pour personnaliser les boîtes de dialogue
Set bs = Range("J5")
Set qte = Range("K5")
Set isin = Range("L5")
For I = 0 To WorksheetFunction.Rounddown((nb502-1) / 37, 0)
Do
p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) _
& bs.Offset(I, 0) & " " & qte.Offset(I, 0) & " " & isin.Offset(I, 0) & Chr(10) & "Exemple: 328,45", "Prix de l'ordre")
If IsNumeric(p) = False Then
MsgBox "La saisie n'est pas correcte.", vbCritical
End If
Loop While IsNumeric(p) = False
price = p
Range("I5").Offset(I, 0) = price
Next I
End Sub
Au lieu de voir combien de fois il y avait 37 dans la valeur en arrondissant au supérieur, il fallait voir combien de fois il y avait plus que 37 arrondi à l'inférieur.
Si tu as 37 lignes, ça reste à 0, pas besoin de faire une fois de plus, dès 38, on a une fois de plus, et ainsi de suite...
Merci!!
Je l'ai modifié comme cela et ça fonctionne:
For I = 0 To WorksheetFunction.RoundUp((nb502 / 37) - 1, 0)
Merci à tous les deux pour votre aide précieuse!!
Passez un excellent après-midi!!
Rebonjour,
En effet petit bug dû à une erreur de ma part , voici la correction :
Sub prix() Dim price As Double Dim nb502 Dim bs As Range, qte As Range, isin As Range Sheets("502").Select nb502 = Range("A" & Rows.Count).End(xlUp).Row 'Procédure différente à lancer en fonction du nombre de lignes dans la feuille 502 'ici chaque valeur est stockée sur la fauille 502, on utilise ces informations pour personnaliser les boîtes de dialogue Set bs = Range("J5") Set qte = Range("K5") Set isin = Range("L5") For I = 0 To WorksheetFunction.Rounddown((nb502-1) / 37, 0) Do p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) _ & bs.Offset(I, 0) & " " & qte.Offset(I, 0) & " " & isin.Offset(I, 0) & Chr(10) & "Exemple: 328,45", "Prix de l'ordre") If IsNumeric(p) = False Then MsgBox "La saisie n'est pas correcte.", vbCritical End If Loop While IsNumeric(p) = False price = p Range("I5").Offset(I, 0) = price Next I End Sub
Merci!!
Je l'ai modifié comme cela et ça fonctionne:
SpoilerFor I = 0 To WorksheetFunction.RoundUp((nb502 / 37) - 1, 0)
Merci à tous les deux pour votre aide précieuse!!
Passez un excellent après-midi!!
Rebonjour,
En effet petit bug dû à une erreur de ma part , voici la correction :
Sub prix() Dim price As Double Dim nb502 Dim bs As Range, qte As Range, isin As Range Sheets("502").Select nb502 = Range("A" & Rows.Count).End(xlUp).Row 'Procédure différente à lancer en fonction du nombre de lignes dans la feuille 502 'ici chaque valeur est stockée sur la fauille 502, on utilise ces informations pour personnaliser les boîtes de dialogue Set bs = Range("J5") Set qte = Range("K5") Set isin = Range("L5") For I = 0 To WorksheetFunction.Rounddown((nb502-1) / 37, 0) Do p = InputBox("Veuillez renseigner le prix auquel l'ordre ci-dessous a été exécuté:" & Chr(10) _ & bs.Offset(I, 0) & " " & qte.Offset(I, 0) & " " & isin.Offset(I, 0) & Chr(10) & "Exemple: 328,45", "Prix de l'ordre") If IsNumeric(p) = False Then MsgBox "La saisie n'est pas correcte.", vbCritical End If Loop While IsNumeric(p) = False price = p Range("I5").Offset(I, 0) = price Next I End Sub
Ah, moi j'avais mis rounddown, mais si ça résiste à tes tests avec roundup, super!
Bonne après-midi