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 :

la fonction SOMMEPROD dans une boucle dynamique


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut la fonction SOMMEPROD dans une boucle dynamique
    Bonjour à tous les abonnées des Forums Developpez.com,
    J'ai préparer une procédure qui me génère un tableau à partir d'une feuille de calcul feuille x
    les intitulés des lignes c'est des "Cost Code" et ceux des colonnes c'est les 12 prochains mois à venir (période sous le format mm/aaaa)

    à l'intérieure du tableau je veut remplir les cellules avec la somme des montants des commandes qui possèdent le même cost code de la ligne et durant le mois de la colonne

    le montant des commandes ce trouve dans la feuille x

    exemple de cost Code 15xxx: >=15000 et <16000
    1105x: >=11050 et <11060
    la formule sous excel est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SOMMEPROD((feuillex!$Y$2:$Y$2197=B$4)*(feuillex!$J$2:$J$2197>=11100)*(feuillex!$J$2:$J$2197<11120)*(feuillex!$X$2:$X$2197))
    La colonne X:X c'est les montant des commandes
    La colonne j:j c'est les Cost Code
    La colonne Y:Y c'est les période (exemple: 11/2008)

    la ligne 2197 doit être dynamique c-à-d la dernière ligne de la colonne

    il vaut mieux utiliser la formule à l'intérieure de la boucle existante
    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
    25
    26
    27
    28
    29
    30
    Sub prévision()
        ActiveWorkbook.Worksheets.Add.Name = "Stock_Target_12_months"
        Worksheets("Stock_Target_12_months").Select
     
        Range("A3").Value = "Période"
        Range("A4").Value = "Cost Code"
        Range("A5").Value = "111xx"
        Range("A6").Value = "112xx"
        Range("A7").Value = "114xx"
        Range("A8").Value = "1151x"
        Range("A9").Value = "1152x"
        Range("A10").Value = "131xx"
        Range("A11").Value = "132xx"
        Range("A12").Value = "16xxx"
        Range("A13").Value = "105xx"
        Range("A14").Value = "134xx"
        Range("A15").Value = "133xx"
        Range("A16").Value = "1150x"
        Range("A17").Value = "12xxx"
        Range("A18").Value = "14xxx"
        Range("A19").Value = "15xxx"
        Range("A20").Value = "8xxxx"
     
        Range("A31").Value = "Total"
        Dim i As Integer
        For i = 0 To 12
        ActiveSheet.Cells(2, i + 2).FormulaLocal = "=TEXTE(DATE(ANNEE(AUJOURDHUI()); MOIS(AUJOURDHUI())+" & i & "; 1);" & """mmm - aaaa""" & ")"
        ActiveSheet.Cells(3, i + 2).FormulaLocal = "=TEXTE(DATE(ANNEE(AUJOURDHUI()); MOIS(AUJOURDHUI())+" & i & "; 1);" & """mm/aa""" & ")"
            Next i
    End Sub
    merci à tous ce qui prennent la peine de lire ce message

    Mouna

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu veux placer cette formule sur la première ligne vide de la colonne J ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim derniereLigne as integer
        DerniereLigne = Range("J65535").end(xlup).row + 1
        Worksheets("feuillex").Range("Y" & DerniereLigne).FormulaLocal = _
        "=SOMMEPROD((feuillex!$Y$2:$Y" & derniereLigne & "=B$4)*(feuillex!$J$2:$J & _
        derniereLigne & ">=11100)*(feuillex!$J$2:$J" & derniereLigne & "<11120)* _
        (feuillex!$X$2:$X" & derniereLigne & "))"
    Pas testé

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut RE
    Salut ouskel'n'or,
    peut être je me suis fait mal comprendre
    je m'excuse
    les Colonne X, Y et J ce trouvent dans la feuillex

    et mois je désir remplir le nouveau tableau c-à-d dans la feuille "Stock_Target_12_months" (en pièce jointe)Stock_Target_12_months.xls

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Effectivement, je répondais à ça
    Citation Envoyé par Mounamidou
    exemple de cost Code 15xxx: >=15000 et <16000
    1105x: >=11050 et <11060
    la formule sous excel est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SOMMEPROD((feuillex!$Y$2:$Y$2197=B$4)*(feuillex!$J$2:$J$2197>=11100)*(feuillex!$J$2:$J$2197<11120)*(feuillex!$X$2:$X$2197))
    La colonne X:X c'est les montant des commandes
    La colonne j:j c'est les Cost Code
    La colonne Y:Y c'est les période (exemple: 11/2008)

    la ligne 2197 doit être dynamique c-à-d la dernière ligne de la colonne
    Peux-tu reformuler ta demande ?
    Dans cette ligne
    Range("A31").Value = "Total"
    Est-ce finalement la ligne 31 qui doit être dynamique ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    Non c'est pas la ligne 31 mais la ligne 20

    car le total je peut m'en passer, c'est pas indicatif !

    mouna

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Alors tu l'as en modifiant le code que je t'ai passé
    Dim derniereLigne as integer
    DerniereLigne = Range("J65535").end(xlup).row + 1
    en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim derniereLigne as integer
        DerniereLigne = Range("A65535").end(xlup).row + 1

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    ouskel'n'or je crois que vous m'avez mal compris
    est ce que vous avez vue la feuille en pièces jointes ?
    c'est ce tableau que je veut remplir en utilisant la fonction SOMMEPROD avec les données de la feuillex

    et la condition sur les cost codes ca change d'une ligne à une autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >=11100 et <11200 ' pour la ligne 5
    >=11200 et <11300 ' pour la ligne 6
    >=11400 et <11500 ' pour la ligne 7
    >=11510 et <11520 ' pour la ligne 8  ...etc


    j'espère que c'est clair maintenant.

    merci ouskel'n'or
    Fichiers attachés Fichiers attachés

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    s'il vous plaît, j'ai essayeé cette portion du programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Dim LastLine As Integer
        Dim k As Integer
        Dim j As Integer
        LastLine = Range("J2").End(xlDown).Row
        For j = 0 To 20
            For k = 0 To 12
             ActiveSheet.Cells("& k+5 &", "& j+4 &").FormulaLocal = _
    "=SUMPRODUCT(('feuillex'!Range(""J2:J" & LastLine & ")>=$B" & k + 5 & ") _
    *('feuillex'!Range(""J2:J" & LastLine & ")>=$C" & k + 5 & ") _
    *('feuillext'!Range(""X2:X" & LastLine & ")>=D$3) _
    *('feuillex'!Range(""W2:W" & LastLine & "))"
            Next k
        Next j
    mais aucun resultat : erreur incompatibilité de type

    veuillez, s'il vous plaît, m'orienter je suis bloqué

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    Bon je me suis cassé la tête et j'ai trouvé quelque chose qui ressemble à ça et c'est bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim LastLine As Integer
        LastLine = Worksheets("feuillex").Range("J65535").End(xlUp).Row
        ActiveSheet.Range("D5:P20").FormulaLocal = _
    "=SOMMEPROD((feuillex!$X$2:$X$" & LastLine & "=D$3)*_
    (feuillex!$J$2:$J$" & LastLine & ">=$B5)*_
    (feuillex!$J$2:$J$" & LastLine & "<$C5)*(feuillex!$W$2:$W$" & LastLine & "))"
    j'ai besoin de vos commentaires

    merci pour tout le monde

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

Discussions similaires

  1. peut on appeler la fonction plot dans une boucle
    Par hanen2010 dans le forum MATLAB
    Réponses: 2
    Dernier message: 27/05/2010, 13h39
  2. fonction mail dans une boucle while
    Par tjoce dans le forum Langage
    Réponses: 5
    Dernier message: 23/04/2010, 18h39
  3. vba fonction split dans une boucle
    Par mymoi dans le forum VBA Access
    Réponses: 6
    Dernier message: 26/05/2009, 10h17
  4. [MySQL] Fonction récursive dans une boucle
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/02/2008, 12h18
  5. Fonction system() dans une boucle for
    Par banban56 dans le forum C
    Réponses: 3
    Dernier message: 16/06/2007, 18h48

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