Macro pour division d'une donnée sur plusieurs lignes

Résolu
Edoardo Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
 Edoardo -
Bonjour,

j'ai un tableau .xl dans lequel se trouvent une liste de dépenses avec, chacune, toute une série d'attributs (type, quantités, description etc).

Cela a donc le format qui suit :
"formation" en case A2; "soirées" en case B2 "62" en C2 etc

Puis en L2 apparait l'attribut période qui peut être un mois défini (janv/fev etc.) ou "année" lorsque cela ne peut pas être réparti sur un mois précis.

J'aimerais intégrer une macro qui :
- analyserait les différentes lignes et, lorsque l'attribut "année" apparaît en colonne L, créérait 12 nouvelles lignes avec exactement les mêmes attributs sauf : le montant qui serait divisé par 12 et "année" qui deviendrait donc janvier/février/mars etc.

Sauriez-vous m'aider ?

https://www.cjoint.com/?DJErkiu7CbR

Merci d'avance pour votre aide !
A voir également:

8 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
Voici le code.
Essaye le au préalable sur une copie de ton fichier.
Si trop lent ou en cas d'erreur, reviens me dire ce qu'il en est...
Option Explicit

Sub Annee_Mois()
Dim Tb_Donnees(), Lig As Long, DLig As Long, Lignes As Integer

DLig = Range("A" & Rows.Count).End(xlUp).Row
Tb_Donnees = Range("A2:O" & DLig).Value
For Lig = UBound(Tb_Donnees) To LBound(Tb_Donnees) Step -1
    If Tb_Donnees(Lig, 10) <> "A ENGAGER" And UCase(Tb_Donnees(Lig, 14)) = "ANNEE" Then
        Rows(Lig + 2 & ":" & Lig + 12).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        For Lignes = 1 To 12
            Cells(Lig + Lignes, 1) = Tb_Donnees(Lig, 1)
            Cells(Lig + Lignes, 2) = Tb_Donnees(Lig, 2)
            Cells(Lig + Lignes, 3) = Tb_Donnees(Lig, 3)
            Cells(Lig + Lignes, 4) = Tb_Donnees(Lig, 4)
            Cells(Lig + Lignes, 5) = Tb_Donnees(Lig, 5)
            Cells(Lig + Lignes, 6) = Tb_Donnees(Lig, 6)
            Cells(Lig + Lignes, 7) = Tb_Donnees(Lig, 7)
            Cells(Lig + Lignes, 8) = Tb_Donnees(Lig, 8)
            Cells(Lig + Lignes, 9) = Tb_Donnees(Lig, 9)
            Cells(Lig + Lignes, 10) = Tb_Donnees(Lig, 10) / 12
            Cells(Lig + Lignes, 11) = Tb_Donnees(Lig, 11)
            Cells(Lig + Lignes, 12) = Tb_Donnees(Lig, 12)
            Cells(Lig + Lignes, 13) = Tb_Donnees(Lig, 13)
            Cells(Lig + Lignes, 14) = UCase(Format(DateSerial(2014, Lignes, 1), "mmmm"))
            Cells(Lig + Lignes, 15) = Tb_Donnees(Lig, 15)
        Next
    End If
Next
End Sub

1
Edoardo
 
Bonjour, je dois désormais ajuster ma répartition du poste "année" non pas sur 12 mois mais uniquement sur les mois a venir (avril à décembre) : existe-t'il une façon d'ajuster le code dans ce but ?
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
Bonjour,
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com

Va sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
0
Edoardo Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup, fichier intégré !
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
oui. ok. Mais il est ou le lien???
0

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

Posez votre question
Edoardo Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Dans mon 1er message. Le voici https://www.cjoint.com/?DJErkiu7CbR
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
Bonjour,

J'ai regardé votre fichier, il ne correspond pas à ce que l'on attend. Il faudrait qu'il soit constitué d'une cinquantaine de lignes et de la même manière que votre fichier actuel. Nul besoin de nous mettre ce que vous attendez de la macro, ça nous avons compris.
De plus, il nous faut savoir ou se situent les mots "ANNEE". Peut-on le trouver entre deux mois autres que Décembre et Janvier?

EDIT : en clair le fichier transmis doit être conforme à votre fichier, dans son état actuel. Mais sans données confidentielles...

🎼 Cordialement,
Franck 🎶
0
Edoardo Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup pour votre réponse.

Voici le nouveau fichier : il est conforme à cela près que mon fichier comporte un millier de lignes contre l'échantillon joint.

Et, oui, "année" peut apparaître à n'importe quel moment dans la colonne "Mois".

https://www.cjoint.com/?DJFknkoR1LP
0
Edoardo Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
C'est tout bonnement magique !! Testé dans un fichier isolé puis dans mon fichier de travail et cela marche parfaitement. Le traitement prend environ 1 minute pour l'ensemble des lignes ce qui est plus que raisonnable !!!

merci BEAUCOUP !!!!!!
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
Si cela convient c'est le principal.
De rien.
A+
0
Edoardo
 
Bonjour, je dois désormais ajuster ma répartition du poste "année" non pas sur 12 mois mais uniquement sur les mois a venir (avril à décembre) : existe-t'il une façon d'ajuster le code dans ce but ?
0