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
 

ptitmel62

XLDnaute Nouveau
Re : calcul automatique

Bonjour,
Désolé de ne répondre qu'aujourd'hui, mais j'ai pas mal de taf en ce moment...Je vais tester ta macro porcinet et te dis quoi. Pour la colone des jours, il ne faut pas tenir compte de M C et AM en effet.
Par contre Jelf, tu me dis que tu as mis ton exemple, mais je ne le vois pas.
Bon, je fais les tests et vous dis quoi
Merci de votre aide
Mél
 

ptitmel62

XLDnaute Nouveau
Re : calcul automatique

Re,
J'ai testé vite fait ta macro porcinet et ça à l'air de correspondre tout à fait à ce que je cherche. Par contre, j'aimerai que tu m'expliques un peu la macro, que je comprenne et puisse le refaire plus tard.
De même, comment intégrer une macro qui calcul les totaux de tous les jours par exemple??
Savez-vous également où je peux avoir un peu plus d'info sur les macro, histoire de bien m'y mettre?
Merci de votre aide.
Mél
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

Salut Mél,

Pour la macro je vais t'expliquer le fonctionnement général. Si tu veux voir son exécution pas a pas, tu vas dans l'éditeur vba (Alt+F11) et tu mets un Point d'arret (rond rouge sur la gauche) sur la première ligne de la macro (If Not Intersect(Target, Range("R7:W46")) Is Nothing Then Exit Sub) soit en faisant F9, soit en allant Débogage/Basculer le point d'arret.

Ensuite tu lances l'execution pas à pas avec la touche F8 et tu regardes en même temps ce qui se passe sur la feuille excel.

Explications :
Tout d'abord, je teste avec les boucles combien de A, de M et d AM sont coché, j'incrémente une variable si c'est le cas et je mets le résultats dans la ligne concernée. (Ca correspond à toute la première partie du code)

Ensuite, je fais un test pour savoir si tes groupe de trois colonne sont remplit et consitue une journée entière ou non. Je fais donc une boucle sur les colonnes 3 à 17 avec un pas de 3 et je reboucle a l'intérieur de cette boucle sur les groupes de 3 colonnes afin de savoir si les trois sont cohées ou non. Si c'est le cas, j'incrémente ma variable jours sinon je passe à l'itération suivante.
Si je n'ai aucun jours, ce n'est pas la peine d'executer le code suivant, si j'en ai au moins, je dois incrémenter la colonne Jours totals et soustraire les heures contenus dans les colonnes Heures totales.

Voili, voilou,

@+

PS : Il doit également etre possible de rajouter un bout de code qui te calculerai les totaux de tous les jours, si tu as un souci, refais signe
 

ptitmel62

XLDnaute Nouveau
Re : calcul automatique

Re bonjour,
Je refais appel à vous car je ne m'en sorts pas avec la macro pour calculer touts les totaux... Je voudrais calculer tout les totaux: Par exemple dans la 1ere colonne, je voudrais tous les totaux de M semaine 1, semaine 2, semaine 3, semaine 4, semaine 5. et cela pour chaque colonne M, C et AM,sachant que chaque case = 1 si elle est cocher "x".
Merci de votre aide
Mél
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

Salut Mél,

Je viens de regarder ton fichier, et j'ai donc adapter la macro. Cependant, comme je ne sais pas ce que tu voulais exactement, disons que j'ai pris large, et que la macro te fais les sous-totaux et le totaux.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim j%, jours%, cel%, inter%
Dim p%, x%, L%, S%, cpt%, cell As Range

If Not Intersect(Target, Range("R7:W46")) Is Nothing Then Exit Sub
If Not Intersect(Target, Range("C42:W47")) 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

'Calcul des Sous-Totaux
For L = 1 To 5
    cpt = cpt + 1
    For p = 3 To 17
        x = 0
        For S = 6 + cpt To 41 Step 5
            If LCase(Cells(S, p).Value) = "x" Then x = x + 1
        Next S
        Cells(41 + cpt, p).Value = x
    Next p
Next L
'Calcule des Sous-Totaux : Total Heure et Total Jours
cpt = 0
For L = 1 To 5
    cpt = cpt + 1
    For p = 18 To 21
        x = 0
        For S = 6 + cpt To 41 Step 5
            x = Cells(S, p).Value + x
        Next S
        Cells(41 + cpt, p).Value = x
    Next p
