Bonjour,
J’ai besoin d’aide pour finaliser ma macro. Le principe est le suivant :
• J’ouvre un Fichier « Fl1 » (tableur Excel). Sur la « feuil1 » de ce fichier il y a des informations que je récupère, copie et colle dans une zone de la « feuil2 ». Je supprime ensuite les doublons. Il en résulte une colonne de N données chacune différente. Pour la compréhension je vais appeler ces données « résa ». Il peut y avoir un nombre important (1000) de ces « résa ».
• J’ouvre un fichier « Fl2 » (Tableur Excel) dans lequel je faire une recherche de chacune de ces résa, ce qui me renvoi à une ligne, et extraire une information qui se trouve dans une des cellules de cette ligne. Je vais appeler cette information « RF »
• Je récupère cette information et la colle dans le fichier « FL1 » à coté de mon numéro de résa
Ce que je n’arrive pas à faire:
• Etant donné que j’ai deux fenêtres ouverte et que ces fenêtre peuvent porter n’importe qu’elle nom, je souhaite que ma macro associe le nom du premier fichier ouvert à « FL1 » et le nom du deuxième fichier ouvert à « FL2 ». Ainsi ma macro s’adapte à n’importe quel nom de fichier et je peux mettre en place ma boucle pour la recherche.
• Pour faire la recherche je souhaite mettre en place une boucle car je n’arrive pas à mettre en place un filtre personnalisé avec un grand nombre de donnée. J’ai toujours le problème de renvoi entre les deux fichiers et je ne sais pas comment faire étant donné que ce que je recherche dans Fl2 peut prendre n’importe quelle valeur.
A suivre ma MACRO. Merci par avance pour votre aide
Sub Macro1_Test()
'Macro1_Test Macro
Dim DLig As Long, Sht1 As String, Sht2 As String, Fl1 As String, Fl2 As String
'Initialiser les variables
Sht1 = "Feuil1": Sht2 = "Feuil2"
'Va chercher le fichier à trier Fl1 = Extraction 018
fileToOpen = Application.GetOpenFilename()
Workbooks.OpenText Filename:=fileToOpen
Selection.AutoFilter
'Trouver le numéro de la dernière ligne utilisée
DLig = Sheets(Sht1).Range("A" & Rows.Count).End(xlUp).Row
'Filtrage de la colonne 8 (Colonne N° Articl) en gardant uniquement les cases remplient
Sheets(Sht1).Range("$A$1:$AA$" & DLig).AutoFilter Field:=8, Criteria1:="<>"
Sheets.Add After:=Sheets(Sheets.Count)
'Compte le nombre de ligne de la FEUIL1 après filtrage et SANS LES DOUBLONS et écrit le résultat (Nrb Article) dans la case C6
Sheets(Sht2).Range("C6").Value = _
Application.Evaluate("SUMPRODUCT(1/COUNTIF(" & Sht1 & "!H2:H" & DLig & "," & Sht1 & "!H2:H" & DLig & "))") - 1
'RECUP NUMERO COMMANDE CLIENT CODES ROUGES
'Tri de la colonne 2 en gardant toutes les cases en R10 et R20 !!! DONC NE TENT PAS COMPTE DES R99!!
Sheets(Sht1).Range("$A$1:$AA$" & DLig).AutoFilter Field:=2, Criteria1:="R10", Operator:=xlOr, Criteria2:="R20*"
'Afficher la feuille 1 si on le souhaite
Sheets(Sht1).Activate
'copier les lignes ET SUPPRESSION DES DOUBLONS
Sheets(Sht1).Range("$A$1:$B$1" & DLig).Select
Selection.Copy
Sheets(Sht2).Select
Range("H2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Range("$H$2:$I$2" & DLig).RemoveDuplicates Columns:=Array(1, 2), Header _
:=xlYes
'Appel de la fontion pour retirer les anciens filtres
Call Enlever_Filtrage
'Va chercher le fichier à trier Fl2 = OCTL
fileToOpen = Application.GetOpenFilename()
Workbooks.OpenText Filename:=fileToOpen
'Appel de la fontion pour retirer les anciens filtres
Call Enlever_Filtrage
'Trouver le numéro de la dernière ligne utilisée
DLig = Sheets(Sht1).Range("A" & Rows.Count).End(xlUp).Row
'OCTL Tri de la colonne U (NUMERO COMMANDE CLIENT) gardant toutes les cases qui commence F
Sheets(Sht1).Range("$A$1:$AA$" & DLig).AutoFilter Field:=21, Criteria1:="F*"
'Selection de la première fenêtre ouverte soit la fenêtre FL1 <---- BESOIN AIDE ICI. Comment faire en sorte que la fenêtre active soit la première fenêtre ouverte soit Fl1
'Selection Première cellule et copie de la valeur de la cellule <---- BESOIN AIDE ICI
'Trouver le numéro de la dernière ligne utilisée
DLig = Sheets(Sht2).Range("H" & Rows.Count).End(xlUp).Row
'DEBUT BOUCLE <--- BESOIN AIDE ICI. Première valeur en H3. Dernière Valeur en DLig. Comment faire la boucle ?
Range("H3").Select
Selection.Copy
Windows(Fl2).Activate '<---- en réalité ma fenêtre ne sappel pas FL2..
Cells.Find(What:="F200028363", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Range("C210").Select
Selection.Copy
Windows(Fl1). _
Activate '<---- en réalité ma fenêtre ne sappel pas FL1..
Range("J3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'FIN BOUCLE
End Sub
Private Function Enlever_Filtrage()
Dim Sh As Worksheet
For Each Sh In Sheets
With Sh
If .FilterMode Then
.ShowAllData
End If
End With
Next Sh
End Function
J’ai besoin d’aide pour finaliser ma macro. Le principe est le suivant :
• J’ouvre un Fichier « Fl1 » (tableur Excel). Sur la « feuil1 » de ce fichier il y a des informations que je récupère, copie et colle dans une zone de la « feuil2 ». Je supprime ensuite les doublons. Il en résulte une colonne de N données chacune différente. Pour la compréhension je vais appeler ces données « résa ». Il peut y avoir un nombre important (1000) de ces « résa ».
• J’ouvre un fichier « Fl2 » (Tableur Excel) dans lequel je faire une recherche de chacune de ces résa, ce qui me renvoi à une ligne, et extraire une information qui se trouve dans une des cellules de cette ligne. Je vais appeler cette information « RF »
• Je récupère cette information et la colle dans le fichier « FL1 » à coté de mon numéro de résa
Ce que je n’arrive pas à faire:
• Etant donné que j’ai deux fenêtres ouverte et que ces fenêtre peuvent porter n’importe qu’elle nom, je souhaite que ma macro associe le nom du premier fichier ouvert à « FL1 » et le nom du deuxième fichier ouvert à « FL2 ». Ainsi ma macro s’adapte à n’importe quel nom de fichier et je peux mettre en place ma boucle pour la recherche.
• Pour faire la recherche je souhaite mettre en place une boucle car je n’arrive pas à mettre en place un filtre personnalisé avec un grand nombre de donnée. J’ai toujours le problème de renvoi entre les deux fichiers et je ne sais pas comment faire étant donné que ce que je recherche dans Fl2 peut prendre n’importe quelle valeur.
A suivre ma MACRO. Merci par avance pour votre aide
Sub Macro1_Test()
'Macro1_Test Macro
Dim DLig As Long, Sht1 As String, Sht2 As String, Fl1 As String, Fl2 As String
'Initialiser les variables
Sht1 = "Feuil1": Sht2 = "Feuil2"
'Va chercher le fichier à trier Fl1 = Extraction 018
fileToOpen = Application.GetOpenFilename()
Workbooks.OpenText Filename:=fileToOpen
Selection.AutoFilter
'Trouver le numéro de la dernière ligne utilisée
DLig = Sheets(Sht1).Range("A" & Rows.Count).End(xlUp).Row
'Filtrage de la colonne 8 (Colonne N° Articl) en gardant uniquement les cases remplient
Sheets(Sht1).Range("$A$1:$AA$" & DLig).AutoFilter Field:=8, Criteria1:="<>"
Sheets.Add After:=Sheets(Sheets.Count)
'Compte le nombre de ligne de la FEUIL1 après filtrage et SANS LES DOUBLONS et écrit le résultat (Nrb Article) dans la case C6
Sheets(Sht2).Range("C6").Value = _
Application.Evaluate("SUMPRODUCT(1/COUNTIF(" & Sht1 & "!H2:H" & DLig & "," & Sht1 & "!H2:H" & DLig & "))") - 1
'RECUP NUMERO COMMANDE CLIENT CODES ROUGES
'Tri de la colonne 2 en gardant toutes les cases en R10 et R20 !!! DONC NE TENT PAS COMPTE DES R99!!
Sheets(Sht1).Range("$A$1:$AA$" & DLig).AutoFilter Field:=2, Criteria1:="R10", Operator:=xlOr, Criteria2:="R20*"
'Afficher la feuille 1 si on le souhaite
Sheets(Sht1).Activate
'copier les lignes ET SUPPRESSION DES DOUBLONS
Sheets(Sht1).Range("$A$1:$B$1" & DLig).Select
Selection.Copy
Sheets(Sht2).Select
Range("H2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Range("$H$2:$I$2" & DLig).RemoveDuplicates Columns:=Array(1, 2), Header _
:=xlYes
'Appel de la fontion pour retirer les anciens filtres
Call Enlever_Filtrage
'Va chercher le fichier à trier Fl2 = OCTL
fileToOpen = Application.GetOpenFilename()
Workbooks.OpenText Filename:=fileToOpen
'Appel de la fontion pour retirer les anciens filtres
Call Enlever_Filtrage
'Trouver le numéro de la dernière ligne utilisée
DLig = Sheets(Sht1).Range("A" & Rows.Count).End(xlUp).Row
'OCTL Tri de la colonne U (NUMERO COMMANDE CLIENT) gardant toutes les cases qui commence F
Sheets(Sht1).Range("$A$1:$AA$" & DLig).AutoFilter Field:=21, Criteria1:="F*"
'Selection de la première fenêtre ouverte soit la fenêtre FL1 <---- BESOIN AIDE ICI. Comment faire en sorte que la fenêtre active soit la première fenêtre ouverte soit Fl1
'Selection Première cellule et copie de la valeur de la cellule <---- BESOIN AIDE ICI
'Trouver le numéro de la dernière ligne utilisée
DLig = Sheets(Sht2).Range("H" & Rows.Count).End(xlUp).Row
'DEBUT BOUCLE <--- BESOIN AIDE ICI. Première valeur en H3. Dernière Valeur en DLig. Comment faire la boucle ?
Range("H3").Select
Selection.Copy
Windows(Fl2).Activate '<---- en réalité ma fenêtre ne sappel pas FL2..
Cells.Find(What:="F200028363", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Range("C210").Select
Selection.Copy
Windows(Fl1). _
Activate '<---- en réalité ma fenêtre ne sappel pas FL1..
Range("J3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'FIN BOUCLE
End Sub
Private Function Enlever_Filtrage()
Dim Sh As Worksheet
For Each Sh In Sheets
With Sh
If .FilterMode Then
.ShowAllData
End If
End With
Next Sh
End Function