Boucles VBA et récupération de données Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Ausecour
Membre impliqué
Membre impliqué
Messages : 2'404
Appréciations reçues : 263
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 20 mai 2019, 11:39

Bonjour,

pour intégrer ça au code il faudrait que je modifies quelques lignes pour pouvoir faire référence à un autre classeur, et j'enregistrerais le fichier sélectionné par l'utilisateur dans une variable :)

Pour la première partie du code:

Sub traitement()
 Application.ScreenUpdating = False
Désactive la mise à jour automatique de l'affichage, permet d'accélérer le temps d'éxécution d'une macro
 Dim ligFin, cumTemps, nbCol
 Dim tabFin As Variant, tableau As Variant
Je déclare ici certaines variables car elles sont écrites d'une certaine façon, les déclarer comme ceci permet de fixer la façon dont elles sont écrites (vis-à-vis des majuscules et des minuscules), je n'ai donc pas à me soucier d'écrire tabFin avec les majuscules, je le mets tout en minuscule et VBA se charge ensuite de reconnaître le nom de la variable et lui appliquer correctement les minuscules et majuscules.
 'Initialisations
 ligFin = Range("l" & Rows.Count).End(xlUp).Row
 tableau = Range("a3", "m" & ligFin)
 cumTemps = 0
 pause = 0
 nbCol = 3
 ReDim tabFin(1 To nbCol, 1 To 2)
 tabFin(1, 1) = tableau(1, 1)
 tabFin(1, 2) = tableau(2, 1)
Partie important du programme dans laquelle je donne les valeurs de départ de mes différentes variables,
 ligFin = Range("l" & Rows.Count).End(xlUp).Row
Cette partie du code permet d'avoir la dernière ligne remplie sur la colonne I, pour ça j'utilise Range("l" & Rows.Count) pour faire référence à la dernière ligne de la colonne I avec Rows.count qui donne le nombre de lignes qui sont présentes dans le classeur, et End(xlUp) qui permet de monter vers le haut à partir de cette cellule, et de s'arrêter à la première cellule remplie, ensuite j'utilise .Row pour avoir la ligne de cette cellule.
 tableau = Range("a3", "m" & ligFin)
Ici j'initialise le tableau en lui donnant comme données d'entrées toutes les cellules qui se trouvent entre A3 et la dernière ligne du tableau à la colonne M.
 cumTemps = 0
 pause = 0
 nbCol = 3
Ici je donne une valeur de départ à chaque variable pour être sûr qu'elles sont égales à 0, et la dernière c'est pour ne pas avoir à changer la valeur par la suite dans le programme, à chaque ligne qui utilise la variable...
 ReDim tabFin(1 To nbCol, 1 To 2)
Permet de redimensionner mon tableau final en lui donnant comme colonne de départ : 1, et 3 en colonne de fin, soit trois colonnes de 1 à 3, et 2 lignes de 1 à 2, je vais souvent redimensionner ce tableau au fur et à mesure que je vais mettre des infos dedans.
 tabFin(1, 1) = tableau(1, 1)
 tabFin(1, 2) = tableau(2, 1)
Enfin cette partie permet de donner des valeurs de départ au tableau final, je fais ça par rapport à la boucle qui suit, je ne peux pas commencer par des lignes qui sont vides au niveau de la colonne "i".
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
M
MacMask
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 16 mai 2019
Version d'Excel : 2010

Message par MacMask » 20 mai 2019, 14:16

Bonjour, merci pour toutes ces explications (désolé de prendre votre temps), c'est vrai que cette partie en VBA est je trouve assez difficile quand on débute. J'aimerais bien voir si possible comment faire pour le code avec getopenfile ainsi que l'enregistrement dans des onglets, j'ai effectué quelques recherches ce weekend dessus mais cela n'a abouti à rien de mon coté.
Avatar du membre
Ausecour
Membre impliqué
Membre impliqué
Messages : 2'404
Appréciations reçues : 263
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 20 mai 2019, 15:02

Re,

Je te proposes un fichier qui sera chargé d'aller chercher les infos d'un autre fichier que tu sélectionneras:
synthese pauses.xlsm
(20.79 Kio) Téléchargé 6 fois
Voilà pour le GetOpenFileName :wink:
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
M
MacMask
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 16 mai 2019
Version d'Excel : 2010

Message par MacMask » 20 mai 2019, 15:35

Merci beaucoup, au niveau du code j'avais quasiment la même chose mais il me manquait cela:

ActiveWorkbook.Close

ligExport = Range("a" & Rows.Count).End(xlUp).Row
If Range("a" & ligExport) <> "" Then
ligExport = ligExport + 1
End If

Range("a" & ligExport).Resize(UBound(tabFin, 2), UBound(tabFin, 1)) = WorksheetFunction.Transpose(tabFin)
Application.ScreenUpdating = True
End Sub

Pour la suite comment faudrait-il faire pour faire un total mensuel pour chaque personne ? Le code peut il détecter chaque personne pour faire un total avec toutes les données sachant que chaque fichier excel qui sort chaque jour ne commence pas forcément par la même personne en fonction de si elle travaillait ou non. Je vous met en second fichier en copie. j'ai la possibilité de sortir un fichier également au mois ce qui pourrait être également plus facile mais le code ne fonctionne pas dessus, je ne peux vous le mettre en copie car il est trop volumineux il fait plus de 10000 lignes au complet, je l'ai donc coupé en laissant quelques employés pour vous montrer le fonctionnement. J'ai aussi la possibilité de le sortir à la semaine

Fichier retiré (contient des données personnelles)
M
MacMask
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 16 mai 2019
Version d'Excel : 2010

Message par MacMask » 20 mai 2019, 15:41

Ce que j'aimerais faire par la suite c'est que les employés puissent avoir accès à leur compteur personnel par exemple créer un fichier avec une liste de nom et lorsque l'employé sélectionne son nom il voit son compteur personnel d'heures travaillées
Avatar du membre
Ausecour
Membre impliqué
Membre impliqué
Messages : 2'404
Appréciations reçues : 263
Inscrit le : 31 mai 2018
Version d'Excel : 2010 FR, 2013 FR

Message par Ausecour » 20 mai 2019, 16:18

Re,

Je pense que pour faire ça il faudrait changer la façon dont est présentée la synthèse pour la rendre compatible avec les tableaux croisés dynamiques, de cette façon il serait très facile de faire une synthèse mensuelle par personne.

Pour rendre les données compatibles avec un tableau croisé dynamique, il faut un tableau à 5 colonnes, 1 ère colonne: nom de la personne, 2ème colonne: date, 3 à 5: les temps.

Voici la modification que je propose:
Fichier retiré (contient des données personnelles)

Tu as une synthèse par années, mois, personne :wink:
Plus un sujet a un titre précis, des explications claires, et un fichier Excel bien préparé, plus il a de chances d'avoir une réponse qui répond au besoin, mettez toutes les chances de votre côté :bien:
"100% des gagnants auront tenté leur chance" :trfl:
M
MacMask
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 16 mai 2019
Version d'Excel : 2010

Message par MacMask » 20 mai 2019, 16:34

D'accord mais comment l'utiliser ? il faut rentrer grace au bouton chaque fichier excel tous les jours ou utiliser le fichier mensuel ?
M
MacMask
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 16 mai 2019
Version d'Excel : 2010

Message par MacMask » 20 mai 2019, 19:36

Je pense que faire une synthèse une fois par semaine serait préférable dans notre cas car actuellement nos travaillons avec des feuilles de pointage à la semaine et celles-ci sont vérifiées tous les lundi. Puis regrouper cette synthèse à la semaine en mois à la fin de celui-ci.

Une fois cette synthèse effectuée est ce qu'il y a un moyen de comparer cette synthèse à un tableau de prévision ? Je m'explique, la synthèse c'est les heures que les personnes ont réellement effectuées et toutes les semaines nous comparons si le nombre d'heure effectuée à la journée pour la semaine X correspond à ce qui était prévu par exemple pour Y personne s'il à fait 8 heures et que seulement 7 heure était prévue le lundi il y à un problème, je vous met en copie un fichier qui pourrait permettre de comparer cette synthèse aux heures réellement prévue.
Donc faire un module en plus de la synthèse qui compare pour chaque personne pour tel semaine si les heures pour chaque jours ont bien été respecté et que si il y a une différence de 15 minutes avec ce qui était normalement prévu il sorte le nom des personnes concernés et le jour ? Cela représente peut être une grosse partie en programmation ?

Exemple :
Salarié X pour la semaine 20 :
Heures effectuées.......................................................................Heures prévues :
20/05 : 7.............................................................................................6
21/05 : 7 ............................................................................................7
22/05 : 7.............................................................................................7
23/05 : ...............................................................................................7
24/05 :
25/05 : 7
26/07 : 7.............................................................................................7
Par exemple la macro en comparant la synthèse et nos fichier fait à la semaine ne sortirait que le nombre d'heure qui n'a pas été respecté
Salarié X : 20/05 heures prévues 7 / heures effectuées 6
23/05 heures prévues 0 / heures effectuées 7
25/05 heures prévues 7 / heures effectuées 0

De façon à qu'il ne sorte que les anomalies dans un onglet lorsque la différence est supérieure à 15 minutes

(Je vous met en copie un fichier de prévision, de ce que les salariés doivent faire une semaine sachant que ce n'est jamais le même nombre d'heure pour chaque personne, là c'est un exemple de semaine).

Bonne soirée

Fichier retiré (contient des données personnelles)
M
MacMask
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 16 mai 2019
Version d'Excel : 2010

Message par MacMask » 20 mai 2019, 19:41

Concernant la modification de la synthèse cela ne pose pas de problème à partir du moment ou nous avons accès à la date, le total d'heures effectuées sur la journée et le nom de la personne, c'est la principal. Si cela permet en plus d'avoir un accès au compteur de chaque personne cela est parfait
M
MacMask
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 16 mai 2019
Version d'Excel : 2010

Message par MacMask » 21 mai 2019, 09:54

Bonjour, voici un fichier complet à la semaine qui pourrait être utilisé pour effectuer les pointages à la semaine ainsi que la vérification avec les prévisions peut être.

Fichier retiré (contient des données personnelles)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message