VBA-copier des lignes sous conditions d'un onglet a un autre

Bonjour,

J'ai beaucoup de difficultés à écrire un code VBA lié à un Userform.

Je vous expose ma requête :

Je souhaite copier certaines cellules (par ligne) d'un tableau dans un autre onglet avec une condition.

Condition: Copier la ligne SI la période (un mois) inscrite par l'utilisateur dans l'UserForm existe/est présent dans la colonne C du tableau... et ainsi de suite pour les lignes suivante.

J'ai essayé de procéder avec "Do while cells (i,3)= periode.value" cela fonctionne si je renseigne dans l'userform le mois de la première ligne du tableau

Mais pas les mois suivants.. Logique car comme la condition "à la première ligne" n'est pas remplie, alors la boucle stop

Je vous remercie par avance de votre aide.

Cordialement,

Bonjour et bienvenue sur le forum

Tu devrais joindre le fichier sur lequel tu as commencé à travailler.

Bye !

Bonjour Titi, bonjour le forum,

Peut-être comme ça :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim NC As Integer 'déclare la variable NC (Nombre de Colonnes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau de lignes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set OS = Sheets("Feuil1") 'définit l'onglet OS (à adapter)
Set OD = Sheets("Feuil2") 'définit l'onglet OD (à adapter)
TC = OS.Range("A1").CurrentRegion 'définit le tableau de cellules TC
NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellules TC
NC = UBound(TC, 2) 'définit le nombre de colonnes NC du tableau de cellules TC

'création d'un tableau TL de récupération des données du tableau TC par transposition
K = 1 'intialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes du tableau TC (en partant de la seconde)
    If TC(I, 3).Value = periode.Value Then 'si la valeur en ligne I, colonne 3 dutableau TC est égale à la valeur de la combobox ou textbox de l'UserForm
        ReDim Preserve TL(1 To NC, 1 To K) 'redimentionne le tableau de lignes TL (autant de lignes que TC a de colonnes et K colonnes)
        For J = 1 To NC 'boucle 2 : sur toutes les colonnes de TC
            TL(J, K) = TC(I, J) 'attribut à la ligne J de TL la valeur de la colonne J de TC
        Next J 'prochaine colonne de la boucle 2
        K = K + 1 'incrémente K
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1

'définit la cellule de destination DEST
Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))

'renvoie du tableau TL transposé dans DEST
DEST.Resize(UBound(TL, 2), UBound(TL, 1)) = Application.Transpose(TL)
End Sub

[Édition]

Bonjour GMB on s'est croisé...

Re,

Je vous envoie le fichier en PJ.

Il faudrait aussi prendre en compte deux points au niveau du code :

  • L'insertion de lignes pour agrandir le tableau en fonction des copier/coller (pour ne pas déborder)
  • La prise en compte AUSSI de l'année à côté du mois
Rechercher des sujets similaires à "vba copier lignes conditions onglet"