Excel: Somme plage conditionnelle

Résolu
Bonjour,

J'ai un tableau qui à la forme suivante

commande------refpaquet-----couleur------- taille -------qte
A ---------------Abs1------- bleu----------- s------------25
A---------------Abs2-------- bleu----------- s ----------- 25
A---------------Abs3--------bleu-----------s ----------- 22
A--------------- Abm1--------bleu----------- m-----------25
A--------------- Abm1-------- bleu ----------- m----------- 25
B--------------- Brs1-------- rouge----------- s -----------15
B--------------- Bbm1 -------- bleu ----------- m ----------- 25

Je voudrais mettre en place une macro qui recupere sur un userform la taille et la qte total
d'une meme paquet (commande et taille identique)

Exemple:

les trois 1ere lignes font partie d'un meme paquets etant donne qu'elle on la meme reference de commane "A" , la meme couleur "Bleu" et la meme taille "s"

je voudrais que ma macro reporte "s" dans le textboxTaille de mon userfom et "72" dans le textboxQte

j'ai commencer à écrire la macro suivante mais je ne parviens pas à finaliser mon raisonnement.

Private Sub ComboBoxCouleur_Change()
Dim Commande, Couleur As String
Dim c As Range
Dim i, n As Integer
Commande = UserFormPlanning.TextBoxRefCommande.Text
Couleur = UserFormPlanning.ComboBoxCouleur.Text

For Each c In Range("B101:B1000")
      If c.Value = Commande And c.Offset(0, 2).Value = Couleur Then
          While c.Offset(c, 3).Value = c.Offset(c + 1, 3).Value 'ajouter +1 pour la derniere
            For i = 1 To 10 Step 1
            UserFormPlanning.Controls("TextBoxTaille" & i).Text = c.Offset(c, 3).Value
            UserFormPlanning.Controls("textboxqte" & i).Text = Sum(c.Offset(0, 4).Value)
            Next i
         Loop
       
    End If
Next

For n = 1 To 10 Step 1
   If UserFormPlanning.Controls("TextBoxTaille" & n).Text <> "" Then UserFormPlanning.Controls("TextBoxTaille" & n).Visible = True
   If UserFormPlanning.Controls("textboxqte" & n).Text <> "" Then UserFormPlanning.Controls("textboxqte" & n).Visible = True
  
Next n

End Sub


Je sais qu'il y a un probleme de syntaxe pour la somme, mais je ne sais pas le résoudre.

merci d'avance.

3 réponses

  1. Petit complement d'info
    lorsque j'ouvre le userform je le fait a partir d'une commande. ce qui fait que la commande apparait automatiquement dans le texteboxRefCommande.
    La macro s'active lorsque je la choisis dans le comboboxCouleur.
    Ce qui fait que pour chaque recherche je dispose deja de la commande et de la couleur
    je recherche donc uniquement les differentes tailles pour chauqe couleur ainsi que les quantité total pour chauqe taille je joint une photo du userform pour plus de visibilité.

    https://www.cjoint.com/?BAxany52qWq
    MERCI
    0
    1. Pou simplifier les chose l'idée de ma macro est la suivante:

      -dans la plage("B100:B1000")
      . SI la couleur et la commande sont identique a celle du userform
      If c.Value = Commande And c.Offset(0, 2).Value = Couleur Then

      . tant que la colonne 4 represente la meme taille
       i = 1
               For n = 1 To 1000 Step 1
                  While c.Offset(n, 3).Value = c.Offset(n + 1, 3).Value

      .faire la somme de la qté pour cette taille "Et c'est precisement la que je bloque"
        t = c.Offset(n, 4).Value + c.Offset(n + 1, 4).Value

      enregistrer le resultat dans le userform
      UserFormPlanning.Controls("TextBoxTaille" & i) = n
                            UserFormPlanning.Controls("TextBoxQte" & i) = t
                            i = i + 1


      Voila si quelqu'un veut bien m'aider ca me serait d'un grand secours
      n'hesitez pas à demander plus d'explication si ce n'est pas assez claire
      merci
      0
      1. Re le forum,

        C'est bon j'ai trouver la solution tout seul comme un grand, voici le code final.

        Private Sub ComboBoxCouleur_Change()  
        Dim Commande, Couleur, Taille As String  
        Dim c As Range  
        Dim i, n, Qte  As Integer  
        Commande = UserFormPlanning.TextBoxRefCommande.Text  
        Couleur = UserFormPlanning.ComboBoxCouleur.Text  
        
        i = 1  
        For n = 70 To 1000  
              If Range("CK" & n).Value = Commande And Range("CK" & n).Offset(0, 2).Value = Couleur Then 'pour la couleur choisie  
                        
                         Qte = Qte + Range("CK" & n).Offset(0, 4).Value  
                    If Range("CK" & n).Offset(0, 3).Value = Range("CK" & n).Offset(1, 3).Value Then ' tant que la taille est identique  
                        Taille = Range("CK" & n).Offset(0, 3).Value  
                        UserFormPlanning.Controls("TextBoxTaille" & i).Text = Taille  
                    Else   ' si  la taille est differente  
                      
                        UserFormPlanning.Controls("TextBoxQte" & i).Text = Qte  
                        Qte=0
                        i = i + 1  
                        Taille = Range("CK" & n).Offset(1, 3).Value  
                    End If  
                End If  
         Next n  
           
         For p = 1 To 10 Step 1  
                 If UserFormPlanning.Controls("TextBoxTaille" & p).Text <> "" Then UserFormPlanning.Controls("TextBoxTaille" & p).Visible = True  
                 If UserFormPlanning.Controls("TextBoxQte" & p).Text <> "" Then UserFormPlanning.Controls("TextBoxQte" & p).Visible = True  
        Next p  
           
        End Sub


        N'hesitez pas à me relancer si jamais quelqu'un a une question par rapport a ce code.
        0