Excel: Somme plage conditionnelle

Résolu
tictac847 Messages postés 26 Statut Membre -  
tictac847 Messages postés 26 Statut Membre -
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. tictac847 Messages postés 26 Statut Membre
     
    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
  2. tictac847 Messages postés 26 Statut Membre
     
    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
  3. tictac847 Messages postés 26 Statut Membre
     
    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