Recherchev dans un autre fichier

  • Initiateur de la discussion Initiateur de la discussion kenavo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

kenavo

XLDnaute Junior
Bonjour,

Je reviens vers vous .... je n'y arrive pas 🙁

Le but de ma macro:
j'ai 2 fichiers : FusionCAT6 ( celui ci s'appelle tjs ainsi) et l'autre peut avoir des noms variables
Ce que je veux :
je suis dans FusionCAT6 je lance ma macro recherchevCAT6 qui va demande le fichier a ouvrir et faire une recherchev dans ce dernier.
Il cree la plage dynamique ds le fichier ouvert mais la recherchev ne marche pas
Ensuite dans le fichier que lon a ouvert je fais la recherchev dans le fichier FusionCAT6
le code:
Code:
Sub PlageCAT5()
' création plage dynamique
ActiveWorkbook.Names.Add Name:="MaPlage", RefersToR1C1:= _
        "=OFFSET([FusionCAT6.xls]Feuil1!R1C6,,,COUNTA([FusionCAT6.xls]Feuil1!C6),9)"
End Sub

Sub RechCAT5()
'RechercheV
Range("W1").Select
ActiveCell.FormulaR1C1 = "Pointage"
    Range("W2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-10],MaPlage,9,FALSE)"
    Range("W2").Select
    Selection.AutoFill Destination:=Range("W2:W" & Range("C65536").End(xlUp).Row), Type:=xlFillDefault
   'Enleve les formules
   Range("W2:W" & Range("C65536").End(xlUp).Row).Value = Range("W2:W" & Range("C65536").End(xlUp).Row).Value
        Range("W1").Select
End Sub
'Pointage CAT5 permet de faire le pointage des Sommes du fichier CAT5 et ceux de CAT6 : on recupère les somme du CAT6
'On part donc du CAT5
Sub PointageCAT5()
Call PlageCAT5
Call RechCAT5
End Sub

Sub PlageCAT()
' création plage dynamique
   ActiveWorkbook.Names.Add Name:="PlageCAT5", RefersToR1C1:= _
        "=OFFSET([CAT5.xls]Feuil1!R1C13,,,COUNTA([CAT5.xls]Feuil1!C6),10)"
End Sub
'*****************
'Procédure pour la rechercheV dans CAT6

Sub PlageCAT6()
Dim Fichier As Variant
Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
If Fichier = False Then Exit Sub
Application.DisplayAlerts = False 'si le fichier est déja ouvert
Workbooks.Open Filename:=Fichier
' création plage dynamique
   Workbooks(Workbooks.Count).Names.Add Name:="PlageCAT5", RefersToR1C1:= _
        "=OFFSET(Feuil1!R1C13,,,COUNTA(Feuil1!C6),10)"
End Sub


Sub RechCAT6()
Workbooks("FusionCAT6.xls").Activate

Range("O1").Select
ActiveCell.FormulaR1C1 = "Pointage"
    Range("O2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-9],PlageCAT5,10,FALSE)"
    Range("O2").Select
    Selection.AutoFill Destination:=Range("O2:O" & Range("C65536").End(xlUp).Row), Type:=xlFillDefault
    'Enleve les formules
  ' Range("O2:O" & Range("C65536").End(xlUp).Row).Value = Range("O2:O" & Range("C65536").End(xlUp).Row).Value
      Range("O1").Select
End Sub


Sub PointageCAT6()
Call PlageCAT6
Call RechCAT6
End Sub

Merci pour votre aide
Bonne soirée et bon WE pour celles et ceux qui font le pont!
 

Pièces jointes

Re : Recherchev dans un autre fichier

Bonjour Kenavo, le forum,

Pour que la macro fonctionne, il faudrait rajouter le nom de fichier variable choisi, soit dans la formule de recherche, soit dans la définition de la plage.

Pour récupérer le nom du fichier:
* Définir une variable tableau commune:
Code:
Public NomF() As String
* Après le choix du fichier ajouter:
Code:
NomF = Split(Fichier, "\")
et le tableau NomF va contenir les différentes parties du chemin d'accès.
* On obtient le nom du fichier en faisant:
Code:
NomF(UBound(NomF))
qui donne le dernier élément du tableau.

Pour le mettre dans la définition de plage, en fin de procédure "PlageCAT6()" :
VB:
Workbooks("FusionCAT6.xls").Activate 'on crée la plage dans FusionCAT6
' création plage dynamique
   ActiveWorkbook.Names.Add Name:="PlageCAT5", RefersToR1C1:= _
        "=OFFSET([" & NomF(UBound(NomF)) & "]Feuil1!R1C13,,,COUNTA([" & NomF(UBound(NomF)) & "]Feuil1!C6),10)"

Pour le mettre dans les formules si la plage est créée dans le fichier variable, on modifie la formule dans la procédure "RechCAT6 ()":
VB:
Range("O2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-9]," & NomF(UBound(NomF)) & "!PlageCAT5,10,FALSE)"
    Range("O2").Select

@+

Gael
 
Re : Recherchev dans un autre fichier

Mon est devenu :

Code:
Public NomF() As String
Sub PlageCAT6()
Dim Fichier As Variant
Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
If Fichier = False Then Exit Sub
Application.DisplayAlerts = False 'si le fichier est déja ouvert
Workbooks.Open Filename:=Fichier
NomF = Split(Fichier, "\")
' création plage dynamique
      ActiveWorkbook.Names.Add Name:="PlageCAT5", RefersToR1C1:= _
        "=OFFSET([" & NomF(UBound(NomF)) & "]Feuil1!R1C13,,,COUNTA([" & NomF(UBound(NomF)) & "]Feuil1!C6),10)"
   End Sub

Sub RechCAT6()
Workbooks("FusionCAT6.xls").Activate

Range("O1").Select
ActiveCell.FormulaR1C1 = "Pointage"
    Range("O2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-9]," & NomF(UBound(NomF)) & "!PlageCAT5,10,FALSE)"
    Range("O2").Select
    Selection.AutoFill Destination:=Range("O2:O" & Range("C65536").End(xlUp).Row), Type:=xlFillDefault
    
    'Enleve les formules
  ' Range("O2:O" & Range("C65536").End(xlUp).Row).Value = Range("O2:O" & Range("C65536").End(xlUp).Row).Value
      Range("O1").Select
End Sub


Sub PointageCAT6()
Call PlageCAT6
Call RechCAT6
End Sub

Mais ça bloque sur :
Code:
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-9]," & NomF(UBound(NomF)) & "!PlageCAT5,10,FALSE)"

😕
Je crois que je me suis lancée dans bien compliqué pour mon niveau 😡
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
548
Retour