Creat° Macro pour dupliquer des lignes avec conditions

Bonjour à tous,

Je cherche à créer une macro sur excel en vba qui me permette de faire le détail par année pour un fichier de contrat.

j'ai donc un numéro de contrat par ligne et leurs (dates de débuts, durées, coûts,...) en colonne.

Le but étant d'ajouter pour les contrats d'une durée supérieur à 12 mois une ligne par année en dupliquant les champs .(dates de débuts, durées, coûts..).

Ex: pour un contrat d'une durée de 36 mois débutant le 01/01/2013 pour un coût totale de 1500€, d'obtenir trois lignes:

01/01/2013-01/01/2014 coûts 500€

01/01/2014-01/10/2015 coûts 500€

01/10/2015-01/10/2016 coûts 500€

Merci

Pas possible!

Merci


Salut Mrik et bienvenue sur le Forum,

Peux-tu nous fournir un fichier avec 3 ou 4 lignes exemple de ton fichier actuel et - éventuellement sur une feuille séparée - le résultat que tu désirerais obtenir ?

Cordialement.

Bonjour Yvouille,

Merci de te pencher sur mon problème, je joint un fichier avec le résultat recherché.

J'ai sur la première feuille le fichier actuel, avec le montant calculé sur la durée et la date de début et de fin.

Sur la deuxième feuille le résultat que je souhaiterai obtenir avec en bleus les lignes à ajouter.

37exemple.xlsx (21.00 Ko)

Cordialement,

Bonjour,

J'ai réussi à faire ce bout de code qui me permet de dupliquer les lignes une ou plusieurs fois suivant la durée.

Reste à pouvoir modifier le contenu des cellules date de debut, date de fin et montant.

Cordialement,

