VBA, somme suivant mois en cours

Bonjour le forum.

Avant tout bonne année 2019 a tous.

Je viens demander de l'aide afin d'afficher une somme de données en fonction du mois de la date saisie.

Ci joint un fichier representatif

34test-mois.xlsm (54.79 Ko)

J'aimerai que lorsqu'on entre un nom dans la box ''nom'' que la somme des données pour la periode du mois en cours en fonction de la date dans la box ''date'' (07/01/2010 = mois de janvier, 02/09/2010 = mois de septembre) soit afficher dans la box ''total mois''.

Par exemple en entrant ''A'', et la date du 12/03/2010 que la somme des valeurs de ''A'' pour le mois de mars s'affiche en ''total mois''.

Merci d'avance pour votre aide precieuse

Hello,

Ci-joint le fichier modifié.

J'ai pas fait de gestion d'erreur je te laisse t'amuser un peu

Tu feras attention aussi au nombre de colonnes que tu utilises ...

Dans ton fichier, tu t’arrêtes a 6 mois soit 182 colonnes... Si tu veux le faire sur un an complet, il faut que tu passes la variable "i" en "integer"

Rag.

Merci Rag, j'ai testé ca marche.

Je vois que tu as limité la plage de nom, dans mon fichier dorigine le tableau est plus grand que cela.

Serait'il possible d'ajouter 2 autres box et renvoyer le resultat du calcul pour les meme nom dans les autres feuilles?

Augmenter de 2 la plage de nom ok.

En revanche pour le second point j'ai pas tout compris..

Tu veux que le résultat affiché soit l'addition de toutes les feuilles du mois de la date de ton formulaire avec le nom de ton formulaire ?

Ex : Nom = "G" date = 01/01/19 résultat = somme G, mois 1, de la feuille 1 + feuille 2 + feuille x ?

Ou alors tu veux sur chaque feuilles avoir le bouton de la macro ( car je l'ai mis juste sur la première feuille) ?

Bonjour Rag

Euh non pas comme ca.

Suivant ton exemple j'aimerais avoir sur la feuille 1 le meme userForm avec 3 box (une dediée a chaque feuille en fait). En entrant ''G'' comme nom on aura la somme de ''g'' de la feuille 1 dans la box 1, somme de ''gg'' de la feuille 2 dans la box 2

Et somme de ''g'' de la feuille 3 dans la box 3.

Ca sera genre une synthese des 3 feuille et ca evitera de mettre des userform sur chaque feuille, d'autant plus qu'on retrouve les meme nom et meme date sur toutes les feuilles.

Merci

Voila. Si c'est ok pour toi, passe le sujet en résolu

Rag

Je pensais a quelque chose dans ce genre, pour ne pas avoir afficher les feuilles.

test

Désolé Rag j'avais pas fait attention au code. J'ai modifié les code que tu avais laissé en commentaire pour les diriger vers les autres feuilles et je crois bien que ca marche.

Du coup tu avais pensé à cette eventualité.

Correction a porter?

Et hop !

ca marche!

Merci.

Une derniere question, tu m'as conseillé d'utiliser integer comme type de variable pour eviter des erreurs.

Sur le fichier original, j'ai un code qui cherche dans une colonne date identique a celle la, mais par moments ca met imcompatibilité de type et par moments (3 ou 5 minutes après) quand je reessai sans modif ca marche. Jy comprend rien. Le type de variable peut faire ca?

La valeur max d'une variable Byte c'est 255.

Dans ton cas :

la colonne max est la 182 donc on est dans la bonne tranche.

182 colonnes sur 6 mois.

Maintenant admettons que tu décides de mettre 1 an sur une feuille cela donne (182 -2)*2 = 360

360 est au dessus des 255 donc cela va générer une erreur.

Il faut par conséquent utiliser une variable type Integer qui elle accepte les valeurs jusque 30 000 environ.

Pour ton problème, mets le code dans ton post que je regarde.

Voila le code :

Private Sub CommandButton7_Click()

Dim Lig As Long, Col As Long, r As Range, Rest&

Rest = Application.WorksheetFunction.VLookup(ComboBox1, Sheets("STOCK").Range("A2:D29"), 4, False)

If Me.TextBox86 = "" Or TextBox82 = "" Or TextBox1 = "" Or ComboBox1 = "" Then

MsgBox "Donn�e(s) manquante(s)"

Exit Sub

End If

If Me.TextBox82 > Rest Then

MsgBox "autoris�e"

Exit Sub

End If

With Sheets(Me.ComboBox1.Value)

On Error Resume Next

Lig = Application.Match(Val(Me.TextBox86), Sheets(Me.ComboBox1.Value).[noms], 0)

Col = Application.Match(Me.TextBox1, Application.Transpose(Sheets(Me.ComboBox1.Value).[dates].Value), 0)

If Err = 0 Then

With Application.Index(.[tableau], Lig, Col)

.Value = Me.TextBox82.Value

.ClearComments

If Me.TextBox85.Value <> "" Then .AddComment: .Comment.Text Text:=Me.TextBox85.Value

End With

Else

MsgBox "Donn�e(s) incorrecte(s)"

End If

End With

TextBox82 = ""

TextBox85 = ""

ComboBox1 = ""

End Sub

Ca coince au niveau de Col = Application.Match(Me.TextBox1, Application.Transpose(Sheets(Me.ComboBox1.Value).[dates].Value), 0)

En fait dans un fichier identique a celui utilisé pr les somme, on cherche en fonction du nom, la date demandée et on ecrit dans la cellule correspondante.

Parfois ca marche, parfois non et sans aucune modif ca remarche encore. je suis perdu

Quand l'erreur apparaît c'est qu'elle ligne qui est surlignée ?

Cette ligne

Col = Application.Match(Me.TextBox1, Application.Transpose(Sheets(Me.ComboBox1.Value).[dates].Value), 0)

J'ai du mal à comprendre ce que tu fais avec cette ligne.

Je pourrai pas t'aider avec juste le code

Tu peux faire un fichier exemple ?

Actuellement je ne peux pas en faire. Mais j'en fais dès que possible

Bonsoir le forum

Je reactive ce poste parceque j'ai une erreur sur mon fichier.

Lorsque je lance l'userform en etant sur une des feuille (TAV, VAT ou TAT) ca marche nickel, mais lorsque je me positionne sur la feuille interface, j'ai une erreur. J'ai l'impression que la procedure recherche les données sur la feuille active et la je ne sais pas comment corriger.

Rag, du coup j'ai pas eu besoin de faire un autre fichier car il s'agit du meme comportement avec le code envoyé ce matin.

Possible de m'aider a resoudre ce probleme?

Merci d'avance

Hello,

Le fichier en retour.

RaG

Rechercher des sujets similaires à "vba somme suivant mois cours"