Macro (Do While)

Résolu
Lentzouille2 Messages postés 1000 Statut Membre -  
f894009 Messages postés 17417 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



--
"La vie c'est comme une boite de chocolat, on ne sait jamais sur quoi on va tomber"

5 réponses

  1. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Je pense que oui, mais je n'ai pas trouvé ce que vous voulez réaliser !
    0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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.....
    0
    1. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      Merci :) ça à l'air d'être pas mal :)

      oui oui période c'est le mois :)

      Par contre une chose, c'est possible de changer le nom de Feuil1 et Feuil2 ?
      De mettre pour Feuil1, "feuille active"
      Et pour feuil2, je vais renommé en DATA
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Pour F2 ok pour DATA
      Pour F1, il faudra passer par le nom de la feuille active. Je suppose que vous avez une feuille par mois.

      Bon courage
      0
    3. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      Oui une feuille par mois mais c'est pas possible de lui dire "Feuille active" plutôt que de mettre un nom ?
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Je regarde la faisabilite.

      A+
      0
  3. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Je vois que vous avez la solution.
    A une prochaine.
    0
    1. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      Oui ça devrait le faire,

      Merci de vous y être interessé
      0
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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?
    0
    1. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      Merci de ton aide,

      Je reviens vers toi j'ai aperçu un "petit" problème,
      Quand le salarié est en CP, quand je lance la macro ça me sort en heure travaillé total ... y'a t-il une solution ? Tu vois ce que je veux dire ?

      Merci d'avance !
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Sur la feuille "Feuil1" colonne H (TOTAL Jour) il y a---->=SOMME(B3+C3+D3) et D3="HEURES Abs CP,MA,AT". C'est pas moi!
      0
    3. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      Oui je sais que c'est pas toi ... mais le fichier ne provient pas de moi non plus (là n'est pas la question) mais comme c'est en colonne et pas en ligne, je peux pas modifier pour chaque salarié ... est-il possible de changer la macro ?
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Oui.
      0
    5. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      Si tu peux pas c'est pas grave, je peux faire une formule après la macro pour trouver le résultat ...
      dit moi juste si tu as le temps ou pas ;)

      Merci en tout cas ;)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    0
    1. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      ça se surligne en jaune et apres quand je vais sur la feuil2 j'ai le premier matricule qui sort sur 30 lignes et les 2 dernieres sont rempli de #N/A
      0
    2. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      Le problème a été résolu avec le dernier code ... je vais tester l'empilage et jte dit :) merci beaucoup en tout cas
      0
    3. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      Pour l'empilage c'est nickel :)

      Jte remercie !! =)
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Oui, parce Cel_Fin n'etait calcule pour plusieurs tours de macro.

      s = Int(F1.Cells(5, 4).Value)

      Il faut enlever cette ligne, elle me servait de test
      0
    5. Lentzouille2 Messages postés 1000 Statut Membre 39
       
      Vu que la ça fonctionne y'a pas besoin de l'enlever si ?
      0