Copier autant de lignes que de mois

Lesma17 -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,

J'espère que quelqu'un pourra m'aider. Ce forum m'a sauvé la mise un nombre incalculables de fois mais je n'ai pas trouvé la solution sur un post existant.

J'ai un problème simple : j'ai des dates de début et des dates de fin d'arrêt. Il faudrait que pour chaque arrêt, j'ai un nombre de lignes dupliquées égal au nombre de mois.

Par exemple, un arrêt du 02/02/2016 au 14/03/2016 :
une ligne qui reprend les données et qui borne du 02/02/2016 au 29/02/2016
une ligne qui reprend les données et qui borne du 01/03/2016 au 14/03/2016.

Voilà, j'espère que vous pourrez m'aider.

Je vous joins ce que j'ai déjà fait. Mais à l'étape suivante, je bloque : http://www.cjoint.com/c/GBdrfpj0oCZ

Merci énormément d'avance !

Lesma17

7 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Peux tu envoyer un bout de ton fichier initial (avant ce que tu y as ajouté), sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu (sur une deuxième feuille)

    1) Tu vas dans https://www.cjoint.com/
    2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
    3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
    4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
    en bleu souligné ; tu le sélectionnes et tu fais "Copier"
    5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse
    tu fais "Coller".

    RQ. Il va probablement falloir passer par une macro

    Cdlmnt
    0
  2. Lesma17
     
    D'accord,

    Voici le lien du nouveau fichier avec comme demandé en première feuille mon tableau de départ. Et en deuxième onglet l'exemple attendu :

    http://www.cjoint.com/c/GBdtVx3pWlE

    Merci beaucoup :D
    0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    A tester

    Cdlmnt

    http://www.cjoint.com/c/GBejkjcAJmg
    0
  4. Lesma17
     
    Bonjour,

    Pourriez-vous me copier le code ici s'il vous plait ? Le serveur ôte les macros des fichiers externes de manière automatique.

    Merci beaucoup !

    Camille
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Lesma17
     
    J'ai réussi à récupérer le fichier. Cependant, comme je ne suis pas une pro en codage, pourriez-vous m'expliquer les constantes à définir ?
    0
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    1. Pour intégrer la macro à ton fichier
    1.1. Alt-F11 pour accéder à l'éditeur vba
    1.2. Insertion/module pour créér le Module 1
    1.3. Copier tout le code

    2. les constantes
    J'ai pris la même feuille (source et but) chez moi pour faciliter le contrôle

    ' constantes à modifier selon ta configuration
    
    Const FD = "Départ"       ' nom de la feuille source
    Const conomFD = "A"       ' colonne nom
    Const codddFD = "B"       ' colonne date de debut
    Const coddfFD = "C"       ' colonne date de fin
    Const lidebFD = 2         ' premiere ligne des données
    
    Const FR = "Départ"       ' nom de la feuille but
    Const conomFR = "F"       ' colonne nom
    Const codddFR = "G"       ' colonne date de debut
    Const coddfFR = "H"       ' colonne date de fin
    Const lidebFR = 2         ' premiere ligne des données
    
    Const annee = 2016        ' année à prendre en compte

    3. Tu ne dis pas si le résultat est celui attendu

    Cdlmnt
    0
    1. Lesma17
       
      Bonjour,
      J'ai testé la macro. Et elle m'affiche l'erreur "Erreur de compilation, variable non définie" au niveau de la ligne 7 du code :

      Public Sub OK()
      Dim liFD As Long, lifinFD As Long, dddFD As Date, ddfFD As Date
      Dim nom As String, mddFD As Long, mdfFD As Long, addFD As Long, adfFD As Long
      Dim dddFR As String, ddfFR As String, mddFR As Long, mdfFR As Long, mmm As Long, nbm As Long
      Dim Tn(), Td(), Tf(), ddf As Date, derj As Long, nT As Long
      lifinFD = Sheets(FD).Range(conomFD & Rows.Count).End(xlUp).Row
      If lifinFD < lidebFD Then lifinFD = lidebFD
      liFR = Sheets(FR).Range(conomFR & Rows.Count).End(xlUp).Row
      If liFR < lidebFR Then liFR = lidebFR
      nT = 0
      For liFD = lidebFD To lifinFD
      nom = Sheets(FD).Range(conomFD & liFD).Value
      dddFD = Sheets(FD).Range(codddFD & liFD).Value
      ddfFD = Sheets(FD).Range(coddfFD & liFD).Value
      addFD = Year(dddFD)
      adfFD = Year(ddfFD)
      If addFD > annee Or adfFD < annee Then Exit Sub
      mddFR = 1
      If addFD = annee Then mddFR = Month(dddFD)
      mdfFR = 12
      If adfFD = annee Then mdfFR = Month(ddfFD)
      nbm = mdfFR - mddFR + 1
      nT = nT + nbm
      ReDim Preserve Tn(1 To nT)
      ReDim Preserve Td(1 To nT)
      ReDim Preserve Tf(1 To nT)
      For mmm = 1 To nbm
      Tn(nT - nbm + mmm) = nom
      dddFR = "01/" & Trim(Str(mmm)) & "/" & Trim(Str(annee))
      Td(nT - nbm + mmm) = dddFR
      If mmm = 12 Then
      ddfFR = "31/12/" & Trim(Str(annee))
      Tf(nT - nbm + mmm) = ddfFR
      Else
      derj = 31
      Select Case mmm
      Case 2: If annee Mod 4 = 0 Then derj = 29 Else derj = 28
      Case 4, 6, 9, 11: derj = 30
      End Select
      ddfFR = Trim(Str(derj)) & "/" & Trim(Str(mmm)) & "/" & Trim(Str(annee))
      Tf(nT - nbm + mmm) = ddfFR
      End If
      Next mmm
      Next liFD
      Sheets(FR).Range(conomFR & lidebFR).Resize(nT, 1) = Application.Transpose(Tn)
      Sheets(FR).Range(codddFR & lidebFR).Resize(nT, 1) = Application.Transpose(Td)
      Sheets(FR).Range(coddfFR & lidebFR).Resize(nT, 1) = Application.Transpose(Tf)
      End Sub


      Merci beaucoup pour votre aide,
      0
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Désolé, il y a une variable qui a sauté
    Ajoutes la ligne en gras

    Dim Tn(), Td(), Tf(), ddf As Date, derj As Long, nT As Long
    Dim liFR As Long
    lifinFD = Sheets(FD).Range(conomFD & Rows.Count).End(xlUp).Row

    Cdlmnt
    0