VBA : copier/etirer des valeurs sur une plage variable

Bonjour,

Cela fait très longtemps que je n'ai pas fait de VBA et on me pose une colle sur quelque chose qui va vous paraitre surement très simple!

Dans mon fichier j'ai un onglet engagement qui représente la production que nous devons réalisé chaque mois pour différent produits (S1, S2....en colonne A) et une quantité à produire (colonne D)

Je dois recopier ces symboles et quantité qui peuvent tous les 2 varier tous les jours dans l'onglet "Engagement mensuel".

Pour le moment pas de soucis.

Je dois ensuite extraire de l'onglet "planning mois en cours" les jours travaillés, ce que j'ai fait et je copie ces valeurs dans l'onglet "Engagement mensuel" en J6.

Mon problème arrive à ce moment là, je dois pouvoir afficher pour chaque jour travailler l'ensemble des symboles.

les valeurs pouvant varier d'un jour à l'autre et d'un mois à l'autre je ne sais pas comment etirer la 1ère date jusqu'à la fin des symboles de production puis réimporter de nouveau les symboles et copier/etirer la date suivante et ce jusqu'au dernier jour du mois... j'ai tenter de trouver une macro de boucle, mais je m'y suis perdue!

Merci par avance pour votre aide

Elodie

Bonsoir Elodie,

Je te propose le code suivant :

Sub syenga()

    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
    Dim oLO As ListObject 'Variable Listobject pour le tableau des "Symboles"

    Dim oRangeArticle As Range, oRangeQty As Range, oRangeDate As Range, oCell As Range
    Dim lRow As Long, i As Integer, lNbRows As Long, lLastRow As Long

    Set O = Worksheets("Engagement mensuel") 'définit l'onglet O
    lLastRow = O.Cells(O.Rows.Count, 10).End(xlUp).Row 'On récupère la dernière ligne de dates

    Set oRangeDate = O.Range(O.Cells(7, 10), O.Cells(lLastRow, 10)) 'On affecte la plage de dates

    lRow = 2 'On initalise le compteur de lignes
    Set oLO = ThisWorkbook.Sheets("Engagement").ListObjects("Engagement") 'On affecte le tableau des "Engagements"
    Set oRangeArticle = oLO.DataBodyRange.Columns(1) 'On affecte la colonne des "Engagements" contenant les articles
    lNbRows = oRangeArticle.Rows.Count 'On calcule le nombre de lignes d'articles

    Set oRangeQty = oLO.DataBodyRange.Columns(4) 'On affecte la colonne des "Engagements" contenant les quantités

    'On boucle sur les dates
    For Each oCell In oRangeDate
        If IsDate(oCell.Value) Then 'On vérifie que la valeur est bien une date
            Set DEST = O.Cells(lRow, 2)
            oRangeArticle.Copy DEST 'On copie la plage des articles dans DEST
            Set DEST = O.Cells(lRow, 3)
            oRangeQty.Copy DEST 'On copie la plage des quantités dans DEST

            'On recopie la date courante dans la première colonne pour le nombre de lignes voulu
            For i = lRow To lRow + lNbRows - 1
                O.Cells(i, 1) = oCell.Value
            Next

            'On incrémente la ligne courante
            lRow = lRow + lNbRows
        End If
    Next

    'On fait le ménage
    Set oCell = Nothing
    Set oRangeDate = Nothing
    Set oRangeArticle = Nothing
    Set oRangeQty = Nothing
    Set O = Nothing
    Set oLO = Nothing
End Sub

Je joins mon classeur de test

Bonjour Gérard,

ça marche parfaitement!

Je te remercie je n'aurai jamais été capable d'écrire un tel code

Bonne journée

Elodie

Rechercher des sujets similaires à "vba copier etirer valeurs plage variable"