Vba : Function pour calculer amplitude d'heures ou Nb.si

cibleo

XLDnaute Impliqué
Bonsoir le forum,

J'expose mon problème et poserai cette question.

Dois-je utiliser le vba et une procédure de type "Function" ou une formule style Nb.si me suffira t-elle ?

Je rentre dans le détail :

Pour contourner 1 problème de calcul d'heures, j'ai affecté à une plage de cellules le format [hh:mm] et la formule suivante =Nb.si($C9:$IJ9;"N")/288 dans la cellule située en bout cette ligne.

Le résultat ainsi trouvé se traduisant en nombre d'heures effectuées puisque pour Excel 1 cellule = 24:00

En divisant par 288, 1 cellule contenant "N" sera égale à 5 minutes de travail effectué.

Si la formule décrite ci-dessus me permet de calculer le total d'heures effectuées, j'aimerais aussi calculer l'amplitude d'heures de cette même ligne.

Concrétement trouver la première et dernière occurence (N) figurant sur ma plage et compter ainsi le nombre de cellules les séparant qu'elles soient vides ou contenant "N".

Dois je passer par une formule style Nb.si ou utiliser le VBa et une procédure de type Function ?

Quelle solution dois-je adopter ?

Merci de votre aide Cibleo.
 
Dernière édition:

cibleo

XLDnaute Impliqué
Re : Vba : Function pour calculer amplitude d'heures ou Nb.si

Re Le Forum,

Pour plus de clarté, je vous joins un fichier avec un mot d'explications dans la feuille nommée "modele".

Bonne soirée Cibleo
 

Pièces jointes

  • Présence1.zip
    47.5 KB · Affichages: 108
  • Présence1.zip
    47.5 KB · Affichages: 106
  • Présence1.zip
    47.5 KB · Affichages: 105

TooFatBoy

XLDnaute Barbatruc
Re : Vba : Function pour calculer amplitude d'heures ou Nb.si

C'est ma première fonctioon, alors va falloir être plus qu'indulgent, hein... ;)

Essaye donc cette fonction :
Code:
Function Amplitude(Target As Range)
Dim A As Range
Dim Prem As Integer
Dim Dern As Integer

    Prem = 0
    Dern = 0
    For Each A In Target
        If A.Value = "N" Then
            Dern = A.Column
            If Prem = 0 Then Prem = A.Column
        End If
    Next A
    If Prem = 0 Then
        Amplitude = ""
    Else
        Amplitude = (Dern - Prem + 1) / 288
    End If
End Function

En BB3 tu mets la formule suivante : =Amplitude(C3:AZ3)

Et tu n'oublies pas de mettre la cellule BB3 au format [h]:mm


Si ça marche alors c'est un miracle...
 
Dernière édition:

cibleo

XLDnaute Impliqué
Re : Vba : Function pour calculer amplitude d'heures ou Nb.si

Bonjour à tous
Bonjour Marcel32,

Je ne sais pas si cela tient du miracle mais une fois encore tu m'as bien dépanné.

Jusqu'à présent, je n'avais jamais abordé le sujet des procédures de type Function, or je m'aperçois qu'elles sont bien utiles dans des cas comme le mien.

En tout cas cela fonctionne à merveille, je t'en remercie.

Mais, j'aimerais y apporter de légères modifications.

Plus haut je disais :

Concrétement trouver la première et dernière occurence (N) figurant sur ma plage et compter ainsi le nombre de cellules les séparant qu'elles soient vides ou contenant "N".

Comme tu as pu le remarquer, il y a dans le module "Marquage" plusieurs macros qui seront associées à un bouton dans ma feuille de calcul et qui sont basées sur le même principe : Marquer mes plages de cellules en les selectionnant à l'aide de la souris puis cliquer sur le bouton correspondant.

En fait, j'aimerais modifier la procédure afin qu'elle me trouve la première et dernière occurence si le caractère (ou les ) inscrit dans cette plage sont "N", H25 ou H100.

En effet sur la ligne d'un Samedi apparaitra H25 et le dimanche apparaitra H100.

Je pense que la modification doit s'effectuer au niveau du If A.Value = "N" Then

Merci de votre aide Cibleo
 

cibleo

XLDnaute Impliqué
Re : Vba : Function pour calculer amplitude d'heures ou Nb.si

