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 Sub

Merci pour votre aide

Bonne soirée

64cat5fred.zip (3.87 Ko)
78fusioncat6.xls (18.50 Ko)

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").Activate

et 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 Sub

A 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 Sub

Je 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

67fusioncat6.zip (6.15 Ko)
105cat5.zip (7.08 Ko)

Bonsoir

A voir

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 Sub

Merci 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

24fusioncat6.zip (10.23 Ko)
32cat5.zip (5.49 Ko)

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

45cat5.zip (8.88 Ko)
40fusion.zip (11.23 Ko)

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
137kenavo-perso-v001.zip (13.97 Ko)

MERCI Banzai64 pour ta disponibilté et tes comptétences!!!

Ca marche exactement comme je veux

Bonne soirée

Rechercher des sujets similaires à "macro recherchev fichier"