Copier autant de lignes que de mois

Fermé
Lesma17 - 3 févr. 2017 à 18:08
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 - 7 févr. 2017 à 20:16
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

A voir également:

7 réponses

ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
3 févr. 2017 à 20:30
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
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
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
4 févr. 2017 à 10:10
A tester

Cdlmnt

http://www.cjoint.com/c/GBejkjcAJmg
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
Modifié par ccm81 le 6/02/2017 à 11:51
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
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
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
Modifié par ccm81 le 7/02/2017 à 21:09
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