Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2011, 11h43   #1
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : décembre 2011
Messages : 4
Points : 1
Points : 1
Par défaut SOMME.SI avec variables comme ligne

Bonjour le Forum

Comme mon pseudo l'indique je suis novice en VBA et j'ai besoin d'aide.

Pour mon boulot, je dois à partir d'un tableau, qui peut avoir un nombre de lignes variables en fonction d'une période sélectionnée, créer un autre tableau pour en sortir un graphique (mais je ne veux utiliser un tableau croisé dynamique)
J'ai créé une macro avec somme.si qui fonctionne tres bien avec une période donnée.
mais c'est la cata quand je veux introduire une variable
j'ai essayé ca (et d'autres choses) :
ActiveCell.Formula = "=SUMIF(D2 & lignes1;J & k;E2:E & lignes1)"

Je joins un extrait de mon fichier
Merci pour votre aide
Fichiers attachés
Type de fichier : xls tableaux.xls (36,0 Ko, 4 affichages)
novice06000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 12h41   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour et bienvenue,

Pour les formules de la colonne K, utilise la macro suivante. Son avantage est de ne pas comporter de boucle. C'est le seul avantage d'utiliser les formules de type R1C1. Il y a sans doute beaucoup de choses que tu ne comprends pas. N'hésite pas à poser des questions.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 14/12/2011 par eguarnie
'
 
'
    With Sheets("Feuil1")
        Set plage = .Range(.[J2], .Cells(.Rows.Count, 10).End(xlUp)).Offset(, 1)
        plage.FormulaR1C1 = "=SUMIF(RC[-7]:R[4]C[-7],RC[-1],RC[-6]:R[4]C[-6])"
    End With
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 12h57   #3
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : décembre 2011
Messages : 4
Points : 1
Points : 1
Merci Daniel C pour ta réponse rapide.
Tu penses je viens de tester !
Je me suis peut être mal expliqué . Avec ta macro je trouve en :
Code :
1
2
3
K2 : =SOMME.SI(D2:D6;J2;E2:E6)
K3 : =SOMME.SI(D3:D7;J3;E3:E7)
K4 : =SOMME.SI(D4:D8;J4;E4:E8)
etc
alors que je souhaite
Code :
1
2
3
K2 : =SOMME.SI(D2:D"lignes1";J2;E2:E"lignes1")
K3 : =SOMME.SI(D2:D"lignes1";J3;E2:E"lignes1")
K4 : =SOMME.SI(D2:D"lignes1";J4;E2:E"lignes1")
etc ou lignes1 est le nombre variable de lignes que je trouve dans mon tableau initial.
C'est mieux expliqué ??
novice06000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 13h31   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Non, tu avais bien exposé ton problème. J'ai péché par excés de confiance. Essaie :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 14/12/2011 par eguarnie
'
 
'
    With Sheets("Feuil1")
        Set plage = .Range(.[J2], .Cells(.Rows.Count, 10).End(xlUp)).Offset(, 1)
        plage.FormulaR1C1 = "=SUMIF(R2C4:R6C4,RC[-1],R2C5:R6C5)"
    End With
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 14h52   #5
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : décembre 2011
Messages : 4
Points : 1
Points : 1
Re merci
C'est presque ca !
Sauf que si une ligne est ajouté dans mon tableau initial (ligne7) le calcul se fait toujours sur la ligne 6 et donc je rate une information !
novice06000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 15h01   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Il suffisait de le dire

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 14/12/2011 par eguarnie
'
 
'
    Dim DerLigne As Long, Plage As Range
    With Sheets("Feuil1")
        DerLigne = .Cells(.Rows.Count, 3).End(xlUp).Row
        Set Plage = .Range(.[J2], .Cells(.Rows.Count, 10).End(xlUp)).Offset(, 1)
        Plage.FormulaR1C1 = "=SUMIF(R2C4:R" & DerLigne & "C4,RC[-1],R2C5:R" & DerLigne & "6C5)"
    End With
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 15h35   #7
Invité de passage
 
Homme
Inscription : décembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : décembre 2011
Messages : 4
Points : 1
Points : 1
yes !!
je stagnais sur cette formule :
Code :
Plage.FormulaR1C1 = "=SUMIF(R2C4:R" & DerLigne & "C4,RC[-1],R2C5:R" & DerLigne & "6C5)"
je ne savais pas trop ou mettre les "
Euh ! le 6 n'est pas en trop là : DerLigne & "6C5

en tout les cas un grand merci
Comment fait on pour clore le sujet ??
novice06000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 16h10   #8
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Citation:
Euh ! le 6 n'est pas en trop là : DerLigne & "6C5
Et si !

Pour clore le sujet ? Je n'ai posé qu'une question. Je crois qu'il y a un bouton, en bas à droite.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h48.


 
 
 
 
Partenaires

Hébergement Web