Recherchev dans un autre fichier

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

  • FusionCAT6.xls
    18.5 KB · Affichages: 88
  • cat5fred.xls
    22.5 KB · Affichages: 95

Gael

XLDnaute Barbatruc
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
 

kenavo

XLDnaute Junior
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)"

:confused:
Je crois que je me suis lancée dans bien compliqué pour mon niveau :mad:
 

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 422
Membres
103 206
dernier inscrit
diambote