Copie de lignes suivant conditions. Plage avant et après valeur recherchée

richard31

XLDnaute Occasionnel
Bonjour

j'ai un fichier source avec un onglet "Analyse" et " Reporting". J'aimerai être capable d'analyser les entrées dans la colonne "AI" d'Analyse, et quand je rencontre l'entrée "NOK" copier toute la ligne correspondante dans l'onglet "Reporting".
Exemple en AI9 j'ai "NOK "et je désire copier toute la ligne 9 dans l'onglet "Reporting".

je n'y arrive pas avec la fonction rechercheV :( car la plage de recherche ce situe avant et après la valeur recherchée ..

Merci les gens ^^
 

Pièces jointes

  • tests.xlsx
    13.7 KB · Affichages: 31
Dernière édition:

Jacky67

XLDnaute Barbatruc
Bonjour

j'ai un fichier source avec un onglet "Analyse" et " Reporting". J'aimerai être capable d'analyser les entrées dans la colonne "AI" d'Analyse, et quand je rencontre l'entrée "NOK" copier toute la ligne correspondante dans l'onglet "Reporting".
Exemple en AI9 j'ai "NOK "et je désire copier toute la ligne 9 dans l'onglet "Reporting".

je n'y arrive pas avec la fonction rechercheV :( car la plage de recherche ce situe avant et après la valeur recherchée ..

Merci les gens ^^
Bonjour,
Ceci peut-être
Code:
Sub copieJJ()
Sheets("Reporting").Range("b2:ar" & Rows.Count).Clear
[Tableau1].AutoFilter Field:=34, Criteria1:="=NOK"
[Tableau1].SpecialCells(xlCellTypeVisible).Copy Feuil2.[b2]
End Sub
 

Pièces jointes

  • Copie test v1.xlsm
    23.9 KB · Affichages: 28

richard31

XLDnaute Occasionnel
je pense avoir trouvé avec cette formule en
Bonjour,
Ceci peut-être
Code:
Sub copieJJ()
Sheets("Reporting").Range("b2:ar" & Rows.Count).Clear
[Tableau1].AutoFilter Field:=34, Criteria1:="=NOK"
[Tableau1].SpecialCells(xlCellTypeVisible).Copy Feuil2.[b2]
End Sub


Merci pour cet aide. je ne connais pas du tout les macros. j'étais parti sur une fonction INDEX et EQUIV puis pas loin. Ceci dit, cela est bien plus fonctionnel mais je n'arrive pas à le faire fonctionner sur le fichier cible qui est très très gros ..

Le fichier cible à 4 onglets, l'un nommé "données" donc feuille1 (la ou je récupère les données à analyser ) ensuite l'onglet "analyse" (la ou se trouve toutes mes formules) , l'onglet " graphiques" et ensuite donc l'onglet "Reporting" qui doit intégrer ta macro...

j'essaye de comprendre la macro même si je n'en ai jamais fait ..

