Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je connais les rudiments d'Excel mais pas beaucoup plus et je me demande s'il est possible de faire un tableau precis...
Je m'explique; Nous avons des planning horaires fait sous feuille excel, une feuille par semaine( donc S01,S02,S03,etc...).
Le planing est toujours fait de la meme manière (duplication de la dernière feuille), seuls les horaires d'ouverture et de fermeture de chaque personne sont modifié.
Je cherche a faire un tableau qui pourrait faire un récapitulatif du nombre de jour d'ouverture a telle ou telle heure de chaques personne durant toute l'année.
Suivant les semaines, nous sommes amenés a commencer a 9h00, 9h30, 10h00 voir meme 12h00. Chaque semaine est différente et le but est de classer pour chaque personne, le nombre d'ouverture a 9h00,... etc depuis le debut de l'année.
Sachant que les tableaux sont identiques a chaque fois, les cellules d'heures d'ouvertures (donc 6 par feuille pour chaque personne) sont toujours les memes, seule le nom de la feuille de calcul est différent( S01, S02, etc...), donc je suppose que c'est faisable.
Je vous joins une des feuilles de ce planing pour vous donner une idée.
Pas facile de travailler dans une feuille protégée😡. J'ai donc fait du copier coller pour avoir au moins une 2e feuille, et j'ai modifié des heures d'ouvertures à droite et à gauche.
J'ai essayé de trouver une formule adaptable et compréhensible par quelqu'un qui connaît les rudiments d'Excel ... L'inconvénient est qu'il faut ajouter des formules dans chacune des feuilles, pour centraliser le tout dans la feuille "récapitulative". Il est certainement possible de ne faire une formule que dans la feuille récapitulative, mais ce serait plus difficile à comprendre et adapter.
Comme tu fais chaque fois une copie de la feuille, la formule sera présente dans chaque feuille, après la copie en question ... Ceci dit, il y aura peut-être bien une bonne âme qui proposera des améliorations !
Bonjour le fil 🙂,
Je sais que le mot d'ordre du départ était de faire simple, mais je ne sais pas faire 😛...
Quelques petites remarques :
1) Je préfère travailler en format réel d'heure, 18:30 est plus parlant que 18,50... J'ai donc utilisé le format 13:30 pour la saisie d'heure (il suffit de tapper 10: pour obtenir 10 heure par exemple), et le format personnalisé [h]:mm pour pouvoir additionner éventuellement au delà de 24 heures.
2) La formule utilisée pose le problème de ne pas différencier les heures de début et de fin, donc une personne qui travaille de 8:00 à 10:00 récupérera une ouverture à 10:00 😕...
3) Le récapitulatif contiendra 52 additions de formules, bon courage 😱...
Du fait, une proposition pas forcément à la portée d'un débutant, mais tout de même assez simple, avec une fonction VBA qui va décrire toutes les feuilles dont le nom commence par "s", chercher le nom de la personne, et ne regarder que les heures de début.
Bonne journée 😎
A la lecture des commentaires de JNP, je ne peux qu'abonder dans son sens pour ce qui concerne les formats heures, que je préfère aussi aux nombres décimaux.
D'accord également avec le fait que, si on compte simplement le nombre de fois ou 12:00 (par exemple) apparaît dans une ligne, rien ne permet de déterminer s'il s'agit de l'heure de début ou de fin de prestation.
Je comprends moins
Le récapitulatif contiendra 52 additions de formules ...
... Et puis, horreur et putréfaction ! En examinant la fonction personnalisée proposée par JNP et en admirant le style, la concision et tout, je me rends compte que nous ne cherchons pas les heures dans les mêmes lignes: j'ai décalé d'une ligne vers le bas à chaque fois. En outre, il y a même des références qui auraient dû être absolues et qui ne le sont pas, dans mes formules. Consternation! J'ai d'abord été tenté de faire "comme si de rien n'était" ... Mais bon, je n'ai pas pu!
Je dépose donc une nouvelle version de mon fichier initial, juste par correction intellectuelle (ou par goût pour l'auto-flagellation, allez savoir!)
... Et puis, horreur et putréfaction ! En examinant la fonction personnalisée proposée par JNP et en admirant le style, la concision et tout, je me rends compte que nous ne cherchons pas les heures dans les mêmes lignes: j'ai décalé d'une ligne vers le bas à chaque fois. En outre, il y a même des références qui auraient dû être absolues et qui ne le sont pas, dans mes formules. Consternation! J'ai d'abord été tenté de faire "comme si de rien n'était" ... Mais bon, je n'ai pas pu!
Je dépose donc une nouvelle version de mon fichier initial, juste par correction intellectuelle (ou par goût pour l'auto-flagellation, allez savoir!)
lol, j'avais bien vu votre erreur, mais comme c'était simple te que je comprenais parfaitement la logique des formules, cela ne m'a pas posé de problème pour refaire les corrections 😉
C'est bien, sur un simple post, 2 auto flagellation 🙂))
Re 🙂,
L'autoflagellation, pourquoi pas, mais, même si je suis contre la pub, je suis en train de lire un roman "Kushiel" de Jacqueline Carey, qui devrait vous plaire à ce niveau là...
Plus sérieusement, j'avoue que je n'ai pas creusé les formules de Modeste, vu que ma proposition était tout autre.
Je peux essayer de décomposer ma fonction, si PetitLoup souhaite aborder le VBA, vu qu'elle est très simple :
Code:
Function NbreOuverture(Nom As String, HeureDébut As Date) As Integer
Dim Feuille As Worksheet, I As Integer
For Each Feuille In ThisWorkbook.Worksheets
If Left(Feuille.Name, 1) = "s" Then
For I = 2 To 25 Step 4
If Feuille.Cells(Range("A:A").Find(Nom).Row + 1, I) = HeureDébut Then NbreOuverture = NbreOuverture + 1
Next I
End If
Next
End Function
For Each Feuille In ThisWorkbook.Worksheets
Pour chaque feuille dans le classeur If Left(Feuille.Name, 1) = "s" Then
Si le premier caractère de gauche est s For I = 2 To 25 Step 4
Pour la colonne 2 et les autres jusque 25, de 4 en 4, pour ne regarder que les heures de début If Feuille.Cells(Range("A:A").Find(Nom).Row + 1, I) = HeureDébut Then
Si là où je trouve le prénom + 1 (car c'est des cellules fusionnées) dans la colonne de début est égal à l'heure de début que je souhaite NbreOuverture = NbreOuverture + 1
Alors le résultat renvoyé par la fonction est augmenté d'1
Le reste consiste à terminer les boucles.
Pour la fermeture, il suffit d'adapter le code sur la colonne qui correspond, soit :
Code:
Function NbreFermeture(Nom As String, HeureFin As Date) As Integer
Dim Feuille As Worksheet, I As Integer
For Each Feuille In ThisWorkbook.Worksheets
If Left(Feuille.Name, 1) = "s" Then
For I = 5 To 28 Step 4
If Feuille.Cells(Range("A:A").Find(Nom).Row + 1, I) = HeureFin Then NbreFermeture = NbreFermeture + 1
Next I
End If
Next
End Function
En l'absence de JNP (qui me contredira s'il le juge utile) j'avais vu cette petite procédure aussi. Je pense qu'il s'agissait d'un test réalisé par JNP pour vérifier la syntaxe et ou le résultat d'une ligne de commande (mais qui n'a plus de raison d'être en tant que telle). Pour confirmation, tu peux mettre les 3 lignes en commentaire (en mettant une apostrophe au début de chaque ligne) ou exécuter cette procédure isolément (elle ne s'exécute pas "spontanément", puisque pas "appelée" dans le cadre de la fonction personnalisée).
En l'absence de JNP (qui me contredira s'il le juge utile) j'avais vu cette petite procédure aussi. Je pense qu'il s'agissait d'un test réalisé par JNP pour vérifier la syntaxe et ou le résultat d'une ligne de commande (mais qui n'a plus de raison d'être en tant que telle).
C'est tout à fait exact. Désolé de ne pas avoir fait le nettoyage 😛... Mais ça permet de voir que l'ami PtitSuisse (j'ai pas pu me retenir 😀) décortique vraiment ce qui est fait au lieu d'attendre la bouche ouverte, ce dont je le félicite de vive voix !
Bonne journée 😎
Effectivement, si je dois apprendre il faut que je comprenne de quoi on parle, je ne suis pas a attendre d'un forum qu'il me mache le travail (même si c'est très agréable il faut le reconnaitre 😉 ).
Le VBA resemblant au basic, je dois bien etre capable de me debrouiller tot ou tard et cela permets des fonctions dont j'ignorai complètement l'existance.
Je savais Excel un logiciel assez pointu mais je ne voyais pas les possibilités...
Ma petite expérience de ces derniers jours m'a donnée envie de pousser un peu plus cette porte qu'est le VBA...
Avez vous des ouvrages (papiers, bien plus facile pour comprendre) a me conseiller sur l'apprentissage a ce langage ?
Re 🙂,
Une solution pratique et économique, c'est par exemple l'excellent site de JB qui contient plein de tutos, mais il y en a pas mal d'autres dont je n'ai pas l'adresse sous la main. Sinon, personnellement (en principe, on évite la pub...), j'ai beaucoup appréciée l'approche de la collection "pour les nuls", et le guide complet de "Micro Application" est très bon aussi. Et enfin, l'aide apportée par ce forum est souvent très constructive, en t'abonnant à des fils qui t'intéressent, tu peux suivre des solutions très différentes, mais toutes efficaces.
Bon courage 😎
PS : C'est assez normal que VBA ressemble au Basic, puis que cela signifie Visual Basic for Application, donc du Basic développé objet.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD