Fonction

Résolu
ginger1006 Messages postés 6 Date d'inscription lundi 23 février 2009 Statut Membre Dernière intervention 25 février 2009 - 23 févr. 2009 à 15:33
ginger1006 Messages postés 6 Date d'inscription lundi 23 février 2009 Statut Membre Dernière intervention 25 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

Quelqu'un aurait il une idée?

Je ne sais pas si c'est très clair.

Merci d'avance pour vos réponses

7 réponses

cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
24 févr. 2009 à 15:36
Re

Je rectifie la ligne suivante, il manquait les parenthèses
CA_Estime =
CA_mensuel( plageCA, 1, 2009)



Bye

CNTJC
3
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
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...

Bonne continuation.
CNTJC
0
ginger1006 Messages postés 6 Date d'inscription lundi 23 février 2009 Statut Membre Dernière intervention 25 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?)

QQn aurait-il une idée?

Merci d'avance

<col style=\"width: 78pt;\" width=\"104\" /><col style=\"width: 60pt;\" span=\"2\" width=\"80\" /><col style=\"width: 94pt;\" width=\"125\" />----
,  , VENTES,  , ----
Date, Capital, Estimation
du CA, Date
prévisionnelle de signature, ----
Janvier ,  ,  ,  , ----
01/01/2009,  , 3000, 31/12/2009, ----
03/01/2009,  , 4000, 10/01/2009, ----
05/01/2009,  , 5000, 14/01/2009, ----
10/01/2009,  , 2345, 21/02/2009
0
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
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
0

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

Posez votre question
ginger1006 Messages postés 6 Date d'inscription lundi 23 février 2009 Statut Membre Dernière intervention 25 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.

Merci encore et bonne journée à toi!!

Ginger
0
cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
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.

Ai je bien été clair ?

Tchao

CNTJC
0
ginger1006 Messages postés 6 Date d'inscription lundi 23 février 2009 Statut Membre Dernière intervention 25 février 2009
24 févr. 2009 à 16:53
Oui je crois que j'ai compris


Merci bcp


bye!


 


Ginger
0
Rejoignez-nous