Sub ChgtNom()
    Dim i As Integer
    Dim k As Integer
    For i = Range("D65536").End(xlUp).Row To 2 Step -1

       ' Pour plus de 12 mois
        If Cells(i, 8).Value > 12 And Cells(i, 8).Value <= 24 Then
            Cells(i, 8).Offset(1, 0).EntireRow.Insert , CopyOrigin:=xlFormatFromRightOrBelow
            'Cells(i + 1, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove

            Range(i + 1 & ":" & i).Interior.ColorIndex = 4

                    Rows(i).Select
                    Selection.Copy
                    Rows(i + 1).Select
                    ActiveSheet.Paste

        End If

      ' Pour plus de 24 mois
       If Cells(i, 8).Value > 24 And Cells(i, 8).Value <= 36 Then
            k = 2
            'Cells(i, 8).Offset(1, 0).EntireRow.Insert , CopyOrigin:=xlFormatFromRightOrBelow
            Cells(i + k - 1, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
            Cells(i + k, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove

            Range(i + k & ":" & i).Interior.ColorIndex = 5
             Rows(i).Select
                    Selection.Copy
                    Rows(i + 1).Select
                    ActiveSheet.Paste
                    Rows(i + 2).Select
                    ActiveSheet.Paste

        End If

   'Pour plus de 36 mois
       If Cells(i, 8).Value > 36 And Cells(i, 8).Value <= 48 Then
            k = 4
            'Cells(i, 8).Offset(1, 0).EntireRow.Insert , CopyOrigin:=xlFormatFromRightOrBelow
            Cells(i + k - 3, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
            Cells(i + k - 2, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
            Cells(i + k - 1, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove

            Range(i + k & ":" & i).Interior.ColorIndex = 7
            Rows(i).Select
                    Selection.Copy
                    Rows(i + 1).Select
                    ActiveSheet.Paste
                    Rows(i + 2).Select
                    ActiveSheet.Paste
                    Rows(i + 3).Select
                    ActiveSheet.Paste

            End If

       'Pour plus de 48 mois

        If Cells(i, 8).Value > 48 And Cells(i, 8).Value <= 60 Then
            k = 5
            'Cells(i, 8).Offset(1, 0).EntireRow.Insert , CopyOrigin:=xlFormatFromRightOrBelow
             Cells(i + k - 4, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
              Cells(i + k - 3, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
               Cells(i + k - 2, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
                Cells(i + k - 1, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove

            Range(i + k & ":" & i).Interior.ColorIndex = 8
                  Rows(i).Select
                    Selection.Copy
                    Rows(i + 1).Select
                    ActiveSheet.Paste
                    Rows(i + 2).Select
                    ActiveSheet.Paste
                    Rows(i + 3).Select
                    ActiveSheet.Paste
                    Rows(i + 4).Select
                    ActiveSheet.Paste

            End If

         'Pour plus de 60 mois
        If Cells(i, 8).Value > 60 And Cells(i, 8).Value <= 72 Then
            k = 6
            'Cells(i, 8).Offset(1, 0).EntireRow.Insert , CopyOrigin:=xlFormatFromRightOrBelow
            Cells(i + k - 5, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
            Cells(i + k - 4, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
            Cells(i + k - 3, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
            Cells(i + k - 2, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
            Cells(i + k - 1, 8).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove

            Range(i + k & ":" & i).Interior.ColorIndex = 10

                Rows(i).Select
                    Selection.Copy
                    Rows(i + 1).Select
                    ActiveSheet.Paste
                    Rows(i + 2).Select
                    ActiveSheet.Paste
                    Rows(i + 3).Select
                    ActiveSheet.Paste
                    Rows(i + 4).Select
                    ActiveSheet.Paste
                    Rows(i + 5).Select
                    ActiveSheet.Paste

            End If

    Next
End Sub

Re,

Sur la base de tes exemples, j’ai quelques questions :

Tu as modifié la date de début du contrat 13/11-96 entre les deux feuilles. Si la date de début était restée le 1er novembre 2013, la date de fin aurait bien été le 30 octobre 2014, non ? Ou une date de début de contrat n’est pas possible en milieu d’année ?

Désires-tu effectuer ces corrections une bonne fois pour toute ou dois-tu les faire régulièrement ?

Si tu dois le faire régulièrement - et en admettant que la feuille ait été corrigée selon tes souhaits – à quel moment vas-tu faire la prochaine correction ? A chaque fois que tu effectues un nouvel enregistrement ? Une fois par année ? Autre ?

A te relire.

Bonsoir,

Effectivement il s'agit d'une petite erreur, le contrat debute le 1er Novembre mais se termine le 31 octobre.

Une date de début de contrat est tout à fait possible en milieu d'année.

Je dois faire ces corrections pour un transfert de base de données, j'exporte donc ce fichier contrat d'une base de données qui sera mis à jour plusieurs fois par mois au fur et à mesure du renouvellement des contrats.

Une fois exporté en format excel je souhaite y apporter les modifications.

Bien à toi,

Bonjour Yvouille Mrik117 le forum

ton fichier en retour

a+

Papou

Edit: EngueEngue impossible n'est pas excel !!

58mrik117-v1.xlsm (38.71 Ko)

Wow , ça semble fonctionner à merveille.

Je vais le tester sur mon fichier entier, merci beaucoup pour le temps passé sur mon problème.

Je comprend pas toutes les lignes de codes, mais l'essentielle est que ça marche.

Une dernière question, est-ce que ce code peut éventuellement gérer une durée de 13 ou de 38 mois et donc qui ne sont pas des multiples de 12.

Merci encore papou

Re bonjour Mrik117 le forum

bah on peut tout faire si tu le demandes mais pour le moment non c'est pas possible en fait je ne l'ai pas prévu!!

n'oublies pas de cliquer le V vert résolu STP

et aussi n'oublies pas d'aller sur l'autre forum faire pareil

Pour ta nouvelle demande je ne répondrai que lorsque j'aurai eu un fichier exemple avec comme pour l'autre une feuille Original et une feuille Résultat

Mais là je ne comprend pas très bien car 13 mois tu voudras combien de lignes???? Enfin attendons ton fichier avec les explications et on fera

a+

Papou

Cher Paritec

Ton code ne répond pas à :

01/01/2013-01/01/2014 coûts 500€

01/01/2014-01/10/2015 coûts 500€

01/10/2015-01/10/2016 coûts 500€

En effet splitter une facture sur trois ans c'est possible, avec des intervalles équivalents, mais ici:

12 mois; 10 mois;12 mois c'est arbitraire et bien qu'impossible ne soit pas excel, l'arbitraire ne l'est pas non plus.

La bise

Salut EngueEngue,

Si tu avais remarqué qu’il y avait une petite erreur dans l’énoncé de la question de ce membre, il était aberrant de placer ta réponse du 7 courant au lieu de faire remarquer son erreur à Mrikq117 et de lui proposer une solution

Je trouve ta manière de réponse aux fils sur lesquels tu interviens absolument contraire à notre Charte et je trouve cela très dommage

Amicalement.

Yvouille, bonjour,

J'ai répondu à une question. De quel droit pourrais-je me permettre de supposer qu'il y ait une erreur dans un énoncé ?

Ce qu'a demandé Mrikq117 n'est pas possible. Je me suis contenté d'y répondre.

Je n'ai certes pas ta patience, ton tact et ton éducation, mais je m’efforce de répondre au mieux aux demandes précises.

Si cela est dommage, j'en suis navré.

Bien à toi,

Bonjour à tous,

Le fichier réponse de papou répond tout à fait à mes attentes du point de vue des montants et de la plupart des dates.

Seules certaines dates commençant en cours d'année pose problème sinon tout marche parfaitement comme je le souhaitais.

Je prépare un fichier réponse pour montrer quel est mon problème.

Merci encore à tous pour votre aide

Re,

Voici le fichier traité, j'ai ajouté une colonne à la fin du fichier si la condition est vrai c'est que la date pose problème.

Bien à vous,

Re Bonjour Mrik 117 le forum

bah moi j'ai beau regardé je ne vois pas la colonne avec la condition??????

je suppose que cela devrait-être dans la feuille test ??

mais comme tu n'expliques rien dans le fichier !!!!!!!!!!!!!!!!????????????????????

a+

papou


Re Bonjour Mrik 117 le forum

bah moi j'ai beau regardé je ne vois pas la colonne avec la condition??????

je suppose que cela devrait-être dans la feuille test ??

mais comme tu n'expliques rien dans le fichier !!!!!!!!!!!!!!!!????????????????????

a+

papou

Re Papou effectivement il s'agit bien d'une erreur j'ai oublié la colonne, je la rajoute dans la feuille test,

une petite explication se trouve dans la feuille test également.

J’espère qu'il n'y a pas d'erreur ce coup-ci.

23fichier-traite.xlsm (44.76 Ko)

Bonjour Mrik117 le forum

bah oui tu as rajouté une belle formule archi fausse mais bon tu l'as rajouté

par exemple si tu prends dans le fichier que tu as expédié ligne 12 si la date de début est le 01/01/2014 et que la durée est 12 mois la date de fin c'est quoi???? 31/12/2013 et non 2014 ??? ou bien??

merci de me redire

a+

Papou

Re Mrik117 le forum

bon alors pour moi c'est bon mais comme apparemment tu n'as pas vérifié??

bref j'ai rajouté la possibilité des non multiple de 12 a vérifier

a+

papou

22mrik117-v2.xlsm (46.73 Ko)
Rechercher des sujets similaires à "creat macro dupliquer lignes conditions"