calcul automatique

ptitmel62

XLDnaute Nouveau
Bonjour,
Dans le cadre d'un projet de gestion de centre de loisirs, je souhaiterai configurer mes fiches de présence sur excel avec un calcul automatique.
voilà sur ma fiche de présence pour chaque jour, je peux cocher (via une macro double clic) :M (matin), C (cantine) et AM (après midi). Pour faciliter la saisie des états CAF, je souhaiterai que si M est cocher, excel me compte 3h, de même si C est coché excel compte 2h, si AM est coché excel compte 4h et si M+C+AM sont cochés excel compte 1 journée.h
est-ce possible?? Comment faire pour attribuer une valeur à une cellule sans que cette valeur apparaisse à l'écran et que cette valeur ne soit prise en compte que lorsque la macro double clic est activée??:confused:
Merci d'avance pour votre aide
Mél
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

Salut Mél,

Comme ca, sans exemple, ca risque d'etre difficile de te filer un coup de main. Est-ce que tu pourrais joindre un exemple de ton fichier avec ce que tu as au départ et le résultat souhaité.

Comme la fonction joindre un fichier n'est toujours pas active, je te propose de passer par le site http://www.cjoint.com/

@+
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

re,

Le code suivant est à mettre dans le module de la feuille adéquat et te permet de calculer le nombre d'heure, je te laisse le soin d'essayer de le faire pour les jours.

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If IsEmpty(Target) = True Then Exit Sub
If Not Intersect(Target, Range("R7:W46")) Is Nothing Then
Exit Sub
End If
For j = 3 To 15 Step 3
If Cells(Target.Row, j).Value = "x" Then
M = M + 3
End If
Next j
Cells(Target.Row, 18).Value = M
For j = 4 To 16 Step 3
If Cells(Target.Row, j).Value = "x" Then
C = C + 2
End If
Next j
Cells(Target.Row, 19).Value = C
For j = 5 To 14 Step 3
If Cells(Target.Row, j).Value = "x" Then
AM = AM + 4
End If
Next j
If Cells(Target.Row, 17).Value = "x" Then AM = Cells(Target.Row, 20).Value + 3
Cells(Target.Row, 20).Value = AM
End Sub

@+
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

re,

Ok pas de soucis, ca fait plaisir quand les gens essaie de comprendre ce qu'on leur propose.

Donc la macro que je te propose est une macro évenementielle : tu les trouveras toutes en faisant Alt+F11, puis à gauche, tu sélectionnes un module de feuille. Ensuite dans le module, tu as 2 combo, dans celle de gauche tu sélectionnes Worksheet, et dans celle de droite tu as tout les choix possible.

Donc j'ai choisi Worksheet_Change qui permet de lancer la macro dès qu'une valeur est changée dans la feuille.

Pour le code la macro :
If IsEmpty(Target) = True Then Exit Sub

Pour le IsEmpty, regarde dans l'aide si tu veux plus de détails, mais ici je l'utilise pour dire que si tu supprimes le contenu d'une cellule, la macro ne se lance pas

If Not Intersect(Target, Range("R7:W46")) Is Nothing Then
Exit Sub
End
If
Ici, je dis que si la cellule modifier appartient à la plage de cellule R7:W46 (correspondant à la plge de résultats) on sort de la macro. Si je ne fais pas ce test, a chaque fois que la macro calcule un résultat et le met sur la feuille, elle recommence au début

Pour le reste du code, il me parait simple donc tu devrais comprendre. Si ce n'est pas le cas, refais signe.

@+
 

ptitmel62

XLDnaute Nouveau
Re : calcul automatique

Bonjour et merci de ta patience pour bien vouloir m'expliquer tout cela...C'est pas tjs évident quand on débute!:p
Il y a encore un ptit truc qui me gène c'est à quoi correspond le "To 15 step 3"???
Sinon, ça fonctionne très bien, mis à part que si je revient sur une case et que je la décoche, il garde mon nombre d'heure comme si la case était toujours cocher. Est-ce possible de faire en sorte que la macro tienne compte des changement??
Encore merci pr ton aide
Mél
 

dg62

XLDnaute Barbatruc
Re : calcul automatique

Bonjour Ptitmel62,
salut Porcinet82


Pour le code la macro :
If IsEmpty(Target) = True Then Exit Sub