Bonjour à tous,
Bonjour Marcel32,

Encore une dernière condition à inclure et je ne t'ennuie plus, la "Function marche très mais j'aimerais y ajouter la condition suivante :

Si la première et dernière occurence sont "Cp" ou Cho", le résultat de l'amplitude doit être égale au contenu de la cellule IK1 (Valeur qui ne change pas).

Encore merci Marcel32

Cibleo
 

TooFatBoy

XLDnaute Barbatruc
Re : Vba : Function pour calculer amplitude d'heures ou Nb.si

Encore une dernière condition à inclure et je ne t'ennuie plus, la "Function marche très mais j'aimerais y ajouter la condition suivante :

Si la première et dernière occurence sont "Cp" ou Cho", le résultat de l'amplitude doit être égale au contenu de la cellule IK1 (Valeur qui ne change pas).
Je n'ai pas compris exactement ce que tu désires là.
Tu veux dire la première cellule non vide de la ligne égale à "Cp" ou "Cho" ?
Et aussi la dernière égale à "Cp" ou "Cho" (réspectivement ou peu importe ??) ou uniquement la dernière ?
etc.

Peux-tu fournir un fichier comportant des exemples de ce que tu désires obtenir comme résultats s'il te plait ?
 
Dernière édition:

cibleo

XLDnaute Impliqué
Re : Vba : Function pour calculer amplitude d'heures ou Nb.si

Bonjour Marcel32,

Par rapport à mon dernier fichier, j'ai rajouté les boutons de marquage "Cp" et "Cho" (pour traduire Congés Payés et Chômés Payés).

Une ligne ne peux être marquée que par "Cho" ou "Cp" mais pas les deux à la fois.

L'amplitude sera alors toujours constante (soit 7heures puisqu'il s'agit de Cp ou de jours chômés payés. (Durée de travail hebdomadaire 35H00).

Nouvelle condition : si mes lignes sont marquées "CP" ou"Cho", l'amplitude sera toujours égale à 7 heures, soit la valeur inscrite dans la cellule BA1 du nouveau fichier joint.

Je reconnais que c'est un peu ambigu mais il est vrai que la notion de première et dernière occurrence n'a plus vraiment d'utilité dans ce cas précis de "Cp" ou chômés Payés puisque le marquage devrait s'effectué en continu soit 84 cellules contigües (84 * 5 minutes = 7 heures).

Mais sait-on jamais, si mes collègues saisissent en 2 plages bien distinctes leurs "CP" il vaut mieux garder cette notion de première et dernière occurence.

Je précise bien le contenu de la cellule BA1, car certains des employés de ma boîte sont à 32 heures soit 6H24 par jour.

Merci pour ta contribution Marcel32

Cibleo
 

Pièces jointes

  • Présence1.zip
    48 KB · Affichages: 64
  • Présence1.zip
    48 KB · Affichages: 66
  • Présence1.zip
    48 KB · Affichages: 62

TooFatBoy

XLDnaute Barbatruc
Re : Vba : Function pour calculer amplitude d'heures ou Nb.si

Bon ben j'suis trop stupide : je pige pas ce que tu veux exactement. :(

J'ai l'impression que dés qu'il y a au moins une cellule "CP" ou "Cho", il ne peux rien y avoir d'autre (pas de "N") et il faut alors mettres la valeur de BA1, non ?

Essaye ça :
=SI(OU(NB.SI(C3:AZ3;"CP")<>0;NB.SI(C3:AZ3;"Cho")<>0);BA$1;Amplitude(C3:AZ3))
 

cibleo

XLDnaute Impliqué
Re : Vba : Function pour calculer amplitude d'heures ou Nb.si

Bonjour Marcel32,

Hé non Marcel, c'est moi qui suis stupide, c'est exactement ce que je cherchais.
Je me focalise tellement sur le VBA en ce moment que j'en vois désormais partout. J'en oublie les formules de base d'Excel, celle que tu me proposes me convient parfaitement.

Je perds de ma lucidité, il faut que je prenne un peu de vacances.

Au plaisir et à bientôt sur de nouveaux fils

Cibleo
 

Discussions similaires

Réponses
8
Affichages
1 K

Statistiques des forums

Discussions
312 329
Messages
2 087 327
Membres
103 518
dernier inscrit
hbenaoun63