l'onglet reporting par de la celulle A11 à AR11
Sheets("Reporting").Range("b2:ar" & Rows.Count).Clear doit donc nettoyer cette feuille mais si je met :
Sheets("Reporting").Range("a11:ar" & Rows.Count).Clear
il ne veut pas ! :(
Les NOK se trouvent dans la colonne 35 du Tableau1:
[Tableau1].AutoFilter Field:=34, Criteria1:="=NOK"
je met cela ?:
[Tableau1].AutoFilter Field:=35, Criteria1:="=NOK"

et vue que la cible est la feuille4 ( reporting) qui commence en A11 je dois mettre cela ?:
[Tableau1].SpecialCells(xlCellTypeVisible).Copy Feuil4.[a11]


En gros suivant ce que je comprends ça devrai donner cela :
Sheets("Reporting").Range("a11:ar" & Rows.Count).Clear
[Tableau1].AutoFilter Field:=35, Criteria1:="=NOK"
[Tableau1].SpecialCells(xlCellTypeVisible).Copy Feuil4.[a11]
End Sub

Mais ça ne fonctionne pas :( :(
 

Jacky67

XLDnaute Barbatruc
RE...
A priori, je ne vois pas d'erreur sur ce code .....
Dans le classeur qui était joint, les données étaient sous forme de tableau==>"Tableau1"
Les données réelles doivent être sous cette forme et avoir ce nom
Feuil4 doit être le "codename" de la feuille "Reporting"
Le mieux serait de joindre un classeur avec les dispositions réelles sans données confidentielles.
 

richard31

XLDnaute Occasionnel
RE...
A priori, je ne vois pas d'erreur sur ce code .....
Dans le classeur qui était joint, les données étaient sous forme de tableau==>"Tableau1"
Les données réelles doivent être sous cette forme et avoir ce nom
Feuil4 doit être le "codename" de la feuille "Reporting"
Le mieux serait de joindre un classeur avec les dispositions réelles sans données confidentielles.


Voici donc le fichier limité à 50 lignes car il en fait 50 000. Tout à été renommé donc pas de souci .

Merci d'avance ! le point positif c'est que j'ai apparemment saisi le VB mais je comprends pas pourquoi il ne fonctionne pas ..
 

Pièces jointes

  • Fichier_tests.xlsm
    71.5 KB · Affichages: 28

Jacky67

XLDnaute Barbatruc
ha oui cela fonctionne ! j'ai du m'y prendre avec des mouffles..

par contre c'est d'une longueur incoryable.. Je pensais que passer en VBA le serai moins mais ce n'est du coup pas le cas. :( je vais voir

mais merci pour ton aide en tout les cas ^^
RE..
OUI c'est certain que sur 50 000 lignes..........
Tester en mettant en début et fin de macro
'----------
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'--------
'--------
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
'---------------
 

richard31

XLDnaute Occasionnel
RE..
OUI c'est certain que sur 50 000 lignes..........
Tester en mettant en début et fin de macro
'----------
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'--------
'--------
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
'---------------


merci pour ton aide précieuse ! :)

Une dernière question vue que tu gère bien les macros contrairement à moi .. J'ai cette commande qui n'est pas très complexe et qui en fait copie des données d'un fichier vers un autre. Mais je n'arrive pas à lui indiquer de prendre le fichier excel situé au même endroit qui commence par "Lievelink" ou alors contient le mot "Report". Sachant que c'est toujours un fichier de type xlsx. Cela est compliqué ? Car obligé de mettre le nom
source.xlsx. Et donc renommer le fichier source qui s'appelle en gros "Livelink Migration Scan Analysis Report........"
Code :

Sub Import()
'
' Nettoyage Macro

Range("A11:J50001").Select
Selection.ClearContents
'
' import
Workbooks.Open ThisWorkbook.Path & "\source.xlsx"
If MsgBox("Remplacement des données de la feuille désiré ? (attention limité à 50 000 entrées)", vbYesNo + vbExclamation, "Importation") _
= vbYes Then ActiveWorkbook.Worksheets("Migration Risk Analysis").[A2:J50001].Copy Destination:=Feuil1.[A11]
ActiveWorkbook.Close False
End Sub

MERKI^^
 

Jacky67

XLDnaute Barbatruc
merci pour ton aide précieuse ! :)

Une dernière question vue que tu gère bien les macros contrairement à moi .. J'ai cette commande qui n'est pas très complexe et qui en fait copie des données d'un fichier vers un autre. Mais je n'arrive pas à lui indiquer de prendre le fichier excel situé au même endroit qui commence par "Lievelink" ou alors contient le mot "Report". Sachant que c'est toujours un fichier de type xlsx. Cela est compliqué ? Car obligé de mettre le nom
source.xlsx. Et donc renommer le fichier source qui s'appelle en gros "Livelink Migration Scan Analysis Report........"
Code :

Sub Import()
'
' Nettoyage Macro

Range("A11:J50001").Select
Selection.ClearContents
'
' import
Workbooks.Open ThisWorkbook.Path & "\source.xlsx"
If MsgBox("Remplacement des données de la feuille désiré ? (attention limité à 50 000 entrées)", vbYesNo + vbExclamation, "Importation") _
= vbYes Then ActiveWorkbook.Worksheets("Migration Risk Analysis").[A2:J50001].Copy Destination:=Feuil1.[A11]
ActiveWorkbook.Close False
End Sub

MERKI^^

Re...
Je ne sais pas si j'ai bien compris.....
Ceci ouvre un classeur se trouvant dans le répertoire en cours ayant dans son nom le mot "Report"
Code:
Sub Import()
Dim LeFichier As String
LeFichier = Dir(ThisWorkbook.Path)
Do While LeFichier <> ""
    If UCase(LeFichier) Like "*REPORT*" Then Exit Do
    LeFichier = Dir
Loop
If LeFichier = "" Then
    MsgBox "Fichier non trouvé"
Else
    Workbooks.Open LeFichier
End If
End Sub

Si c'est ce que tu recherches, je pense que tu arriveras à l'adapter à ton besoin
Attention toutefois, si plusieurs fichiers comportent le mot "Report", c'est le premier trouvé qui sera ouvert.
 

richard31

XLDnaute Occasionnel
Re...
Je ne sais pas si j'ai bien compris.....
Ceci ouvre un classeur se trouvant dans le répertoire en cours ayant dans son nom le mot "Report"
Code:
Sub Import()
Dim LeFichier As String
LeFichier = Dir(ThisWorkbook.Path)
Do While LeFichier <> ""
    If UCase(LeFichier) Like "*REPORT*" Then Exit Do
    LeFichier = Dir
Loop
If LeFichier = "" Then
    MsgBox "Fichier non trouvé"
Else
    Workbooks.Open LeFichier
End If
End Sub

Si c'est ce que tu recherches, je pense que tu arriveras à l'adapter à ton besoin
Attention toutefois, si plusieurs fichiers comportent le mot "Report", c'est le premier trouvé qui sera ouvert.


Re

J'ai mis tes commandes seules, mais il me dit que le fichier n'existe pas alors qu'il est bien présent :(
 

Jacky67

XLDnaute Barbatruc
Re

J'ai mis tes commandes seules, mais il me dit que le fichier n'existe pas alors qu'il est bien présent :(
Re..
Si le fichier cherché se trouve dans le répertoire du classeur par lequel le code est lancé, il n'y a aucune raison que celui-ci ne soit pas trouvé.
Dans l'exemple donné, le nom du fichier cherché doit contenir le mot "Report" et dans le code *REPORT*
Je n'éprouve aucune difficulté à appliquer dans mes tests.
 
Dernière édition:

richard31

XLDnaute Occasionnel
Re..
Si le fichier cherché se trouve dans le répertoire du classeur par lequel le code est lancé, il n'y a aucune raison que celui-ci ne soit pas trouvé.
Dans l'exemple donné, le nom du fichier cherché doit contenir le mot "Report" et dans le code *REPORT*
Je n'éprouve aucune difficulté à appliquer dans mes tests.


Alors j'avoue ne pas comprendre car le fichier est bien présent et au même endroit avec ce nom :

Livelink Migration Scan Analysis Report20160125153842.xlsx

J'ai essayé avec l'entrée REPORT , SCAN , Livelink et idem il me dit que le fichier n'existe pas ! :(

pas grave! je vis rester avec l'ancien code et le nom exact du fichier. Merci en tout les cas pour ton aide ^^ je découvre VBA et c'est bien pratique !
 

Jacky67

XLDnaute Barbatruc
Alors j'avoue ne pas comprendre car le fichier est bien présent et au même endroit avec ce nom :

Livelink Migration Scan Analysis Report20160125153842.xlsx

J'ai essayé avec l'entrée REPORT , SCAN , Livelink et idem il me dit que le fichier n'existe pas ! :(

pas grave! je vis rester avec l'ancien code et le nom exact du fichier. Merci en tout les cas pour ton aide ^^ je découvre VBA et c'est bien pratique !
RE...
Alors c'est que ce n'est pas le bon répertoire.
Le classeur cherché doit se trouver dans le même répertoire que le classeur qui lance la macro (dans l'exemple donné), sinon il faut modifier le code.
 

Discussions similaires

Statistiques des forums

Discussions
312 913
Messages
2 093 535
Membres
105 753
dernier inscrit
besnard