MSGBOX combiner les résultats de for each

Bonjour à tous, la solution est certainement évidente, mais à cette heure j'ai du mal.

Je teste si les valeurs d'une plage sont d'une certaine couleur, et si c'est oui je met la valeur dans une msgbox (avec une autre de la même ligne en colonne B).

Tout cela fonctionne bien, mais j'aimerais avoir tous les résultats de chaque msgbox, qui est le résultat de "for each", dans une seule, est ce possible?

Avec i = i+1? mais je ne reussi pas à le placer correctement. voici le code qui fonctionne mais répète les msgbox:

Private Sub Image1_Click()
    Dim resu
' Definition dernière ligne
    Dim derniereLigne, SN, col As Long
    derniereLigne = Range("AD" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne B

' Definition plage commentaires non vides
    Dim plagestructure As Range
    Set plagestructure = ActiveSheet.Range("AD4", "AD" & derniereLigne)

' Pour chaque cellules présentes dans la plage
    For Each cell In plagestructure

    If cell.Font.Color = 255 Then

    col = cell.Row
    SN = Range("B" & col).Value
    resu = "Il y a des structures à commander:" & (SN) & " " & "n° " & cell.Value

    MsgBox resu

End If
Next

End Sub

Bonjour,

Tout d'abord quelques questions sur ton programme parce qu'il n'est pas clair...

derniereLigne = Range("AD" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne B

Tu dis que tu vas chercher la dernière ligne non vide de la colonne B, alors que tu renseignes la colonne AD, c'est normal?

col = cell.Row

la variable col qui se traduit colonne contient la ligne de la cellule, c'est normal?

Pour ton soucis le mieux serait pour moi de faire ça :

For Each cell In plagestructure
    If cell.Font.Color = 255 Then
        lig = cell.Row

        if SN = "" then
            SN = Range("B" & col).Value & " n° " & cell.Value
        else
            SN = SN & chr(10) & SN = Range("B" & col).Value & " n° " & cell.Value
        end if
    end if
next cell

if SN = "" then
    msgbox("Il n'y a pas de structure à commander.")
else
    msgbox("Il y a des structures à commander:" & chr(10) & SN)
end if

end Sub

Bonjour,

Teste comme ceci

Private Sub Image1_Click()
    Dim resu
' Definition dernière ligne
    Dim derniereLigne, SN, col As Long
    derniereLigne = Range("AD" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne B

' Definition plage commentaires non vides
    Dim plagestructure As Range
    Set plagestructure = ActiveSheet.Range("AD4", "AD" & derniereLigne)

' Pour chaque cellules présentes dans la plage
    For Each cell In plagestructure
      If cell.Font.Color = 255 Then
        col = cell.Row
        SN = Range("B" & col).Value
        resu = resu & "Il y a des structures à commander:" & (SN) & " " & "n° " & cell.Value & Chr(10)
      End If
    Next
  MsgBox resu
End Sub

Bonjour,

Teste comme ceci

Private Sub Image1_Click()
    Dim resu
' Definition dernière ligne
    Dim derniereLigne, SN, col As Long
    derniereLigne = Range("AD" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne B

' Definition plage commentaires non vides
    Dim plagestructure As Range
    Set plagestructure = ActiveSheet.Range("AD4", "AD" & derniereLigne)

' Pour chaque cellules présentes dans la plage
    For Each cell In plagestructure
      If cell.Font.Color = 255 Then
        col = cell.Row
        SN = Range("B" & col).Value
        resu = resu & "Il y a des structures à commander:" & (SN) & " " & "n° " & cell.Value & Chr(10)
      End If
    Next
  MsgBox resu
End Sub

Bonjour M12, seul inconvénient de la solution :

ça va te faire le résultat :

Il y a des structures à commander: SN1 n° cell.Value

Il y a des structures à commander: SN2 n° cell.Value

Il y a des structures à commander: SN3 n° cell.Value

[...]

Car tu répètes le texte "Il y a des structures à commander:" dans ta boucle

Pour ne pas le répéter tu peux modifier un tout petit peu le code en sortant ce texte pour le mettre en resultat final :

msgbox("Il y a des structures à commander:" & resu)

Bonjour,

Avant de faire une proposition, quelques remarques sur ton code :

Dim derniereLigne, SN, col As Long
'équivaut à :
Dim derniereLigne As Variant, SN As Variant, col As Long
'Pour déclarer tout en type "Long" :
Dim derniereLigne As Long, SN As Long, col As Long
" " & "n° "
'équivaut à :
" n° "

Aussi, le nombre de cellules dans la plage étant déterminé, j'ai préféré une boucle "Next" classique, ce qui t'évite de récupérer l'indice de ligne (étonnant d'ailleurs d'utiliser une variable "Col" pour un indice de ligne !).

Voilà ma proposition :

Private Sub Test()

    Dim resu As String, DerLig As Long, Lig As Long

    resu = "Structures à commander :"
    With Sheets("MaFeuille") 'Toute instruction débutant par "." se rattache à cette objet (à adapter à la feuille d'intérêt)
        'Definition dernière ligne
        DerLig = .Range("AD" & .Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne AD 
        'Pour chaque cellules présente dans la plage
        For Lig = 4 To DerLig
            If .Range("AD" & Lig).Font.Color = 255 Then resu = resu & Chr(10) & .Range("B" & Lig).Value & " n° " & .Range("AD" & Lig).Value
        Next Lig
        'Renvoi du résultat
        If Not resu = "Structures à commander :" Then MsgBox resu
    End With

End Sub

Un grand merci à tous ! Oui en effet la variable col, j'ai mal choisi le nom ! Et je me suis mélangé les pinceaux en renseignant les commentaires

Résultat d'écriture de code à 6h du mat sans avoir pris son café de starter...

Je vous remercie pour toutes les remarques car en effet je me complique la vie ou oublie certaines choses, j'en découvre grâce à vous !

L'énorme avantage est que je comprend mes erreurs et en plus je vois plusieurs façon de faire, pour tout dire je serais peut être arrivé à la première solution, mais celle de Pedro ne m'aurait pas traversé l'esprit.

Ce forum est genial ! Merci à tous !

Edit : le code fonctionne à la perfection sur mon excel 2013, mais plante sur la ligne avec :

 DerLig = .Range("AD" & .Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne AD

Sur un pc utilisateur avec excel 2010...je trouve ça plutôt bizar, ce genre de chose vous arrive souvent?

RE-EDIT : Problème réglé : excel2010 n'aime pas sheets et prefere worksheets, tout simplement !

Rechercher des sujets similaires à "msgbox combiner resultats each"