Microsoft 365 boucle en VBA

lesoldat9

XLDnaute Occasionnel
Bonjour à tous,

Alors je cherche à compléter ma formule en gros je souhaite que

tant que la colonne B est égal à X alors qu'il vérifie que D + E est égal à 0

Si nous dépassons -10 alerte via msg box

For b = 3 To a - 1

'Formule si la valeur de la cellule b est égal à la valeur de la textbox2 alors

If Sheets("...").Range("b" & b).Value = TextBox2.Value Then
....
....
....
...
..


End If



Next

Si je dois m'expliquer en version non excel je souhaite que ma formule vérifie que le N° conducteur est bien un delta inférieur à -10 sinon alerte msg.


En espérant avoir était clair.

Merci d'avance

Cordialement.
 

Pièces jointes

  • stock test.xlsx
    10.9 KB · Affichages: 3
Solution
Bon en creusant un peu plus j'ai réussi pour ceux à qui ca intéresse voici la formule

a = Cells(Rows.Count, 1).End(xlUp).Row + 1 'trouver dernière ligne vide

For b = 3 To a

'Formule si la valeur de la cellule b est égal à la valeur de la textbox2 alors

If Sheets(".....").Range("b" & b).Value = "c201" Then

c = c + Sheets("....").Range("d" & b).Value


End If


If Sheets("....").Range("b" & b).Value = "c201" Then

d = d + Sheets("....").Range("e" & b).Value


End If


Next


Delta = c + d

If Delta > "-10" Then MsgBox (Alerte)


End Sub

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lesoldat,
Une solution sans VBA en PJ en rajoutant une colonne dans le tableau.
A noter
ma formule vérifie que le N° conducteur est bien un delta inférieur à -10 sinon alerte msg.
C'est plutôt :
"ma formule vérifie que le N° conducteur est bien un delta supérieur à -10 sinon alerte msg."

Si vous tenez au VBA, faites signe. Ce n'est guère plus difficile.
 

Pièces jointes

  • stock test.xlsx
    10.9 KB · Affichages: 2

lesoldat9

XLDnaute Occasionnel
Bon en creusant un peu plus j'ai réussi pour ceux à qui ca intéresse voici la formule

a = Cells(Rows.Count, 1).End(xlUp).Row + 1 'trouver dernière ligne vide

For b = 3 To a

'Formule si la valeur de la cellule b est égal à la valeur de la textbox2 alors

If Sheets(".....").Range("b" & b).Value = "c201" Then

c = c + Sheets("....").Range("d" & b).Value


End If


If Sheets("....").Range("b" & b).Value = "c201" Then

d = d + Sheets("....").Range("e" & b).Value


End If


Next


Delta = c + d

If Delta > "-10" Then MsgBox (Alerte)


End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Travaillant en tableau structuré, autant profiter de leur souplesse en interrogeant directement le tableau.
Une autre approche en PJ avec :
VB:
Sub Alerte()
    Dim Chaine$, L%
    Chaine = ""
    For L = 1 To [Tab_GestionStock].Rows.Count
        Ecart = [Tab_GestionStock[Sortie]].Item(L) + [Tab_GestionStock[Retour]].Item(L)
        If Ecart < -10 Then
            Chaine = Chaine & "N° conducteur : " & [Tab_GestionStock[N°Conducteur]].Item(L) & " - Ecart : " & Ecart & Chr(10)
        End If
    Next L
    If Chaine <> "" Then MsgBox Chaine Else MsgBox "Pas d'alerte détectée."
End Sub
 

Pièces jointes

  • stock test.xlsm
    16.7 KB · Affichages: 0

sylvanu

XLDnaute Barbatruc
Supporter XLD
Si votre pb se situe au niveau du msgbox, regardez ceci : LIEN
et testez cela si avec le 4 vous vouliez changer l'icone :
VB:
Sub Essai()
    Message = MsgBox("vbCritical", vbCritical, "Alerte")
    Message = MsgBox("vbExclamation", vbExclamation, "Alerte")
    Message = MsgBox("vbInformation", vbInformation, "Alerte")
    Message = MsgBox("vbQuestion", vbQuestion, "Alerte")
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Il suffisait la prose du lien que je vous ai envoyé, la syntaxe est :
Message = MsgBox("Texte d'alerte", vbCritical, "Alerte")
Pourquoi donc mettre du code dans Thisworkbook ?
Il vaut mieux le mettre dans un module. Sauf si vous vouliez un déclenchement spécifique de la macro.
Un essai en PJ avec déclenchement manuel avec :
VB:
Sub Alerte()
    Dim Chaine$, L%
    Chaine = ""
    For L = 1 To [Tab_GestionStock].Rows.Count
        Ecart = [Tab_GestionStock[Sortie]].Item(L) + [Tab_GestionStock[Retour]].Item(L)
        If Ecart < -10 Then
            Chaine = Chaine & "N° conducteur : " & [Tab_GestionStock[N°Conducteur]].Item(L) & " - Ecart : " & Ecart & Chr(10)
        End If
    Next L
    If Chaine <> "" Then
        Message = MsgBox(Chaine, vbCritical, "Alerte")
    Else
        MsgBox "Pas d'alerte détectée."
    End If
End Sub
 

Pièces jointes

  • stock test (1).xlsm
    16.7 KB · Affichages: 1

lesoldat9

XLDnaute Occasionnel
Si votre pb se situe au niveau du msgbox, regardez ceci : LIEN
et testez cela si avec le 4 vous vouliez changer l'icone :
VB:
Sub Essai()
    Message = MsgBox("vbCritical", vbCritical, "Alerte")
    Message = MsgBox("vbExclamation", vbExclamation, "Alerte")
    Message = MsgBox("vbInformation", vbInformation, "Alerte")
    Message = MsgBox("vbQuestion", vbQuestion, "Alerte")
End Sub
Super ca fonctionne.
 

lesoldat9

XLDnaute Occasionnel
Re,
Il suffisait la prose du lien que je vous ai envoyé, la syntaxe est :
Message = MsgBox("Texte d'alerte", vbCritical, "Alerte")
Pourquoi donc mettre du code dans Thisworkbook ?
Il vaut mieux le mettre dans un module. Sauf si vous vouliez un déclenchement spécifique de la macro.
Un essai en PJ avec déclenchement manuel avec :
VB:
Sub Alerte()
    Dim Chaine$, L%
    Chaine = ""
    For L = 1 To [Tab_GestionStock].Rows.Count
        Ecart = [Tab_GestionStock[Sortie]].Item(L) + [Tab_GestionStock[Retour]].Item(L)
        If Ecart < -10 Then
            Chaine = Chaine & "N° conducteur : " & [Tab_GestionStock[N°Conducteur]].Item(L) & " - Ecart : " & Ecart & Chr(10)
        End If
    Next L
    If Chaine <> "" Then
        Message = MsgBox(Chaine, vbCritical, "Alerte")
    Else
        MsgBox "Pas d'alerte détectée."
    End If
End Sub
Merci c'était juste pour le test ;)
 

Discussions similaires

Réponses
7
Affichages
288
Réponses
2
Affichages
321

Statistiques des forums

Discussions
315 094
Messages
2 116 144
Membres
112 669
dernier inscrit
Guigui2502