VBA début

[Résolu]
Signaler
Messages postés
7
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 juin 2011
-
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
-
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...

La technique du n+1 en VBA marche t'elle ??

Help I need somebody Help !!

Merci aux courageux

4 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
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.

Voila excel et le VBA c'est pas plus compliqué

A+
Messages postés
7
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 juin 2011

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 ??

Merci en tout cas ça s'éclaire !!
Messages postés
7
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 juin 2011

Je sais que je suis chiant... Mais par exemple si tu veux sommer 2 colonnes je m'explique...

Julie            |   12   |   15
Bertrand      |   147   |   96
Julie            |   23   |   87      
Nicolas       |   78   |   87
Nicole         |   99   |   96
Bertrand      |   41   |   32

En VBA et en formule SOMME.SI  ??
Je sais je suis éxigeant mais comme j'ai affaire à des gens de qualité j'en profite !!
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

A1 & "" & SOMME.SI($A$1:$A$7;A1;$B$1:$B$7) + SOMME.SI($A$1:$A$7;A1;$C$1:$C$7).

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

et pour une liste sans doublon tu peux t'imspirer de ça : http://www.codyx.org/snippet_supprimer-doublons-combobox_374.aspx
Essais et revient me voir si tu n'y arrives pas.

Aller courage