Insertion de ligne

re-bonjour

voila j'essaye de faire une macro

en fait je dois rajouter des lignes si le contrat ne commence pas en nov 2013

par exemple dans mon fichier excel j'ai 4 contrat

le premiers contrat il commence en nov 2013 donc c bon

le 2eme contrat il commence en sept 2015 donc je veux inserer des lignes avt et apres pour que j'ai des lignes de nov 2013 a dec 2017

pareil pour les autres contrats

si vous pouviez m'aider merci infiniment

Bonjour,

je saisi l'idée mais je ne comprends pas tout.

1 contrat = 1 ligne ?

Le mieux est d'envoyer un fichier exemple.

Oliv

merci pour ton aidde

ci joint le fichier


j'ai plusieurs contrat (numero contrat) et je veux que tous commence a partir de nov 2013 jusqu'en dec 2017

11tdb-exple.xlsx (200.64 Ko)

J'ai cette fois bien saisi.

Pas si simple pour moi.

Qqun de plus compétent te répondra surement.

Désolé.

Oliv

merci quand même

Bonsoir,

Je vais faire un effort... !

Sub NormesLignes()
    Dim C(), Ctrat(49, 3), ct%, n&, i&, j&, k%, a%, Nct, P$, M$
    With Worksheets("TDB CT")
        n = .Cells(.Rows.Count, 2).End(xlUp).Row
        For i = 3 To n
            P = .Cells(i, 1): Nct = .Cells(i, 2): j = i
            ReDim Preserve C(ct)
            For k = 0 To 49
                Ctrat(k, 0) = P: Ctrat(k, 1) = Nct
            Next k
            Do While .Cells(j, 2) = Nct
                a = .Cells(j, 3): M = .Cells(j, 4)
                k = Month(DateValue("1 " & M)) + (a - 2013) * 12 - 11
                Ctrat(k, 2) = a: Ctrat(k, 3) = M
                j = j + 1
            Loop
            C(ct) = Ctrat: ct = ct + 1: i = j - 1
            Erase Ctrat
        Next i
        Application.ScreenUpdating = False
        .Range("A3:D" & n).ClearContents
        For i = 0 To ct - 1
            n = i * 50 + 3
            .Range("A" & n).Resize(50, 4).Value = C(i)
        Next i
    End With
End Sub

NB- Eviter d'alourdir inutilement les classeurs par des formatages inutilement étendus..

merci bcpp MFerrand

sa marche tres bein

Bonjour,

Si je trouve un moment après avoir éclusé le courrier, je me repenche sur l'autre sujet...

merciii

re-bonjour

juste une petite question comment je peux savoir dans le code que je suis bien aller jusqu'en 2017

si par exple demain je veux aller jusqu'en 2018 je dois changer quoi

merci

Tu le vois !

Le prérequis de traitement, défini par toi, est d'aller de novembre 2013 à décembre 2017, ce qui suppose que tu n'y a pas de date antérieures ou postérieures (puisqu'il s'agit d'une mise en forme sur cette plage de date), et également que ton tableau est établi par contrat, et année, mois dans l'ordre chronologique pour chaque contrat.

La plage dates (nb de mois) représente 50 lignes (d'où tableau de 0 à 49...) si tu ajoutes 1 an, c'est 12 lignes de plus, le tableau ira donc de 0 à 61...

Si tu modifies le point de départ, là il faudra modifier les calculs d'indices, car dans la situation actuelle, 0 correspond à un mois de novembre...

Sinon la méthode est simple, on constitue un tableau de 50 lignes (et 4 colonne) pour chaque contrat, qu'on sert en fonction des dates figurant (et en laissant le reste vide). Le tableau contrat établi on l'affecte à une variable tableau (qui sera donc un tableau de tableau) qu'on incrémente au fur et à mesure. Ceci fait, on efface les données actuelle et on les remplace par l'affectation successives des tableaux conservés.

Si tu veux établir une procédure qui devra fonctionner sur des données variables, c'est au moment de la conception que ça se joue, pas après ! On doit définir les éléments variables, et les critères sur lesquels le programme ira les chercher ou les déterminer...

Cordialement.

merci de tes explications

tu dis qu'il faudra également modifier les indices?

Regarde comment est calculé k.

Lorsqu'on a une date à inscrire : on prend le mois, on ajoute 12 mois pour chaque année en sus de l'année initiale, on retranche 11 car pour l'année initiale on débute en novembre et on aligne donc ainsi novembre sur l'indice 0.

Ce calcul est à revoir en fonction du mois (et année) à aligner sur 0.

Rechercher des sujets similaires à "insertion ligne"