Question sur les sommes

Résolu
Signaler
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014
-
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014
-
Bonjour forum !

Je viens à vous pour une petite question technique sur les sommes:

J'ai plusieurs tableaux ou des chiffres sont enregistrés par mois:

- la première colonne affiche les mois telque janv-07  fev-07 etc...

- les autres colonnes affichent des chiffres par categories

- les tableaux ne commencent pas aux même dates,  certains peuvent commencer en 2006 d'autre en 2008


Ma question:


Je ne sais pas comment m'y prendre pour rechercher dans la première
colonne tous les "06" par exemple et de lui dire d'additionner les
chiffres qui correspondent pour obtenir la somme sur  l'année 2006.


Le but étant de remplir un tableau


J'espère avoir été assez clair au niveau des explications


Merci d'avance

14 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Tu as 2 possibilités: formules Excel ou VBA
Pour chacune de ces possibilités, il y en a plusieurs autres...

L'important est de savoir "Est-ce que c'est important de passer par VBA ?"

Si non, tu utilises une colonne vide comme je t'ai dit et tu copies la formule
= ANNEE(A1)
si la date est bien dans la colonne A et si la date est bien au format Date, sinon il faudrait utiliser
=DROITE(A1;2)  'pour ressortir les 2 derniers caractères ou 4 au besoin

Reste à voir le format qui en ressortira. DROITE va te donner 06. ANNEE pourrait sortir 2006 ou 06 (?). Mais l'important c'est que tu aies ressorti l'année.
Dans une autre colonne, tu fais un SOMME.SI

Disons que les années (la formule précédente) sont en Z et les valeurs à additionner en C
Tu écris dans une cellule vide à la ligne 1
=SOMME.SI(Z:Z; Z1; C:C)
et tu copies cette formule jusqu'en bas de tes données.

Maintenant, si VBA est important, tu pourrais tout simplement refaire ce que je viens d'écrire, mais en code... Mais ce n'est pas le plus propre.
Encore faut-il savoir si vraiment les cellules sont au format Date ou Texte...
Le principe est de boucler de la ligne 1 à la dernière et vérifier si l'année ou la partie de droite est celle recherchée.

nbLignes = Cells(Rows.Count, "A").End(xlUp).Row  'renvoit la dernière ligne
For i = 1 to nbLignes
    If Year(Range("A" & i)) = AnneeRecherchée Then
       Total = Total + Range("C" & i)
    End If
Next

si au format texte
For i = 1 to nbLignes

    If Right(Range("A" & i), 2) = AnnéeRecherchée_à_2Chiffres Then

       Total = Total + Range("C" & i)

    End If

Next

MsgBox Total

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Tu pourrais peut-être utiliser une colonne vide et utiliser la formule ANNEE pour y inscrire seulement l'année de tes dates.

Ensite, il te resterait à faire un SOMME.SI avec cette colonne d'années.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
... ou des sous-totaux
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Merci de ta réponse or le seul problème c'est que les tableaux se
génèrent automatiquement avec des fichier .txt et je ne peux pas les
modifier...

Est-ce que tu penses possible de lui dire d'additionner si 06 pour ( janv-06,fev-06,etc....) dans la première collonne ??

Ca marchera peut-être non ?


Je tape comme ça ?

Sub somme(année As Byte)

    Range("Feuil1!H27").select

    ActiveCell.FormulaR1C1 = "=[SUMIF(Feuil2!A:A,année,Feuil2!L:L)]" 

End Sub

              trad: Chercher année (par exemple6) dans colonne A et additionner les données de la colonne L

pour 2006:  Call somme(6)

pour 2007:  Call somme(7)

pour 2008:  Call somme(8)


N'hésitez pas à me corriger car je débute merci
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Est-ce que tes dates sont au format date ou texte ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Elles sont au format texte...


Mais je comprend pas un truc, losque l'on définit un critère dans un somme si ,

il faut que ce soit l'élèment entier de la cellule où on peut chercher juste une parti?
Messages postés
1229
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
Bonjour,

Ma question va peut etre paraitre bête mais pourquoi ne pas utiliser la fonction Recherche de Excel?

SLB
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Autant pour mois les dates sont au  format date !!


Euh oui mais avec la fonction recherche comment je fais après pour lui
dire de prendre la ligne qui correspond pour faire la somme....

c'est tendu !!


Je pensais faire une boucle avec i et tout le tralala j'ai deja l'algo ....reste plus qu'a le mettre en VBA
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Pour les pros, mon l'algo donne ça:


a0 = cell(1, 1).Value

curRow = 1

lastYear = année(ao)

curSum = 0


pour i de 2 à fin

    a0 = cell(i, 1)

    curYear = année(a0)

    si curYear = lastYear

        worsheets.cell(curRow, 2).Value = curSum

        worsheets.cell(curRow, 1).Value = lastYear

        curSum = 0

        curRow = curRow + 1

    fin si

   

    lastYear = curYear

    curSum = curSum + cell(i, x)

fin pour


N'hésitez pas à reagir


Merci d'avance
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

bon....j'arrive pas  le mettre en VBA ....quesque je suis nul
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

c'était quoi la solution que tu pensais MPi pour la format des dates ??
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

bon je continue tout seul

ça marche toujours pas mais ça ressemble à du VBA Youpi!!


j'ai mis tout dans la même feuille pour tester:

Sub autosomme()


a0 = ActiveSheet.Cells(1, 1).Value

curRow = 1

lastYear = DatePart("yyyy", ao)

curSum = 0


For i = 2 To ActiveSheet.Colunms.End(xlUp).Row

    a0 = ActiveSheet.Cells(i, 1)

    curYear = DatePart("yyyy", ao)

    If curYear <> lastYear Then

        ActiveSheet.Cells(curRow, 2).Value = curSum

        ActiveSheet.Cells(curRow, 1).Value = lastYear

        curSum = 0

        curRow = curRow + 1

    End If

   

    lastYear = curYear

    curSum = curSum + ActiveSheet.Cells(i, 5)

Next


ActiveSheet.Cells(curRow, 2).Value = curSum

ActiveSheet.Cells(curRow, 1).Value = lastYear


End Sub
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Merci beaucoup MPi !


c'est super sympa! à chaque fois tu me sauve dis donc


Donc elle sont bien au format date puisque la première solution marche parfaitement

Je suis obligé de le faire en VBA car les tableaux sont automatisé et font jamais la même taille.


donc c'est parfait je vais pouvoir avancé grâce à toi ! merci pour lumière
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Voila ca marche bien


merci à tous