VBA - Copier-Coller des cellules tant qu'une condition est remplie

Bonjour à tous,

Je profite de cette période un peu spéciale de confinement pour apprendre le VBA et me perfectionner avec Excel, mais comme je dois travailler en même temps, je ne peux malheureusement pas me permettre de passer trop de temps sur chaque nouveau défi, et reviens donc demander votre aide.

Ce que je veux faire est assez simple :

X est mon numéro de ligne

Tant que A,X <> 0 ; copier les cellules de BX:GX dans ma feuille "export"

Vérifier la ligne suivante

J'en suis arrivé à la formule que vous trouverez en PJ, mais ça bloque à l'exécution de la macro avec le message "erreur 1004" La méthode Range de l'objet Global a échoué.

Désolé si c'est une question stupide, je débute

Merci d'avance!

EDIT : J'ai vu qu'il manquait un point à "selection.copy" mais cette erreur est déjà corrigée dans excel

43test-vba.txt (938.00 Octets)

Bonjour Gal, bonjour le forum,

Essaie 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 TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set OS = Sheets("Feuil1") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set OD = Sheets("Export") 'définit l'onglet destination OD
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If TV(I, 1) <> 0 Then 'condition : si la donnée ligne I colonne 1  de TV n'est pas vide
        'définit la celllue de destination DEST (première ligne vide de la colonne B de l'onglet destination OD
        Set DEST = OD.Cells(Application.Rows.Count, "B").End(xlUp).Offset(1, 0)
        'copie la plage de la cellule ligne I colonne B de l'onglet OS redimensionnée à 6 colonnes
        OS.Cells(I, "B").Resize(1, 6).Copy
        DEST.PasteSpecial (xlPasteValues) 'colle les valeurs dans DEST
    End If 'fin de la condition
End Sub

Bonjour et désolé pour le délai,

j'attendais pour répondre d'avoir réfléchi et compris ce que tu avais fait.

C'est super, ça marche nickel même si je suis un peu déçu car ma première tentative était à des kilomètres

Au moins je comprends le mécanisme et le code que tu as utilisés, donc merci beaucoup.

Et du coup dans un fichier comme celui joint ci-dessous,

qu'est ce que je pourrais utiliser à la place de If TV(I, 1) <> 0 Then et de OS.Cells(I, "B").Resize(1, 6)

Pour avoir :

A chaque fois qu'une cellule d'une ligne = PAN5 ;

copier coller col A et B de cette ligne de "Feuill1" à "Export"

Ecrire "pan 5" dans la colonne 3 de la "export"

copier colonne correspondante / ligne 1 (= date du jour de l'évènement) et la coller dans les colonnes D et E de "export"

L'objectif étant d'obtenir une liste (feuille export) à partir de mon tableau (feuill1)

A partir de votre premier exemple, je peux effectuer certaines étapes mais je n'arrive pas à sélectionner chaque cellule d'une ligne correspondant à un critère, pour copier l'entête de colonne correspondante ensuite

Merci beaucoup pour votre temps

32question-excel.xlsx (10.74 Ko)

Bonjour,

Désolé pour le retard, je navet (si, si, dans ce cas on peut...) pas vu ta nouvelle requête...

Le code adapté :

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 TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set OS = Sheets("Feuil1") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set OD = Sheets("Export") 'définit l'onglet destination OD
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    For J = 6 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV (en partant de la 6ème)
        If TV(I, J) = "PAN5" Then 'condition : si la donnée ligne I colonne J de TV est égale à "PAN5"
            Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
            DEST.Value = TV(I, 1) 'renvoie le matricule
            DEST.Offset(0, 1).Value = TV(I, 2) 'renvoie le code
            DEST.Offset(0, 2).Value = "PAN5" 'écrit "PAN5"
            DEST.Offset(0, 3) = TV(1, J) 'renvoie la date
            DEST.Offset(0, 4) = TV(1, J) 'renvoie la date
        End If 'fin de la condition
    Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub
Rechercher des sujets similaires à "vba copier coller tant condition remplie"