ginger1006
Messages postés6Date d'inscriptionlundi 23 février 2009StatutMembreDernière intervention25 février 2009
-
23 févr. 2009 à 15:33
ginger1006
Messages postés6Date d'inscriptionlundi 23 février 2009StatutMembreDernière intervention25 février 2009
-
24 févr. 2009 à 16:53
Bonjour à tous,
Je suis débutant et ne connaît pas grand chose à VBA pour le moment. Pour mon travail j'ai besoin de créer une fonction qui à partir d'une plage de données sélectionnée (manuellement) dans la colonne CA quotidien de mon document me permet d'effectuer les opérations suivantes:
-vérifier la date prévisionnelle de transaction qui se trouve dans la colonne suivante (le CA ne doit être comptabilisé que lors de sa réalisation)
-en fonction de cette date faire la somme des CA quotidiens pour le mois en fonction des dates de réalisation
Je pense savoir comment démarrer la procédure mais je ne sais pas comment metttre en place la boucle :
Function CA_mensuel(listdata)
CA_mensuel = CA_mensuel(listdata)
For Each Item In listdata
listdata étant ma colonne CA quotidien
c'est à ce moment là que je ne sais pas comment indiquer la sélection de la cellule colonne+1, même ligne qui contient la date afin ensuite de pouvoir la vérifier
Une fois la sélection effectuée il me semble que la mise en place d'un test logique simple devrait faire l'affaire
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 24 févr. 2009 à 00:12
Salut
Pour ce qu'il me semble avoir compris, je vois ce qui suit pour la sélection de la cellule de la colonne adjacente.
Function CA_mensuel(listdata)
CA_mensuel = CA_mensuel(listdata)
For Each Item In listdata
Valeur = Item.OffSet(0,1).Value ' <=== sélection même ligne, première colonne à droite
'Puis le test à effectuer pour la suite
'ETC...
ginger1006
Messages postés6Date d'inscriptionlundi 23 février 2009StatutMembreDernière intervention25 février 2009 24 févr. 2009 à 10:32
Merci pour cette réponse rapide. Voici ce que donne ma fonction :
Function CA_mensuel(listdata)
CA_mensuel = CA_mensuel(listdata)
For Each Item In listdata
valeur = Item.Offset(0, 1).Value
If valeur >= 1 / 1 / 2009 And valeur < 1 / 2 / 2009 Then
CA_mensuel = CA_mensuel + Item
End If
Next Item
CA_mensuel = CA_mensuel
End Function
Mais Excel me retourne "#valeur!" quand je l'exécute. Voici un extrait du tableau sur lequel je l'applique, ma colonne de sélection listdata étant la colonne "Estimation du CA".
D'autre part l'inconvénient de cette formule est le suivant: je dois créer une fonction par mois soit 12 fonctions (c'est pas si terrible mais y a-t-il un solution plus économique?)
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 24 févr. 2009 à 15:32
Bonjour ginger
Je te propose ce qui suit, si j'ai bien compris ton problème:
Routine d'appel de la fonction de l'extraction des CA estimés pour chaque mois d'une année et aussi par année différente.
Sub Calcul_CA()
Dim plageCA As Range, CA_Estime As Double
Set plageCA = Selection
CA_Estime = CA_mensuel plageCA, 1, 2009
End Sub
' Fonction de calcul des CA
Function CA_mensuel(listdata As Range, Mois As Byte, Annee As Integer) As Double
Dim DebutMois As Date, DebutMoisSuivant As Date, valeur As Date
Dim Item As Range
' CA_mensuel = CA_mensuel(listdata) <=== ça tourne en rond
DebutMois = DateValue("1/" & CStr(Mois) & "/" & CStr(Annee))
DebutMoisSuivant = DateAdd("m", 1, DebutMois) ' ajout d'un mois
For Each Item In listdata
valeur = DateValue(Item.Offset(0, 1).Value)
If valeur >= DebutMois And valeur < DebutMoisSuivant Then
CA_mensuel = CA_mensuel + Item.Value
End If
Next Item
End Function
Salut et bonne suite.
CNTJC
Vous n’avez pas trouvé la réponse que vous recherchez ?
ginger1006
Messages postés6Date d'inscriptionlundi 23 février 2009StatutMembreDernière intervention25 février 2009 24 févr. 2009 à 16:25
Merci beaucoup ça fonctionne!
Merci pour ta réponse rapide et pour les explications. Une toute petite dernière question (si tu as un peu de tps, j'abuse déjà) je souhaiterais que tu m'expliques ce que tu fais ds cette partie du code:
Sub Calcul_CA()
Dim plageCA As Range, CA_Estime As Double
Set plageCA = Selection
CA_Estime = CA_mensuel (plageCA, 1, 2009)
End Sub
Autant j'ai saisi la deuxième partie (la fonction) autant je ne comprends pas celle ci.
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 24 févr. 2009 à 16:41
Re
Pour ta question sur la Sub "Calcul_CA", c'est uniquement pour tester la fonction dans son utilisation pour des dates différentes qui sont passées en arguments dans celles-ci.
Ce sera à toi d'adapter son appel.