IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

probleme somme avec double conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 29
    Par défaut probleme somme avec double conditions
    Bonjour,

    J'ai fait une boucle qui me permet de faire une somme en fonction de 2 conditions: le nom du magasin et le mois.
    J'ai un tableau de 614 lignes pour le moment.
    Pour les deux premier magasin il me fait bien le total.
    Mais pour les autres ils me met 0.

    Voila mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub CreationTabGrafmois()
     
    Dim i As Integer, j As Integer, nommag As Variant, Total As Long
    Let i = 4
    Let Range("I3") = "Aout"
    Let j = 1
    For i = 4 To shtGrafAnnee.Range("E" & Rows.Count).End(xlUp).Row Step 1
        Set nommag = shtGrafAnnee.Cells(i, 5)
        Do
            Let j = j + 1
            If j = shtPoidsAnnee.Range("A" & Rows.Count).End(xlUp).Row And shtPoidsAnnee.Cells(j, 1) <> nommag Then
                Exit Do
            End If
            If shtPoidsAnnee.Cells(j, 1) = nommag And shtPoidsAnnee.Cells(j, 6) = 6 Then
                Total = Total + shtPoidsAnnee.Cells(j, 9)
                End If
        Loop Until shtGrafSem.Cells(j, 1) = nommag
        shtGrafAnnee.Cells(i, 9) = Total
        Let j = 1
        Let Total = 0
    Next i
     
    Application.CutCopyMode = False
    End Sub
    Avez vous une idée?

    Merci de votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut semas et le forum
    Pour les deux premier magasin il me fait bien le total.
    Mais pour les autres ils me met 0.
    Question typique insoluble sur le forum avec les données fournies : Ta boucle marche sur les 2 premiers magasins => ton code est bon. Si la macro ne fait pas ce que tu veux, ça vient forcément des données => comme tu ne les fournis pas, à moins que la boule de cristal ne soit plus brumeuses, on a aucune possibilité de trouver le noeud du problème.
    Sur une copie de ton fichier, fait ta macro en mode Pas-à-pas avec 2, 3 références pour chaque magasin et regarde où ça cloche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub CreationTabGrafmois()
    Dim i As Long, j As Long
    Dim Nommag As Range
    Dim Total As Double
    Range("I3") = "Aout"
    For i = 4 To shtGrafAnnee.Range("E" & Rows.Count).End(xlUp).Row
        Set Nommag = shtGrafAnnee.Cells(i, "E")
        j = 1
        Total = 0
        Do
            j = j + 1
            If j >= shtPoidsAnnee.Range("A" & Rows.Count).End(xlUp).Row And _
                           shtPoidsAnnee.Cells(j, "A") <> Nommag Then Exit Do
                If shtPoidsAnnee.Cells(j, "A") = Nommag And shtPoidsAnnee.Cells(j, "F") = 6 Then _
                                        Total = Total + shtPoidsAnnee.Cells(j, "I")
        Loop Until shtGrafSem.Cells(j, "A") = Nommag
        shtGrafAnnee.Cells(i, "I") = Total
    Next i
    End Sub
    C'est la même macro, avec quelques modifications.
    Les variables lignes, même si je n'ai que 2 lignes, je les déclarent en long (ça évite les erreurs avec un espace en ligne 63000, par exemple)
    Le test de sortie de ta boucle, comme c'est pour te limiter au tableau, si J devient supérieur à la dernière non-vide en A, ta boucle doit s'arrêter, ne te limite pas à l'égalité dans ce cas. Normalement je limite aussi par la ligne de Loop Until, mais comme c'est par rapport à une valeur, je ne peux savoir quel autre opérateur pourrait être utile.
    Personnellement, j'utiliserais plutôt un For...Next, avec un "Exit For", puisque ta limite est définie, mais c'est affaire d'habitude.
    A+

  3. #3
    Membre averti
    Inscrit en
    Août 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 29
    Par défaut
    J'ai testé ton code.

    J'ai reduit ma liste et en fait quand je boucle "j" ne veut pas aller plus haut que 4 pour le 1er magasin, quand il passe à la 2eme iteration du for il monte jusqu'a 5, a la 3eme jusqu'a 6, etc.

    Pour mes données elles sont rigoureusement identique puisqu'elles viennent d'une extraction d'un système d'information.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut semas et le forum
    J'ai reduit ma liste et en fait quand je boucle "j" ne veut pas aller plus haut que 4 pour le 1er magasin, quand il passe à la 2eme iteration du for il monte jusqu'a 5, a la 3eme jusqu'a 6, etc.
    Ne connaissant pas les données...
    2 possibilités pour la sortie de la boucle J sur la feuille de référence informatique shtPoidsAnnee
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If j >= Range("A" & Rows.Count).End(xlUp).Row And Cells(j, "A") <> Nommag Then Exit [COLOR=#0000ff]Do
    Donc si on atteint ou dépasse la dernière ligne non vide en A et que la valeur en Aj n'est pas Nommag. Mais je ne pense pas que ce soit ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop Until shtGrafSem.Cells(j, "A") = Nommag
    Peut-être une erreur de nom de feuille (moi je verrais plutôt shtPoidsAnnee à la place de shtGrafSem, mais juste avec la macro...)?
    A+

  5. #5
    Membre averti
    Inscrit en
    Août 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 29
    Par défaut
    Almacén / Mes/ Neto Báscula
    GIEPAC BOURGOGNE/ 1/ 22.280
    GIEPAC BOURGOGNE/ 1/ 26.620
    GIEPAC BOURGOGNE/ 2/ 23.160
    GIEPAC BOURGOGNE/ 2/ 22.920
    GIEPAC BOURGOGNE/ 3/ 23.600
    GIEPAC BOURGOGNE/ 3/ 24.420
    GIEPAC BOURGOGNE/ 4/ 22.620
    GIEPAC BOURGOGNE/ 4/ 23.520
    GIEPAC BOURGOGNE/ 5/ 22.840
    GIEPAC BOURGOGNE/ 5/ 24.700
    GIEPAC BOURGOGNE/ 6/ 24.640
    GIEPAC BOURGOGNE/ 6/ 23.020
    GIEPAC BOURGOGNE/ 8/ 23.560
    GIEPAC BOURGOGNE/ 8/ 23.940
    GIEPAC LAMIRANDE/ 1/ 23.620
    GIEPAC LAMIRANDE/ 1/ 24.280
    GIEPAC LAMIRANDE/ 4/ 25.000


    Voila les données que j'ai, biensur il y a plus de colonne et de ligne.

    Pour l'erreur de feuille j'avais corrigé mais ca change rien.

  6. #6
    Membre averti
    Inscrit en
    Août 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 29
    Par défaut
    Personne n'a d'idée? Car la j'essais pas mal de chose mais je bloque toujours.

    Rappel du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub CreationTabGrafmois()
    Dim i As Long, j As Long
    Dim Nommag As Range
    Dim Total As Double
    shtGrafAnnee.Range("i3") = "Aout"
     
    For i = 4 To shtGrafAnnee.Range("E" & Rows.Count).End(xlUp).Row
        Set Nommag = shtGrafAnnee.Cells(i, 5)
        j = 1
        Total = 0
        Do
            j = j + 1
            If j >= Range("A" & Rows.Count).End(xlUp).Row And Cells(j, "A") <> Nommag Then Exit Do
                If shtPoidsAnnee.Cells(j, 1) = Nommag And shtPoidsAnnee.Cells(j, 6) = 1 Then _
                    Total = Total + shtPoidsAnnee.Cells(j, 9)
        Loop Until shtGrafAnnee.Cells(j, 1) = Nommag
        shtGrafAnnee.Cells(i, 8) = Total
     
    Next i
    End Sub

    Recap de ce que je veux faire:

    A partir de la liste du message precedent, je voudrais que pour chaque magasin (almacen) et pour un mois (mes) donné il me calcul la moyenne du poids net (neto bascula).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Somme avec des conditions
    Par farota dans le forum Excel
    Réponses: 5
    Dernier message: 30/06/2013, 23h19
  2. Somme avec deux conditions
    Par kareem74 dans le forum Oracle
    Réponses: 0
    Dernier message: 29/08/2010, 17h01
  3. Somme avec 2 conditions
    Par minot83 dans le forum IHM
    Réponses: 6
    Dernier message: 03/03/2010, 10h47
  4. Somme avec une condition
    Par Philippe76 dans le forum Excel
    Réponses: 2
    Dernier message: 09/01/2010, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo