Macro (Do While)
RésoluVoici mon fichier :
https://www.cjoint.com/?BCpppNzdPyB
Et dans le 2eme onglet ce à quoi je souhaite arriver, sachant que j'ai environ 20 matricule à traiter,
Je pense passer par un Do While mais je ne vois pas comment faire, sachant qu'il faut le faire pour les matricules mais aussi pour les dates.
J'espère avoir été claire, je reste à disposition,
Cordialement
--
"La vie c'est comme une boite de chocolat, on ne sait jamais sur quoi on va tomber"
5 réponses
Le sujet porte sur l'automatisation d'un traitement par macro VBA pour 20 matricules et des dates, avec l'idée d'utiliser une boucle Do While afin d'appliquer le calcul et l'enregistrement pour chaque salarié. Des solutions proposées visent surtout à modifier la macro afin de traiter chaque salarié et chaque date et de recopier les résultats sur Feuil1 et Feuil2. Cela inclut la suppression d'un test de calcul, la gestion fiable des colonnes et des périodes, et l'adaptation du code pour une boucle Do While qui respecte les 20 matricules. La discussion évoque aussi des options alternatives, comme une formule post-macros pour calculer le résultat, et précise que le choix de la référence temporelle (mois) doit rester clair.
-
Bonjour,
Je pense que oui, mais je n'ai pas trouvé ce que vous voulez réaliser !
-
Bonjour,
Sub copie_donnees_F2()
Dim a(), b(), c(), d(), e()
Dim F1 As Worksheet, F2 As Worksheet
Dim D_J_MF1 As Integer, First_Col_PersXF1 As Integer, P_L_LAF2 As Integer, P_L_LABF2 As Integer
Dim Lig_BF1 As Range, Nbr_Personne As Integer, D_C_LBF1 As Integer
Dim Periode, Cel_Fin As Integer, Matricule
Set F1 = Worksheets("Feuil1")
Set F2 = Worksheets("Feuil2")
F1.Activate
'pour la dernière colonne de la ligne 2
D_C_LBF1 = F1.Cells(2, Columns.Count).End(xlToLeft).Column
'Definition Plage de cellule pour Nombre de personnes
Set Lig_BF1 = F1.Range(Cells(2, 2), Cells(2, D_C_LBF1))
'Recherche du Nombre de personne
Nbr_Personne = Application.CountIf(Lig_BF1, "*Heures Vendues*")
'pour dernier jour du mois colonne A
D_J_MF1 = F1.Range("A" & Rows.Count).End(xlUp).Row - 2
'Periode
Periode = Int(Format(F1.Range("A3"), "MM"))
ReDim a(D_J_MF1), b(D_J_MF1), c(D_J_MF1), d(D_J_MF1)
For iter = 0 To Nbr_Personne - 1
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Colonne de depart pour chaque personne
First_Col_PersXF1 = 2 + (9 * iter)
'Premiere ligne libre F2
P_L_LAF2 = F2.Range("A" & Rows.Count).End(xlUp).Row + 1
'Cellule Fin Plage
If iter > 0 Then
Cel_Fin = P_L_LAF2 + D_J_MF1 + 1 - 4
Else
Cel_Fin = D_J_MF1 + 1
End If
'Copies
F1.Activate
'Matricule
Matricule = Mid((F1.Cells(1, First_Col_PersXF1)), InStr(1, F1.Cells(1, First_Col_PersXF1), "matricule", vbTextCompare) + 9)
'Date colonne fixe
b = Application.Transpose(F1.Range("A3:A" & D_J_MF1))
'Heures Vendues
c = Application.Transpose(F1.Range(Cells(3, First_Col_PersXF1), Cells(D_J_MF1, First_Col_PersXF1)))
'Heures TNF
d = Application.Transpose(F1.Range(Cells(3, First_Col_PersXF1 + 1), Cells(D_J_MF1, First_Col_PersXF1 + 1)))
'Heures TT
e = Application.Transpose(F1.Range(Cells(3, First_Col_PersXF1 + 6), Cells(D_J_MF1, First_Col_PersXF1 + 6)))
'Recopies
F2.Activate
'Matricule
F2.Range(Cells(P_L_LAF2, 1), Cells(Cel_Fin, 1)) = Application.Transpose(Matricule)
'Date colonne fixe
F2.Range(Cells(P_L_LAF2, 2), Cells(Cel_Fin, 2)) = Application.Transpose(b)
'Periode ?? j'ai pris le mois
F2.Range(Cells(P_L_LAF2, 3), Cells(Cel_Fin, 3)) = Application.Transpose(Periode)
'Heures Vendues
F2.Range(Cells(P_L_LAF2, 4), Cells(Cel_Fin, 4)) = Application.Transpose(c)
'Heures TF
F2.Range(Cells(P_L_LAF2, 5), Cells(Cel_Fin, 5)) = Application.Transpose(c)
'Heures TNF
F2.Range(Cells(P_L_LAF2, 6), Cells(Cel_Fin, 6)) = Application.Transpose(d)
'Heures TT
F2.Range(Cells(P_L_LAF2, 7), Cells(Cel_Fin, 7)) = Application.Transpose(e)
Next iter
Application.DisplayAlerts = True
Application.ScreenUpdating = False
End Sub
Je pense que cela correspond a ce que vous vouliez. Par contre Periode??, j'ai pris le mois..... -
Bonjour,
Je vois que vous avez la solution.
A une prochaine. -
Re,
Nom_feuille = ActiveSheet.Name
Set F1 = Worksheets(Nom_feuille)
Vous clicquez sur la feuille que vous voulez traiter ensuite vous lancez la macro.
Maintenant il, y a peut-etre mieux a faire? -
Re,
Qu'est ce qu'il se passe pour:
F2.Cells(x, 7) = F2.Cells(x, 7) - a(x - P_L_LAF2)
Parce que chez moi, tout ce passe normalement