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 :

Somme.si avec un nombre de lignes variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Par défaut Somme.si avec un nombre de lignes variables
    Bonjour,

    Mon problème se rapproche assez de ceux de cette discussion, mais debutant en VBA, j'ai du mal à adapter les solutions à mon cas.

    1) Je vais vous exposer mon cas,
    2) puis vous montrer mes tentatives.

    Dans une feuille excel il ya des données, les intitulés des colonnes sont en ligne 4.

    Le nombre de ligne du tableaux sera variabe.

    Je souhaite qu'en colonne G, deux cellules sous la derniere cellule du tableau, s'affiche le resultat d'une fonction SUMIF.

    Elle regarde les données dans la collone C, le critère est deux cellules sous la derniere cellule de la colonne F, et elle somme les données de la colonne V.

    Voilà ma première tentative
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macro11()
    '
    ' Macro11 Macro
     
    Dim i As String
    Dim j As Integer
    i = Range("F5").End(xlDown).Offset(2, 0).Value
    j = "= SumIf((Range(C5, Selection.End(xlDown).Value);" = " i; (Range(V5,Selection.End(xlDown).Value))"
    Range("G5").End(xlDown).Offset(7, 0).Value = j
     
    End Sub
    Mais rien ne se passe du tout.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ActiveWorkbook.Names.Add Name:="plage", RefersTo:="=Sheet1!$C$5:$C$" & Range("Activesheet!C5").End(xlDown).Row
     
    ActiveWorkbook.Names.Add Name:="somme_plage", RefersTo:="=Sheet1!$V$5:$V$" & Range("Activesheet!V5").End(xlDown).Row
     
    ActiveCell.Formula = _
    "=SUMIF(plage," = " Range(F5).End(xlDown).Offset(2, 0).Value,somme_plage)"
    Voila, la non plus ca ne marche pas.
    Pourriez vous m'aider svp.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonsoir,

    N'oubliez pas que la touche F1 est votre amie

    Rappel de ce que dit l'aide en ligne sur cette fonction

    WorksheetFunction.SumIf, méthode
    Ajoute les cellules spécifiées par un critère donné.
    Syntaxe

    expression.SumIf(Arg1, Arg2, Arg3)

    expression Variable représentant un objet WorksheetFunction.

    Paramètres

    Nom Obligatoire/Facultatif Type de données Description
    Arg1 Obligatoire Range Range - plage de cellules qui doit être évaluée par le critère.
    Arg2 Obligatoire Variante Criteria 1, criteria 2, … - critères sous forme de nombre, d'expression, de référence de cellule ou de texte, qui définit les cellules à ajouter. Par exemple, les critères peuvent être exprimés sous la forme « 32 », « >32 » ou « pommes ».
    Arg3 Facultatif Variante Sum_range - cellules réelles à ajouter si les cellules correspondantes dans la plage correspondent aux critères. Si sum_range est omis, les cellules de la plage sont évaluées par les critères et ajoutées si elles correspondent aux critères.
    Voici des codes qui fonctionnent correctement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim MaPlage As Range
     
    Set MaPlage = Range("A1:C" & [A1].End(xlDown).Row)
     
    [B13] = Application.SumIf(MaPlage.Columns(3), 3, MaPlage.Columns(2))
    [B14] = Application.SumIf(MaPlage.Columns(3), "=4", MaPlage.Columns(2))
    [B15] = Application.SumIf(MaPlage.Columns(3), "=5", MaPlage.Columns(2))
    [B16] = Application.SumIf(MaPlage.Columns(3), "=6", MaPlage.Columns(2))
    [B20] = Application.SumIf(MaPlage.Columns(3), ">3", MaPlage.Columns(2))
    [B21] = Application.SumIf(MaPlage.Columns(3), ">3")
     
    Set MaPlage = Nothing
    __________________
    Cordialement
    Albert

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Par défaut Super,
    Merci ça fonctionne pas mal, encore une question,
    quelle est la syntaxe pour que le critère soit la valeur d'une cellule qui peut changer de ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim MaPlage As Range
    Set MaPlage = Range("C5:V" & [C5].End(xlDown).Row)
    [AA1] = Application.SumIf(MaPlage.Columns(1), "=01A", MaPlage.Columns(20))
    Ok pour ca.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [AA1] = Application.SumIf(MaPlage.Columns(1), " = " Range(F5).End(xlDown).Offset(2, 0).Value, MaPlage.Columns(20))
    Ca c'est pas bon... une idée

  4. #4
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonsoir,

    quelle est la syntaxe pour que le critère soit la valeur d'une cellule qui peut changer de ligne.
    Touche F1 - Rappel de ce que vous dit l'aide en ligne ?

    Arg2 Obligatoire Variante Criteria 1, criteria 2,
    - critères sous forme de nombre, d'expression, de référence de cellule ou de texte, qui définit les cellules à ajouter.
    Par exemple, les critères peuvent être exprimés sous la forme « 32 », « >32 » ou « pommes ».
    Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Rng As Range
     
    Set Rng = [C2]
     
     [C13] = Application.SumIf(MaPlage.Columns(3), [C2], MaPlage.Columns(2))
     [D13] = Application.SumIf(MaPlage.Columns(3), Rng, MaPlage.Columns(2))
    ______________
    Cordialement
    Albert

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MaPlage As Range
    Set MaPlage = Range("C5:V" & [C5].End(xlDown).Row)
    [AA1] = Application.SumIf(MaPlage.Columns(1), "=01A", MaPlage.Columns(20))
    Après une lecture attentive de l'aide en ligne et un peu de réflexion vous
    pouviez optimiser votre code

    Pourquoi créer un tableau de 20 colonnes

    Rappel de l'aide ligne
    Arg1 - plage de cellules qui doit être évaluée par le critère.
    Arg3 Sum_range - cellules réelles à ajouter
    si les cellules correspondantes dans la plage correspondent aux critères
    alors que 2 plages suffisent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim ColCritere As Range, ColSum As Range, Rng As Range
    Dim DerLgn As Long, Total As Double
     
    DerLgn = Range("C" & Rows.Count).End(xlUp).Row
     
    Set ColCritere = Range("C5:C" & DerLgn)
    Set ColSum = Range("V5:V" & DerLgn)
    Set Rng = [C2]
     
    Total = Application.SumIf(ColCritere, Rng, ColSum)
    ________________
    Cordialement
    Albert

Discussions similaires

  1. Tableau avec nombre de lignes variable
    Par grrd dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 28/05/2013, 12h05
  2. somme de valeurs d'une colonne dans une feuille avec un nombre de lignes inconnus
    Par Platon d'athene dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/09/2012, 15h53
  3. Somme.si avec un nombre de ligne variables
    Par Atofi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/01/2010, 14h30
  4. Interface avec un nombre de champs variable
    Par vladvad dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/06/2007, 11h19
  5. Lecture fichier texte avec un nombre de lignes à ignorer
    Par TravelMate dans le forum Langage
    Réponses: 20
    Dernier message: 02/08/2006, 11h59

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