Gokunpseudo
Messages postés7Date d'inscriptionjeudi 18 juin 2009StatutMembreDernière intervention10 juin 2011
-
18 juin 2009 à 15:13
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 2013
-
19 juin 2009 à 15:45
Bonjour je suis un étudiant qui touche un peu en langage C et qui pour des raisons perso doit se mettre au VBA.
Sauf que je ne m'en sort pas c'est l'horreur ce code c'est d'un compliqué...
Je ne connais aucune commande bref j'ai grandement besoin d'aide je compte apprendre sur le tas.
Et pour commencer j'aimerais être capable de faire une somme conditionnelle.
Par exemple sur une colonne j'ai une liste de prénom et sur une autre des valeurs:
Lucie | 12
Sandra | 15
Julien | 102
Julien | 89
Lucie | 14
Sandra | 87
Lucie | 12
Et je souhaite sommer les valeurs de julien entre elles puis celle de lucie etc...
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 18 juin 2009 à 17:50
Salut,
déjà y a pas besoin du VBA pour faire ce genre de chose:
Il existe dans excel une fonction qui s'appelle : Somme.Si
par exemple en admetant que ton exemple de tableau soit en A1:B7
En C1 tu Ecris :
A1 & "" & SOMME.SI($A$1:$A$7;A1;$B$1:$B$7)
En suite en VBA le n+1 peu ce faire de plusieurs façon, en voici une
- la boucle for next:
par exemple toujours en supposant que ton tableau soit en A1:B7 :
'Demo boucle sur adresse cellule
Sub Demo()
Dim n As Long, MonTableau As Range
Dim ResultatSomme As Integer, SommePour As String
SommePour = "lucie"
Set MonTableau = Range("A1:B7")
For n = 1 To MonTableau.Rows.Count
If LCase$(MonTableau.Cells(n, 1).Value) = LCase$(SommePour) Then
ResultatSomme = ResultatSomme + MonTableau.Cells(n, 2).Value
End If
Next
MsgBox SommePour & "=" & ResultatSomme
End Sub
autre solution toujours avec une boucle For Next
'Demo boucle sur collection de cellules (Range)
Sub Demo2()
Dim n As Long, MonTableau As Range, Cellule As Range
Dim ResultatSomme As Integer, SommePour As String
SommePour = "lucie"
Set MonTableau = Range("A1:B7")
For Each Cellule In MonTableau.Columns(1).Cells 'collection des cellules de la colonne 1 de MonTableau
If LCase$(Cellule.Value) = LCase$(SommePour) Then
ResultatSomme = ResultatSomme + Cellule.Offset(, 1).Value 'offset sert a ce decaler sur la cellule d'à-coté
End If
Next
MsgBox SommePour & "=" & ResultatSomme
End Sub
Dans l'editeur VBE(Visual Basic Editor) si tu veux une aide sur une propriété par exemple la propriété Offset, il suffit de placer le curseur sur Offset et d'enfoncer la touche F1 de ton clavier.
Gokunpseudo
Messages postés7Date d'inscriptionjeudi 18 juin 2009StatutMembreDernière intervention10 juin 2011 18 juin 2009 à 18:02
Ok mais là tu triche !!
Enfin c'est ma faute j'ai pas était assez précis, mais là t'as mis "lucie". Ce qui m'intéresserait de faire, c'est plutôt un truc du genre
1500 chaine de caractère différent du style Paul, Grégoire, Karim, Guillaume...
Parce que là si j'ai bien compris le code ça ne marche que pour 1 ??
ben comment ça je triche ??? je te donne juste une piste apres à toi de te remonter les manches. Si comme tu le dis tu as fait du C et si je te parle de variable tableau cela doit te parler non ? Creer une liste de noms sans doublon que tu mets dans un tableau, en suite il suffit de boucler sur le tableau pour remplacer lucie par les autre noms.
aller encore un peu d'aide.
declaration d'une variable tableau en VB6/VBA:
Dim MaVarTableau(10) As String
ou alors:
Dim MaVarTableau() As String
ReDim MaVarTableau(10)
Ou bien encore:
Dim MaVarTableau() As String, i As Long
For i=1 to 10
Redim Preserve MaVarTableau(i)
MaVarTableau(i-1) = UnNouveauNom 'i-1 car la premiere valeur d'une variable tableau ce trouve en MaVarTableau(0)
Next