[Catégorie modifiée VB6 -> VBA] Calcul somme à partir d'une base de données

sullivan95 Messages postés 20 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 1 février 2012 - 16 janv. 2012 à 15:43
sullivan95 Messages postés 20 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 1 février 2012 - 18 janv. 2012 à 13:20
Bonjour,

Dans un dossier j'ai :

J'ai une feuille "base" comprenant une colonne quantité de produit A (valeur numérique), une colonne pays B("FRA","GBR"...) et une dernière colonne attestation C (O, N).
J'ai une autre feuille dans lequel je dois indiquer le résultat.

Exemple :
La macro rechercherait dans la "base" toutes les cellules dont la valeur est "FRA" ET "O", calculerait la somme des quantité de produits indiquée dans la colonne A et collerait le résultat dans une cellule spécifique de la seconde feuille.

Pourriez-vous m'aiguiller svp?

11 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 370
16 janv. 2012 à 16:12
Bonjour,

Si la colonne qui contient FRA et O s'appelle variable,

La requête doit être un truc du genre :

SELECT SUM(colonneA) GROUP BY variable WHERE variable="FRA" OR variable="O"
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
16 janv. 2012 à 16:22
Salut

Sulivan : Mets toi dans la tête que VBA n'est pas du VB6.
Tu parles de colonnes : Serais-tu sous Excel ?
Une info importante, non ?

La réponse de Julien considère que tu travailles avec une base de données, comme le dit le titre de ta question, donc que tu sais accéder aux données avec les objets ADODB par exemple.
Là aussi, ça manque de précision.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
16 janv. 2012 à 16:28
Dans la requète de Silvian, le GROUP BY n'a pas d'intérêt ici puisqu'on filtre déjà le pays, et il faut remplacer OR par AND :
SELECT SUM(colonneQuantitéProduit_A)
WHERE colonnePays_B = "FRA"
AND colonneAttestation_C = "O"
Bien sûr, il faut remplacer les noms des colonnes par les vrais noms
0
sullivan95 Messages postés 20 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 1 février 2012
16 janv. 2012 à 17:08
Désolé, je me suis pas très bien expliqué... je ne suis loin d'être un expert en VBA et ca fait longtemps que je n'y ai pas touché.
Je ne connais pas les objets ADODB...

Bref... Je vais essayer d'être plus explicit :

Il s'agit bien d'Excel.

Mon fichier est composé de 2 feuilles : une contient la base (que j'appelle "base" ) les colonnes sont : "Quantité"/"Pays"/"Attestation", l'autre un tableau sur lequel je dois indiquer des quantités globales en fonction de certains critères sur plusieurs cellules (que j'appelle "ajust").

Ma base étant énorme je souhaite automatiser mon fichier.
En gros, je veux appuyer sur un bouton et que mon tableau se remplisse automatiquement.
Au moment où j'appuierai sur le bouton, une cellule spécifique de "ajust" recensera la quantité totale de produit dont le pays est "FRA" et l'attestation est "O".
Puis sur une autre cellule de "ajust", il sera indiqué la quantité totale de produit dont le pays est "GBR" et "N"...

Vous voyez un peu mieux ce que je souhaite faire?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
16 janv. 2012 à 19:22
Ok, plus clair.
Ça, c'est ton cahier des charges, mais sur quoi bloques-tu ?
As-tu regardé dans l'aide de Excel en recherchant "base de données" ou même la fonction SOMME.SI avec laquelle tu pourrais t'en sortir assez facilement ?
0
sullivan95 Messages postés 20 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 1 février 2012
17 janv. 2012 à 13:38
Malheureusement je ne sais pas par où commencer...
J'ai beaucoup de critère à indiquer pour avoir la somme des quantités de produits et la fonction somme.si risque d'être très longue.
J'ai pensé à créer une macro VBA pour gagner du temps mais je suis loin d'être calé dessus.

Je sais appelé une macro via un bouton , par contre je ne sais pas comment calculer une somme en fonction de critère sur plusieurs colonnes et que cette somme soit reporté dans un tableau sur une autre feuille.

Si je peux avoir des bouts de codes j'arriverai ptete à me débrouiller ensuite...
En tout cas merci de ton aide!
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
17 janv. 2012 à 14:09
As-tu tapé "base de données" dans l'aide de Excel, comme je te le suggérais ?
Il faut commencer par là, les infos par l'exemple y sont.
Par exemple, DBSOMME
0
sullivan95 Messages postés 20 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 1 février 2012
17 janv. 2012 à 16:05
Je trouve pas dans l'aide ce que je veux faire...
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
17 janv. 2012 à 19:41
Quelle version de Excel ?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
18 janv. 2012 à 10:18
0
sullivan95 Messages postés 20 Date d'inscription vendredi 13 mars 2009 Statut Membre Dernière intervention 1 février 2012
18 janv. 2012 à 13:20
Bonjour,

Avec BDSOMME ca me renvoie #VALEUR, par contre j'ai demandé de l'aide à une collègue qui a trouvé ca :

[i]Sub ajust()

With Sheets("Base").Activate

Selection.AutoFilter Field:=7, Criteria1:="CHEQUE"
Selection.AutoFilter Field:=10, Criteria1:="SOCIETE"

End With

With Sheets("Ajust").Activate
range("F16").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,BASE!R[317]C[-1]:R[5961]C[-1])"
ActiveCell.Offset(1, 0).range("A1").Select

End With/i


Ca a l'air de fonctionner mais j'ai peur que ca soit lourd non?
0
Rejoignez-nous