Macro (Do While)
Résolu
Lentzouille2
Messages postés
806
Date d'inscription
Statut
Membre
Dernière intervention
-
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voici 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
Voici 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
A voir également:
- Macro (Do While)
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- My people do - Télécharger - Organisation
- Do not turn off target traduction - Forum Samsung
5 réponses
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.....
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.....
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?
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question