XL 2013 Fonction INDEX VBA - Deux classeurs de références

juju0989

XLDnaute Nouveau
Bonjour,

Je ne sais pas si l'intitulé de mon poste est très clair.

Je souhaite utiliser cette fonction dans une macro :

ActiveCell.Formula = "=INDEX(Pointage,MATCH(72520,Section,0),MATCH(72033,Matricule,0))"

La difficulté ici est que les plages "Pointage", "Section" et "Matricule" font référence à un autre classeur.
Je dois sélectionner ces plages depuis un autre classeur mais je n'y parviens pas !

Merci de votre aide.
:confused:
 

Hieu

XLDnaute Impliqué
Re : Fonction INDEX VBA - Deux classeurs de références

Bonjour,

essaie ça:

Code:
Pointage = Sheets("Feuil2").Range("d3:f6")
Section = Sheets("Feuil2").Range("c3:c6")
Matricule = Sheets("Feuil2").Range("d2:f2")

ActiveCell.Formula = "=INDEX(Pointage,MATCH(72520,Section,0),MATCH(72033,Matricule,0))"

En modifiant le nom de la feuille, et les plages concernées pour tes variables Pointage, Section et Matricule.

++
Hieu.
 

juju0989

XLDnaute Nouveau
Re : Fonction INDEX VBA - Deux classeurs de références

Merci Hieu pour ta réponse mais les variables pointage, section et matricules sont dans un autre classeur.

Le code que tu m'as mis fait seulement référence à une feuille et à une plage de cellule.
As-tu une idée pour indiquer dans ses variables le nom du classeur ?

Merci d'avance !
 

Dranreb

XLDnaute Barbatruc
Re : Fonction INDEX VBA - Deux classeurs de références

Bonjour.
S'indique normalement entre crochets droits
.FormulaR1C1 = "=[CBxLiéesSsDico.xlsm]NomFic"

Le mieux c'est de mettre au point la formule à la main dans la cellule puis de pomper sa Formula.
 
Dernière édition:

juju0989

XLDnaute Nouveau
Re : Fonction INDEX VBA - Deux classeurs de références

Merci Dranreb de ton retour,

C'est ce que j'ai fait, j'ai pomper la formule et ça m'a donné ça :

ActiveCell.FormulaR1C1 = _
"=+INDEX('[Pointage Expédition.xlsx]Récap période'!R9C3:R53C6,MATCH(72520,'[Pointage Expédition.xlsx]Récap période'!R9C1:R53C1,0),MATCH(70033,'[Pointage Expédition.xlsx]Récap période'!R7C3:R7C6,0))"

Mon soucis s'est que la formule ne va pas seulement s'appliquer au fichier "Pointage Expédition" ce que j'aimerais faire c'est que ma macro en fonction du fichier sélectionner change le nom du fichier dans la formule.

POur être bref, la macro a pour but de synthétiser les informations de plusieurs fichiers j'aimerai donc que le nom du fichier change dans la formule en fonction du fichier que je synthétise

J'ouvre le fichier que je veux synthétiser :

Application.Dialogs(xlDialogOpen).Show
Nomfichier = ActiveWorkbook.Name

Je retourne ensuite dans mon fichier de synthèse :

Windows("Synthèse.xlsm").Activate
Sheets("Synthèse").Select
Range("C6").Activate

et je veux appliquer ma fonction index en utilisant ma variable Nomfichier

J'espère etre plus précise dans ma demande !

Merci d'avance
 

Dranreb

XLDnaute Barbatruc
Re : Fonction INDEX VBA - Deux classeurs de références

Comme ça alors :
VB:
ActiveCell.FormulaR1C1 = "=INDEX('[" & NomFichier & "]Récap période'!R9C3:R53C6,MATCH(72520,'[" _
   & NomFichier & "]Récap période'!R9C1:R53C1,0),MATCH(70033,'[" _
   & NomFichier & "]Récap période'!R7C3:R7C6,0))"
 

juju0989

XLDnaute Nouveau
Re : Fonction INDEX VBA - Deux classeurs de références

Dranreb un énorme MERCI !!:D Ca fonctionne parfaitement !!

J'aurais encore deux petites questions :

- Je voudrais que les valeurs 72520 (Section) et 70033 (Matricule) soient des variables :

Dim Matricule As String

ActiveCell.FormulaR1C1 = "=INDEX('[" & Nomfichier & "]Récap période'!HEURES,MATCH(72520,'[" _
& Nomfichier & "]Récap période'!SECTIONS,0),MATCH('[" & Matricule & "],'[" _
& Nomfichier & "]Récap période'!MATRICULES,0))"

Mais ça m'affiche un message d'erreur : "Erreur d'exécution '1004' : Erreur définie par l'application ou par l'objet"

- J'aimerais que la formule ne s'affiche pas dans mon fichier EXCEL, je voudrais seulement le résultat de la formule, Est-ce possible ?

Merci d'avance ! :eek:
 

Dranreb

XLDnaute Barbatruc
Re : Fonction INDEX VBA - Deux classeurs de références

Décomposez c'est préférable. Dans ce genre :
VB:
Dim FSrc As Worksheet, CelCbl As Range, Section As String, Matricule As String, L As Long, C As Long
Set FSrc = ActiveWorkbook.Worksheets("Récap période")
Set CelCbl = ???
L = WorksheetFunction.Match(Section, FSrc.[Sections], 0)
C = WorksheetFunction.Match(Matricule, FSrc.[Matricules], 0)
CelCbl.Value = FSrc.[HEURES].Cells(L, C).Value
 
Dernière édition:

juju0989

XLDnaute Nouveau
Re : Fonction INDEX VBA - Deux classeurs de références

Merci Dranreb et désolé pour mon retour plus que tardive.

J'ai essayé ton code mais ça m'affiche ce message d'erreur :
"Impossible de lire la propriété Match de la classe WorksheetFunction"

Est-ce moi qui exécute mal ton code ?

Merci :D
 

Dranreb

XLDnaute Barbatruc
Re : Fonction INDEX VBA - Deux classeurs de références

Bonsoir
Mettez des espions sur les expressions, vérifiez la concordance des types de données.
Je ne peux pas le faire à votre place, faute d'avoir le classeur entre les mains.
 

juju0989

XLDnaute Nouveau
Re : Fonction INDEX VBA - Deux classeurs de références

Bonsoir,

Je ne maîtrise pas les espions sous VBA, il faut que j'y regarde.
Si tu veux y jeter un coup d'œil je te mets en pj un fichier simplifié.

Merci pour ton aide.
 

Pièces jointes

  • TEST.xlsm
    18.2 KB · Affichages: 39
  • TEST.xlsm
    18.2 KB · Affichages: 29

Dranreb

XLDnaute Barbatruc
Re : Fonction INDEX VBA - Deux classeurs de références

Il ne faut pas Activate derrière.
je ne sais si cette méthode renvoie quelque chose, mais surement pas un objet Range.
Après essai, la méhode Activate de l'objet Range renvoie un Boolean. J'ignore à quoi ça sert !…
 
Dernière édition:

Discussions similaires