Pour le IsEmpty, regarde dans l'aide si tu veux plus de détails, mais ici je l'utilise pour dire que si tu supprimes le contenu d'une cellule, la macro ne se lance pas


Porcinet82 te donne la réponse dans ses explications.

il suffit de supprimer cette ligne.
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

Salut Mél,

Il te suffit d'enlever la ligne de code If IsEmpty(Target) = True Then Exit Sub pour que lorsque tu effaces une croix, ca te modifie le nombre d'heure.

Concernant le For j = 3 To 15 Step 3 le Step correspond à un pas donné à la boucle. C'est à dire que dans ce cas là, au premier tour de la boucle, j prend la valeur 3, puis au second 6, puis 9 et celà jusqu'à 15. J'ai mis ce pas puisque tes colonnes vont de 3 en 3 (M - C - AM / M - C - AM ...)

Voili, voilou,

@+

Edition : Salut Didier, tu as été plus rapide :p
 
Dernière édition:

ptitmel62

XLDnaute Nouveau
Re : calcul automatique

Merci à tous les 2 pour votre aide...Je vais tenter de faire la même chose pour les jours. Je vous tiens au courant de mon avancer...Encore une petite question: est-il possible de mettre une condition au calcul des heures? Je m'explique: Quand M+C+AM sont cocher, je compte un jour, mais pas les heures...J'ai réussis à la faire par le biais de fonctions, mais c'est pas très pratique d'avoir plusieurs tableaux...Pour le faire j' ai mis une fonction si M+C+AM=9 alors J=1 et dans le total des heures M j'ai mis Total M= Somme de tous les "x" - nbre de jour*3. Peut-on faire ceci par le biais d'une macro??
Encore merci
Mél
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

re ptitmel,

En fait, c'est un peu plus complexe que ce que je pensais puisqu'il y a pas mal de condition à prendre en compte, notament lorsque l'on supprime un X ou avec le AM du vendredi. Ce sera peut etre plus long que prévu...

Sinon j'ai un petit soucis. Tu dis que si tu as M+C+Am de coché alors ca te fais une journée, jusque la pas de soucis. Par contre, dans le fichier que tu proposes, dans la colonne Total jours, tu as 3 colonnes avec M, C et AM, donc comment je dois faire? Je n'en tiens pas compte?

Tiens moi au courant,

@+
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

re,

J'ai l'impression de faire un monologue là, m'enfin...
Donc Mél, copie la macro dans ton fichier et dis moi ce que tu en penses, sachant que je ne tiens pas compte du fait que tu ais 3 colonnes qui constitue ta colonne Total jours :
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim j%, jours%, cel%, inter%
If Not Intersect(Target, Range("R7:W46")) Is Nothing Then Exit Sub
For j = 3 To 15 Step 3
    If Cells(Target.Row, j).Value = "x" Then
        M = M + 3
    End If
Next j
Cells(Target.Row, 18).Value = M
For j = 4 To 16 Step 3
    If Cells(Target.Row, j).Value = "x" Then
        C = C + 2
    End If
Next j
Cells(Target.Row, 19).Value = C
For j = 5 To 14 Step 3
    If Cells(Target.Row, j).Value = "x" Then
        AM = AM + 4
    End If
Next j
If Cells(Target.Row, 17).Value = "x" Then AM = AM + 3
Cells(Target.Row, 20).Value = AM
'verif pour les jours
jours = 0
For k = 3 To 17 Step 3
    cel = 0
    For j = 0 To 2
        If Cells(Target.Row, k + j).Value = "x" Then
            cel = cel + 1
        End If
    Next j
    If cel = 3 Then jours = jours + 1
Next k
    
If jours > 0 Then
    Cells(Target.Row, 18) = Cells(Target.Row, 18) - 3 * jours
    Cells(Target.Row, 19) = Cells(Target.Row, 19) - 2 * jours
    If Cells(Target.Row, 17).Value = "x" Then
        inter = Cells(Target.Row, 20) - 4 * (jours - 1)
        Cells(Target.Row, 20) = inter - 3
    Else
        Cells(Target.Row, 20) = Cells(Target.Row, 20) - 4 * jours
    End If
End If
Cells(Target.Row, 21).Value = jours
End Sub

@+
 

Discussions similaires

Réponses
9
Affichages
487

Statistiques des forums

Discussions
312 612
Messages
2 090 227
Membres
104 453
dernier inscrit
benjiii88