Next L
'Calcul des Totaux
For p = 3 To 17
    x = 0
    For Each cell In Range(Cells(7, p).Address(0, 0), Cells(41, p).Address(0, 0))
        If LCase(cell) = "x" Then x = x + 1
    Next cell
    Cells(47, p).Value = x
Next p
'Calcule des Totaux : Total Heure et Total Jours
For L = 18 To 21
    x = 0
    For p = 42 To 46
        x = Cells(p, L).Value + x
    Next p
    Cells(47, L).Value = x
Next L
End Sub

Tiens moi au courant,

@+
 

ptitmel62

XLDnaute Nouveau
Re : calcul automatique

Bonjour Porcinet,
J'ai tester ta macro et j'avoue que tu as fait ça très bien!!! Maintenant, comme à mon habitude je comprend pas tout!
Et puis il y en a trop: je n'ai pas besoin du total de case cochée par colonne, juste celui par semaine. Ensuite, dans la colonne total des heures, je souhaite juste avoir la somme total des toutes les heures en R42 et pour les jours, juste le total global de jours en U 42... Voilà, voilà, mais comme je ne comprend pas toutes la macro, je ne sais pas où je dois intervenir pour suprimer les caculs en trop.
J'ai encore une petite modification à faire... Les AM des lundi mardi mercredi et jeudi sont = à 4.5 (je me suis trompée auparavant il me semble) et les AM du vendredi sotn = = 3. Jusdque là, je n'ai pas de problème, j'ai bien modifié la macro et tout baigne, sauf pour le calcul des jours car si je coche M+C+AM du lundi par exemple, excel me compte 1 journée, mais garde une valeur de 0.5 dans la colonne AM. où dois je modifiais la macro??
Encore merci pour ton aide, elle m'est bien précieuse...:p
Mél
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

Salut Mél,

Tout d'abord concernant le 4.5 pour les AM, etant donné que tu as modifié la première partie du code (pour l'addition) il te suffit de modifier a partie suivante :

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.5 * (jours - 1)
Cells(Target.Row, 20) = inter - 3
Else
Cells(Target.Row, 20) = Cells(Target.Row, 20) - 4.5 * jours
End If
End If
Cells(Target.Row, 21).Value = jours



Ensuite concernant le reste, si j'ai bien compris, tu veux en R42, la somme de la plage R42:T46 (que moi j'ai calculé) ainsi qu'en U42, la somme de la plage U42:U46.

Je te laisse essayer de modifier le code, il te suffit de travailler sur le code présent apres 'Calcule des Sous-Totaux : Total Heure et Total Jours

Si tu as un soucis, n'hesite pas a revenir,

Voili, voilou,

@+
 

ptitmel62

XLDnaute Nouveau
Re : calcul automatique

OK merci Porcinet, j'ai effectué le changement pour le calcul des heures et des jours et je n'ai plus de problème. Pour le calcul des totaux, je m'y pencherai ce soir et te tiens au courant de mon avancer, mais je pense que ça devrait aller...;)
Sinon, je souhaite importer dans mon fichier les nom, prénom, n° CAF, employeur de la mère et employeur du père comme sur mon modèle, c'est-à-dire dans une même colonne les uns en dessous des autres, mais ne sais pas comment m'y prendre...Toutes ses infos (nom, prénom...) sont stockés dans une base de donnés access. Saurais-tu comment je peux faire???
Encore merci pour ton aide
Mél
 

porcinet82

XLDnaute Barbatruc
Re : calcul automatique

re,

J'ai vu que tu avais fait un autre fil pour l'importation de tes données et Luc t'a répondu qu'il vallait mieux importer tes données normalement et les traiter par la suite.
Je ne suis pas un spécialiste de l'importation de données entre Acess et Excel. Si tu n'as pas d'autres réponses, ce qui m'étonnerai, il faudra voir a adapter une macro pour traiter tes informations apres les avoir importer pour les mettres au format souhaité.

Bon courage,

@+
 

Discussions similaires

Réponses
9
Affichages
479

Statistiques des forums

Discussions
312 500
Messages
2 089 013
Membres
104 004
dernier inscrit
mista