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 PL As Range 'déclare la variable PL (PLage)
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 = Worksheets("Sheet1") 'définit l'onglet source OS
Set OD = Worksheets("non conforme") 'définit l'onglet destination OD
Set PL = OS.Range("A3").CurrentRegion 'déinit la plage PL
Set PL = PL.Resize(PL.Rows.Count, PL.Columns.Count + 2) 'redéfinit la plage PL a cause de la colonne G vide (mauvaise idée)
TV = PL 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
If TV(I, 8) = "non conforme" Then 'condition : si la donnée ligne I colonne 8 de TV vaut "non conforme"
'définit la cellule de destination DEST
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
OS.Cells(I + 2, 1).Resize(11, 8).Copy DEST 'copy et colle la ligne trouvée + 10 dans DEST
End If 'fin de la condition
Next I 'prochaine de la boucle
End Sub
Bonjour Broking, bonjour le forum,
Essaie comme ça :
VB: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 PL As Range 'déclare la variable PL (PLage) 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 = Worksheets("Sheet1") 'définit l'onglet source OS Set OD = Worksheets("non conforme") 'définit l'onglet destination OD Set PL = OS.Range("A3").CurrentRegion 'déinit la plage PL Set PL = PL.Resize(PL.Rows.Count, PL.Columns.Count + 2) 'redéfinit la plage PL a cause de la colonne G vide (mauvaise idée) TV = PL 'définit le tableau des valeurs TV For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV If TV(I, 8) = "non conforme" Then 'condition : si la donnée ligne I colonne 8 de TV vaut "non conforme" 'définit la cellule de destination DEST Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) OS.Cells(I + 2, 1).Resize(11, 8).Copy DEST 'copy et colle la ligne trouvée + 10 dans DEST End If 'fin de la condition Next I 'prochaine de la boucle End Sub
merci encore*Merci de m'avoir répondu, en revanche ce n'est pas totalement ce que je veux,
j'aimerais à chaque "non conforme" copié les 10 dernières lignes ainsi de suite par exemple si j'ai plusieurs "non conforme" répéter cette action, sans reprendre les anciennes valeurs
Non, par exemple si je recrée une non conformité et que j'applique votre macro elle ne s'affiche pas dans la feuille "non conformité"Re,
Il me semble que c'est exactement ce que fait la macro que je t'ai proposée...
exactementDonc tu veux récupérer les 11 lignes suivant la ligne du non conforme (ligne du non conforme inclue), les stocker dans l'autre feuille, puis continuer et si il y a un autre non conforme faire pareil et stocker les 11 lignes qui y sont associées à la suite des 11 lignes déjà stockées ?
Non, par exemple si je recrée une non conformité et que j'applique votre macro elle ne s'affiche pas dans la feuille "non conformité"
et autre cas quand je re applique la macro les résultats que j'avais auparavant ce duplique.
encore merci
Donc ce qui ne va pas dans ce qu'on t'a proposé c'est simplement que l'on écrase les données déjà existantes à chaque fois que l'on tombe un nouveau "non conforme" ?