Copier et insérer des données à partir de plages variables

Bonjour tout le monde,

Pour un projet de classe, je souhaiterais insérer le nombre de ligne dans le tableau 2 correspondant au nombre de ligne pour lesquelles le numéro de compte en année 1 dans le tableau 1 commence par 512. Il faudrait également garder le même format que la première ligne déjà existante dans le tableau 2. Puis copier et coller les numéros de comptes, les libelles et les montants correspondants dans les bonnes colonnes dans le tableau 2.

Par ailleurs, si il y a une différence dans les montants entre l'année 1 et l'année 2 sur un même compte, on copie et on colle le numéro de compte, le libellé et on calcule l'écart entre les 2 montants sur un troisième tableau.

J'ai essayé d'être le plus clair possible mais je vous invite à regarder le fichier Excel pour que vous puissiez un peu mieux comprendre ce que je veux dire. J'ai essayé beaucoup de choses et je vous invite à regarder les 2 programmes que j'ai tenté de mettre en place bien qu'ils ne fonctionnent pas...

Je vous remercie par avance pour vos réponses qui, j'en suis sûr, me seront d'une très grande aide.

18projet-cours.xlsm (16.68 Ko)

Bonjour,

Si je comprends bien, s'agissant du tableau 1 on ne s'occupe (dans un premier temps que de l'année 1), on prélève les 3 cellules (n°, libellé, montant) pour l'année 1 si compte 512....

Et on va replacer ces année1-cpte 512... dans le tableau 2 qui comporte lui 5 cellules par ligne, dont 2 nouvelles intercalées... Alors, l'une comporte déjà un OUI (?), je suppose qu'on doit le laisser ? mais il n'est dit nulle part ce que cela signifie ni si toutes les lignes devront avoir OUI dans cette colonne ?

L'autre cellule nouvelle est une date, où la prend-on ?

Dans un second temps on chercherait donc la ligne équivalente en année 2 et on comparerait les montants de façon à en indiquer s'il y a lieu l'écart (année2-année1) dans le tableau 3 ?

Petite difficulté avec tes tableaux superposés alors qu'il y a des lignes à insérer... on devrait s'en tirer avec des noms...

Il serait bon de donner les précisions manquantes...

NB- Je ne lirai pas ton code : non indenté, délayé avec un tas de lignes sautées, et truffé de commentaires... trop pour moi ! (il faudra apprendre à écrire du code lisible !)

Cordialement.

Bonjour JO9 et bienvenue sur le forum

Bonjour MFerrand

MFerrand a toujours un temps d'avance, tant sur la rapidité de la réponse que sur la réflexion.

Un essai malgré tout où j'ai essayé de répondre strictement à la demande, sans trop me poser de questions.

Bye !

Salut GMB ! La rapidité, c'est relatif et aléatoire , quand j'affiche le forum et qu'une demande vient juste d'arriver, j'ai des chances de réagir plus vite, mais c'est le cas de tous !

Pas vu ta solution, mais pour ma part j'ai joué avec les hypothèses de mon post précédent : extension du OUI, pas de date (? là...), sens de l'écart), et mis des noms pour référencer les tableaux qui vont bouger avec les insertions.

Et également conservé la ligne modèle des tableaux de façon à pouvoir ajouter à la suite... (?)

Sub Test()
    Dim tbl(), n%, i%, j%, h%
    With Worksheets("Feuil1")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 6 To n
            If Left(CStr(.Cells(i, 1)), 3) = "512" Then
                ReDim Preserve tbl(3, h)
                For j = 1 To 3
                    tbl(j - 1, h) = .Cells(i, j)
                Next j
                h = h + 1
            End If
        Next i
        n = .Cells(.Rows.Count, 4).End(xlUp).Row
        For i = 6 To n
            For j = 0 To h - 1
                If tbl(0, j) = .Cells(i, 4) Then
                    If tbl(2, j) <> .Cells(i, 6) Then
                        tbl(3, j) = .Cells(i, 6) - tbl(2, j)
                    End If
                    Exit For
                End If
            Next j
        Next i
    End With
    n = 1
    With [Tablo2]
        Do
            n = n + 1
        Loop While .Cells(n, 1) <> ""
        .Rows(n & ":" & n + h - 1).Insert xlShiftDown, xlFormatFromRightOrBelow
        For i = n To n + h - 1
            .Cells(i, 4) = .Cells(n + h, 4)
        Next i
        For i = 0 To h - 1
            For j = 0 To 2
                .Cells(n + i, j * 2 + 1) = tbl(j, i)
            Next j
        Next i
    End With
    n = 1: h = 0: j = 0
    For i = 0 To UBound(tbl, 2)
        If tbl(3, i) <> "" Then h = h + 1
    Next i
    If h > 0 Then
        With [Tablo3]
            Do
                n = n + 1
            Loop While .Cells(n, 1) <> ""
            .Rows(n & ":" & n + h - 1).Insert xlShiftDown, xlFormatFromRightOrBelow
            For i = n To n + h - 1
                Do While tbl(3, j) = ""
                    j = j + 1
                Loop
                .Cells(i, 1) = tbl(0, j): .Cells(i, 2) = tbl(1, j)
                .Cells(i, 3) = tbl(3, j): j = j + 1
            Next i
            .Worksheet.Activate
        End With
    End If
End Sub

Cordialement.

NB- Un bouton sur Feuil1 pour tester.

Rechercher des sujets similaires à "copier inserer donnees partir plages variables"