VBA en boucle dans excel

claude.dasilva

XLDnaute Junior
Bonjour,
Je cherche à incrémenter un compteur de congés pour chaque individu d'une équipe.
Sur le fichier joint, j'ai l'agent XXX qui dans le calendrier va poser un congé C ou un 1/2 congé noté "xs" ou "xm" selon que ce soit le matin ou l'après-midi.
Je veux qu'en C8 apparaisse le total des congés pris sur toute la ligne 8.
Je lutte avec les boucles vba "for" "for each" et je n'arrive à rien...
Merci de votre aide...
 

Pièces jointes

  • Classeur1.xls
    18 KB · Affichages: 93
  • Classeur1.xls
    18 KB · Affichages: 104
  • Classeur1.xls
    18 KB · Affichages: 107

jp14

XLDnaute Barbatruc
Re : VBA en boucle dans excel

Bonjour et bienvenue sur le forum

Salut tototiti2008

Ci dessous une solution par fonction
Code:
Function calcul_conge(planing As Range)
Dim cel As Range
Dim total As Single
total = 0
For Each cel In planing
    Select Case cel
        Case "C"
            total = total + 1
        Case "xm", "xs"
        total = total + 0.5
    End Select
Next cel
calcul_conge = total
End Function

A coller dans un module et coller "=calcul_conge(G4:U4)" en C8

A tester

JP
 

claude.dasilva

XLDnaute Junior
Re : VBA en boucle dans excel

Bonjour
Merci JP, j'essaye ta solution dès demain
A tototti2008, j'ai fait cette formule avant d'ecrire sur le forum
La formule devait faire sur toute une année
Donc super longue, obligé de passer par 3 cellules
Fichier hyper lourd et je dois faire ça pour les congés, RTT, maladie, formation,...
Donc j'ai pensé au vba pour alléger
Merci.
 

JNP

XLDnaute Barbatruc
Re : VBA en boucle dans excel

Bonjour le fil :),
Au vu de la complexité de la demande, je me permettrais d'améliorer la fonction de JP14 en ajoutant les codes emploi dans la fonction
Code:
Function SommePondérée(Plage As Range, Emploi As String, Temps As String) As Single
Application.Volatile
Dim Cellule As Range, I As Integer
For I = LBound(Split(Emploi, ";")) To UBound(Split(Emploi, ";"))
For Each Cellule In Plage
If Cellule = Split(Emploi, ";")(I) Then SommePondérée = SommePondérée + Split(Temps, ";")(I)
Next Cellule
Next I
End Function
avec la formule
Code:
=SommePondérée(G4:U4;"C;xm;xs";"1;0,5;0,5")
Bonne soirée :cool:
 

JNP

XLDnaute Barbatruc
Re : VBA en boucle dans excel

Re :),
Quelle différence entre emploi et temps ?
Pour les congés, tu as C, xm et xs qui représente en temps respectivement 1, 1/2 et 1/2, soit "C;xm;xs" coïncide avec "1;0,5;0,5" :rolleyes:...
Donc avec la même fonction, si RTT est RT pour 1 journée et rd pour une demi, tu pourras utiliser la même fonction avec "RT;rd";"1;0,5", est-ce plus clair ;) ?
Bon courage :cool:
 

claude.dasilva

XLDnaute Junior
Re : VBA en boucle dans excel

Bonjour à tous,
J'ai oublié de préciser que je pouvais avoir xs ou xm pour autre chose que les congés donc il faut que le calcul vérifie l'association des 2 cellules à chaque fois... Si C tout seul = 1 ; si C et xs ou xm = 0.5
Merci pour votre aide.
 

JNP

XLDnaute Barbatruc
Re : VBA en boucle dans excel

Re :),
J'ai oublié de préciser que je pouvais avoir xs ou xm pour autre chose que les congés donc il faut que le calcul vérifie l'association des 2 cellules à chaque fois... Si C tout seul = 1 ; si C et xs ou xm = 0.5
Bref, ça n'a plus rien à voir, et tout le monde à bossé pour rien :mad:...
Code:
Function SommePondérée(Plage As Range, Emploi As String, Demi As String, Pas As Integer) As Single
Application.Volatile
If Plage.Count Mod Pas <> 0 Then Exit Function
Dim Cellule As Range, I As Integer, J As Integer, Vérif As Boolean
For I = 1 To Plage.Count Step Pas
If Plage.Cells(1, I + 1) = Emploi Then
Vérif = False
For J = LBound(Split(Demi, ";")) To UBound(Split(Demi, ";"))
If Plage.Cells(1, I + 2) = Split(Demi, ";")(J) Then SommePondérée = SommePondérée + 1 / 2: Vérif = True
Next J
If Vérif = False Then SommePondérée = SommePondérée + 1
End If
Next I
End Function
avec
Code:
=SommePondérée(G4:U4;"C";"xm;xs";3)
Sans commentaire :rolleyes:...
Bonne journée :cool:
 

claude.dasilva

XLDnaute Junior
Re : VBA en boucle dans excel

Merci JNP
Ca marche parfaitement...
Quand on est trop dans le problème, on en oublie certains détails, j'en suis vraiment désolé.
Encore merci.
Petit conseil supplémentaire, si je veux parfaire mes connaissances limitées actuellement en vba, as-tu un livre ou autre moyen à me conseiller ? Il y a tellement de livres sur le sujet que je ne sais pas lequel choisir...
 

JNP

XLDnaute Barbatruc
Re : VBA en boucle dans excel

Re :),
Le forum est déjà un bon espace pour apprendre, et je te conseille de visiter les Wikis du forum. Autrement, personnellement, j'affectionne assez "les nuls", mais bon, je dirais qu'en matière de VBA, beaucoup de bouquins sont bien fait car c'est assez carré, contrairement à d'autres logiciels plus intuitifs :rolleyes:...
Bon courage :cool:
 

claude.dasilva

XLDnaute Junior
Re : VBA en boucle dans excel

Bonsoir à tous,
J'ai un nouveau problème.
J'ai essayé d'adapter la solution précédente pour celui là mais je n'y arrive pas.
Je cherche à analyser les colonnes B,D,E pour une journée.
Chaque agent a un poste défini.
En H3, je veux calculer combien j'ai d'agents disponibles pour la fonction XXX.
Je dois déduire 1 si la colonne pointage est remplie et 0,5 si colonne pointage remplie et colonne divers avec xm ou xs.
Même chose en H4 pour la fonction YYY.
En colonne F j'ai mis le résultat attendu du calcul pour chaque agent.
Merci de votre aide.
J'essaie de me former mais là j'avoue que je suis sous pression.
J'ai acheté VBA pour les nuls comme tu me l'as conseillé JNP mais ça risque d'être long...
 

claude.dasilva

XLDnaute Junior
Re : VBA en boucle dans excel

petite précision, dans ce fichier j'ai intégré un 2ème jour pour montrer que la colonne fonction ne bouge pas, ce sera toujours la colonne B
Le calendrier lui continue jour après jour sur la droite...
Et il peut y avoir au maximum 3 fonctions différentes.
Merci pour votre aide...
 

Pièces jointes

  • classeur.xls
    22.5 KB · Affichages: 74
  • classeur.xls
    22.5 KB · Affichages: 80
  • classeur.xls
    22.5 KB · Affichages: 69

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 520
Messages
2 089 298
Membres
104 092
dernier inscrit
karbone57