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...

Spoiler
Sub 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.

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

C'était pour le code de Tau Thème pardon

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:

Spoiler
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


Ah, moi j'avais mis rounddown, mais si ça résiste à tes tests avec roundup, super!

Bonne après-midi

Rechercher des sujets similaires à "optimiser mon code afin eviter repetitions"