VBA - Formules qui fait référence à deux classeurs

VBA - Formules qui fait référence à deux classeurs - VB/VBA/VBS - Programmation

Marsh Posté le 27-03-2016 à 22:43:54    

Bonjour à tous,
 
J'ai besoin de votre aide :
ActiveCell.Formula = "=INDEX(Pointage,MATCH(72520,Section,0),MATCH(72033,Matricule,0))"
 
Je souhaite appliquer cette formule dans ma macro, la formule fonctionne mais la difficulté ici est que les plages Pointage, Section et Matricule se trouvent dans un autre classeur.  
 
Ma question est donc la suivante comment je définis ces plages pour que je puisse appliquer ma formule, j'avais pensé à ça :
 
'Dim Section As Range
'Section = Range("A9:A53" )
 
'Dim Matricule As Range
'Matricule = Range("C7:F7" )
 
'Dim Pointage As Range
'Pointage = Range("C9:F53" )
 
mais ça n'a pas l'air de fonctionner ! :-(  
 
Je vous remercie d'avance pour votre aide !!
 


---------------
Une novice en VBA
Reply

Marsh Posté le 27-03-2016 à 22:43:54   

Reply

Marsh Posté le 29-03-2016 à 10:35:42    

 
            Bonjour,
 
            quelle est la formule fonctionnant et entrée manuellement directement dans une cellule ?
 

Reply

Marsh Posté le 29-03-2016 à 16:55:56    

juju0989 a écrit :

Bonjour à tous,
 
J'ai besoin de votre aide :
ActiveCell.Formula = "=INDEX(Pointage,MATCH(72520,Section,0),MATCH(72033,Matricule,0))"
 
Je souhaite appliquer cette formule dans ma macro, la formule fonctionne mais la difficulté ici est que les plages Pointage, Section et Matricule se trouvent dans un autre classeur.  
 
Ma question est donc la suivante comment je définis ces plages pour que je puisse appliquer ma formule, j'avais pensé à ça :
 
'Dim Section As Range
'Section = Range("A9:A53" )
 
'Dim Matricule As Range
'Matricule = Range("C7:F7" )
 
'Dim Pointage As Range
'Pointage = Range("C9:F53" )
 
mais ça n'a pas l'air de fonctionner ! :-(  
 
Je vous remercie d'avance pour votre aide !!
 


 
 
Salut Juju,
je suppose que tu veux garder le lien avec l'autre classeur qui contient tes plages de données "Pointage","Section" et "Matricule" et que ce sont ces informations qui doivent être ramenées à l'aide de ta formule.  
 
Pour cela, selon que ton classeur a un nom composite ( ex: Classeur De Test.xlsx) ou un nom simple (ex: Classeur1.xlsx), tu pourras adapter une des formules suivantes:
 
1°) ActiveCell.Formula = "=INDEX('Classeur De Test.xlsx'!Pointage,MATCH(72520,'Classeur De Test.xlsx'!Section,0),MATCH(72033,'Classeur De Test.xlsx'!Matricule,0))"
 
2°) ActiveCell.Formula = "=INDEX(Classeur1.xlsx!Pointage,MATCH(72520,Classeur1.xlsx!Section,0),MATCH(72033,Classeur1.xlsx!Matricule,0))"
 
Bien évidemment, l'extension ".xlsx" doit être modifiée si ton fichier n'est pas de ce format (tu pourrais avoir en effet .xls, .xlsm, etc.)
Concernant tes valeurs cherchées 72520 et 72033, si ce sont des textes, il serait souhaitable de les écrire comme ceci dans la formule: ""72520"" et ""72033"" pour éviter de mauvaises surprises.
Tu aurais donc par exemple : ActiveCell.Formula = "=INDEX(Classeur1.xlsx!Pointage,MATCH(""72520"",Classeur1.xlsx!Section,0),MATCH(""72033"",Classeur1.xlsx!Matricule,0))"
 
 
J'ai aussi vu que tu voudrais nommer des plages. Tu sélectionnes la plage; et tu lui donnes un nom. Par exemple pour Matricule (en prenant les références de ton post et en supposant que tu es deja sur le classeur et la feuille concernée), on aura 2 lignes de codes:  
 
Range("C7:F7" ).select            'Ou encore Range(cells(7,3),cells(7,6)).select
Selection.Name="Matricule"
 
 
Merci. N'hésite pas à me signaler si j'oublie une chose.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed