Macro :Recherchev dans un autre fichier
Bonjour,
Je viens de m'inscrire sur le forum, je débute en macro sous excel.
Je viens vers vous pour un problème que je n'arrive pas à resoudre
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:
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 SubMerci pour votre aide
Bonne soirée
Salut Kenavo
kenavo a écrit :je suis dans FusionCAT6 je lance ma macro recherchevCAT6 qui va demande le fichier a ouvrir
J'ai ouvert FusionCAT6, il ne contient aucune macro ! Je me suis alors dit qu'il fallait y placer les macros que tu fournis - ce que j'ai fait - mais aucune ne s'appelle recherchevCAT6.
J'ai alors essayé celle appelée RechCAT6 mais elle fait référence à ce fichier justement...
Workbooks("FusionCAT6.xls").Activateet il me semble qu'elle ne demande à aucun moment si l'on veut ouvrir un autre fichier.
Je pense que si d'autres membres ont également essayé de t'aider, ils auront vite abandonné.
Selon moi tu dois revoir tes fichiers et tes demandes si tu veux dobtenir e l'aide.
A te relire.
Bonjour
J'ai essayé de comprendre ce que tu voulais
Pareil comme Yvouille, j'ai été obligé d'inclure les macros
Mais après c'est censé faire quoi ?
J'ai essayé de comprendre
Mais sauf erreur de ma part
Il n'est pas possible de nommer une zone se référent à un autre classeur
J'ai juste cherché sur cette macro
A voir si c'est cela que tu cherches
Sub PlageCAT6()
Dim Fichier As Variant
Dim LaPlage As String
Dim WbkSource As String
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
WbkSource = ActiveWorkbook.Name
LaPlage = Range("M2:V" & Range("F65536").End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
RowAbsolute:=True, _
ColumnAbsolute:=True)
With ThisWorkbook.Sheets("Feuil1")
.Range("O1") = "Pointage"
With .Range("O2:O" & .Range("C65536").End(xlUp).Row)
.Formula = "=VLOOKUP(RC[-9],'[" & WbkSource & "]Feuil1'!" & LaPlage & ",10,FALSE)"
.Value = .Value
End With
End With
Workbooks(WbkSource).Close
End SubA suivre
-- 02 Juin 2011, 14:01 --
Bonjour
Suite
Il faudrait que tu indiques ce que tu veux comme formule dans chaque fichier avec un exemple en toute lettres
Merci
Bonjour,
En fait le code que j'ai mis dans le message se trouve dans le fichier PERSO.XLS j'ai oublié de le mentionner
Donc j'ouvre le fichier FusionCAT6.xls
Je lance la macro PointageCAT6 là je vais chercher le fichier ds lequel je veux faire la recherchev
J'espère que je suis un peu plus clair!!
Merci
Bonjour
Les formules de RECHERCHEV elles sont où ?
Dans quel(s) fichier(s) ?
En clair donnes les formules que tu veux en indiquant leur emplacement
A suivre
La recherchev en formule est : =RECHERCHEV(F2;PlageCAT5;10;FAUX
Ma partie de code est :
Sub RechCAT6()
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 SubJe suis dans FusionCAT6, je lance : PointageCAT6()
cela appelle :
Call PlageCAT6 : qui cree la palge dynamique
Call RechCAT6 : qui fait la recherchev
Bonjour
Je me suis mal expliqué
Marques moi exactement la formule
kenavo a écrit :=RECHERCHEV(F2;PlageCAT5;10;FAUX
Fais comme si la zone PlageCat5 n'était pas définie, en indiquant quelle zone de quel fichier elle se réfère
Et indiques dans quel fichier est est située
Par la même occasion traduis l'autre formule
kenavo a écrit :ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-10],MaPlage,9,FALSE)"
Indiques à quelle zone et à quel fichier se réfère MaPlage
Indiques dans quel fichier elle doit se situer
PlageCAT5 est en jaune dans le fichier CAT5
Maplage est en vert dans le fichier FusionCAT6
Le but est trouver dans la colonne Pièce celle en commun dans l' autre fichier et de ramener le montant dans le colonne Pointage
cf le 2 fichiers joints
MERCI Banzai64!!!
ça marche super !!
Bon je vais regarder attentivement ton code
Par contre est ce que je peux mettre ton code dans mon fichier perso.xls?
Quand je fais mes macro, j'utilise l'enregisteur de macro et ensuite je modifie, je pense que je vais devoir apprendre à écrire un code seule
Bonne soirée
le code ne marche plus si je le mets dans le PERSO.XLS
le problème viens de là?
WbkDest = ThisWorkbook.Name?
Option Explicit
'*****************
'Procédure pour la rechercheV dans CAT6
Sub PlageCAT6()
Dim Fichier As Variant
Dim LaPlage As String
Dim WbkSource As String ' Nom du fichier Source (Cat5)
Dim WbkDest As String ' Nom de ce fichier (Cat6)
WbkDest = ThisWorkbook.Name
'
' Définition de la zone de recherche dans le fichier Destination (Cat6)
'
LaPlage = Range("F2:N" & Range("F65536").End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
RowAbsolute:=True, _
ColumnAbsolute:=True)
' Ouverture du fichier Source (Cat5)
'
Fichier = Application.GetOpenFilename("Fichier XLS (*.xls),*.xls")
If Fichier = False Then Exit Sub ' pas de fichier on quitte
Application.DisplayAlerts = False ' si le fichier est déja ouvert
Workbooks.Open Filename:=Fichier ' Ouverture du fichier
WbkSource = ActiveWorkbook.Name
'
' Dans ce fichier (Cat5) en colonne W on écrit la formule de RechercheV
'
With Sheets("Feuil1")
.Range("W1") = "Pointage"
With .Range("W2:W" & .Range("C65536").End(xlUp).Row)
.Formula = "=VLOOKUP(RC[-10],'[" & WbkDest & "]Feuil1'!" & _
LaPlage & ",9,FALSE)"
.Value = .Value ' Pour remplacer la formule par la valeur
End With
End With
'
' Définition de la zone de recherche dans le fichier Source (Cat5)
'
LaPlage = Range("M2:V" & Range("F65536").End(xlUp).Row).Address(ReferenceStyle:=xlR1C1, _
RowAbsolute:=True, _
ColumnAbsolute:=True)
'
' Dans le fichier Destination (Cat6) en colonne O on écrit la formule de RechercheV
'
With Workbooks(WbkDest).Sheets("Feuil1")
.Range("O1") = "Pointage"
With .Range("O2:O" & .Range("C65536").End(xlUp).Row)
.Formula = "=VLOOKUP(RC[-9],'[" & WbkSource & "]Feuil1'!" & _
LaPlage & ",10,FALSE)"
.Value = .Value ' Pour remplacer la formule par la valeur
End With
End With
'
' fermeture du fichier Source (Cat5)
'
' With Workbooks(WbkSource)
' .Save
' .Close
'End With
End SubMerci et Bonne journée
Bonjour
kenavo a écrit :le code ne marche plus
Oui ça fait léger comme explication
Sur quelle ligne ?
Quel est le message d'erreur ?
A suivre
Bonjour,
Oui pardon pour les explications
En fait quand je mets la macro ( qui marche très bien quand elle est da un module du fichier CAT ) dans mon fichier PERSO.XLS elle ne mets pas d'erreur mais le fait pas le rechercheV dans le FusionCAT6
Bonjour
Alors il faut expliquer un peu mieux
Qu'advient-il des fichiers Cat5 et Cat6 ?
Le format du fichier Perso.xls comment il est ? sa structure
Moi je n'y comprends plus rien (la lassitude peut-être)
On efface tout et on recommence avec des vraies billes
Que veux tu faire exactement et ou?
Marque en CLAIR les formules que tu veux, n'utilises pas de zone nommées (surtout si elles se rapportent à d'autres classeurs)
Marques en ROUGE : ce que tu veux
Fournis les fichiers (TOUS) anonymisés en notant en ROUGE dans chaque fichier et dans la bonne colonne la formule EXACTE que tu veux
A suivre
Je reprends tout (désolée je n’arrive si je me fais mal comprendre)
Mon code est placé dans le fichier PERSO.XLS (C:\Documents and Settings\NomDeMonOrdinateur\Application Data\Microsoft\Office\XLSTART)
J’ouvre le fichier FusionCAT6 : (ce fichier change tous les mois donc je ne veux pas le code dedans, voilà pourquoi je le place dans le fichier PERSO.XLS). Le top serait qu’a partir du début je puisse choisir monFusionCAT6 ( comme mon CAT5) car ainsi je pourrais avoir un fichierCAT6TOTO puis CAT6Titi
A partir de là je veux ouvrir un fichier CAT5
Ma recherchev doit me trouver si le numéro de facture existe dans le fichier CAT5 et en colonne O de FusionCAT6 me ramène le montant de CAT5
Et vice- versa dans mon fichier CAT5 je vais ramener le montant de FusionCAT6 si le num de pièce est trouvé
J’ai mis en couleur les plages et d’une autre couleur ce que je voudrais au final avec des commentaires et j'espère être plus claire
Bonjour
Malgré tes explications, je n'arrive pas à te suivre
Suis vraiment désolé mais je ne vais pas plus loin
Il y entre nous une incompréhension totale
Je te demande
Banzai64 a écrit :Marque en CLAIR les formules que tu veux
Comme formule j'ai des #N/A
Je demande
Banzai64 a écrit :n'utilises pas de zone nommées (surtout si elles se rapportent à d'autres classeurs)
toi dans le fichier tu marques dans le fichier "FusionCAT6"
MaPlage : defini à partir de CAT5 pour le recherchev
et dans le fichier "Cat5"
PlageCAT6 ( cette plage est crée a partir de FusionCAT5 pour la recherchev)
J'espère que tu trouveras une solution
Moi je fais un blocage, je ne comprend pas
Je suivrai ce fil et si un déclic se produit pourquoi pas
Bon courage
Oui en effet je n'avais pas compris pardon
J'ai remis les fichiers avec les formules et sans les plages
Bonsoir
Un essai
J'ai laissé les formules dans les fichiers
Pour n'avoir que les résultats, dans le code enlèves la remarque devant les 2 lignes
' .Value = .Value ' Pour remplacer la formule par la valeur
MERCI Banzai64 pour ta disponibilté et tes comptétences!!!
Ca marche exactement comme je veux
Bonne soirée