Remplir une cellule en fonction d'une autre se trouvant dans un autre classeur ouvert

Frakamout

XLDnaute Nouveau
Bonjour à tous,

J'ouvre pas mal de discussion en ce moment car je suis vraiment novice en VBA...

Je cherche à remplir une cellule en fonction de la valeur d'une autre cellule qui se situe sur un autre classeur.

J'ai tapé:

If ComboBox10 = "6" & Cells(ligne, col - 1) = "X" Then Cells(ligne1, col1) = "N1"

Cells(ligne, col - 1) se trouve sur un autre classeur déja ouvert, mais il doit manquer un bout de code. :/
 

Dranreb

XLDnaute Barbatruc
Re : Remplir une cellule en fonction d'une autre se trouvant dans un autre classeur o

Bonjour.
Dans la mesure où vous ne les spécifiez pas devant les Cells il assume la feuille active du classeur actif, ce dernier pouvant être un autre classeur que celui qui porte la macro. Vous ne pouvez préciser comme expression Worksheet un CodeName de l'autre classeur, seul les siens sont connue de la macro.
À +
 

Frakamout

XLDnaute Nouveau
Re : Remplir une cellule en fonction d'une autre se trouvant dans un autre classeur o

Merci pour ces informations.
J'ai déjà essayé avec :

If ComboBox10 = "6" & Worksheet(ComboBox7.Value).Cells(ligne, col - 1) = "X" Then Cells(ligne1, col1) = "N1"

Et effectivement, cela ne fonctionne pas.

Mais en gros, tu me dis que c'est impossible?
 

Dranreb

XLDnaute Barbatruc
Re : Remplir une cellule en fonction d'une autre se trouvant dans un autre classeur o

Worksheet est un type de donnée mais pas une collection dont vous pouvez extraire un élément. Il manque un "s". Et dans la mesure où vous ne le spécifiez pas, devant
Worksheets cette fois, il assume le classeur actif comme propriétaire de cette autre feuille cherchée, mais il peut toujours être un autre classeur que celui qui porte la macro. Pour se référer au classeur qui porte la macro vous pouvez spécifier ThisWorkbook, sauf pour ses feuilles pour lesquelles vous pouvez utiliser leurs CodeName.
Si vous avez besoin de plus d'un accès à une feuille, affectez par un Set l'expression Worsheet à une variable Worksheet et utilisez la ensuite à la place de l'expression.
À +
 

Frakamout

XLDnaute Nouveau
Re : Remplir une cellule en fonction d'une autre se trouvant dans un autre classeur o

Merci encore de m'aider.

Ma macro se trouvant sur un fichier Excel A ouvre deux autres fichiers Excel (B et C par exemple) dans lesquelles je souhaite remplir une cellule du classeur B par rapport à une cellule du classeur C.

Que dois-je donc écrire?

Peux-tu me mettre un exemple de tes explications (Affection par un SET...)?
 

Dranreb

XLDnaute Barbatruc
Re : Remplir une cellule en fonction d'une autre se trouvant dans un autre classeur o

VB:
Dim FB As Worksheet, CC As Workbook, FC As Worksheet
Workbooks.Open "ClasseurB.xls"
Set FB = ActiveWorkbook.Worksheets(1)
Workbooks.Open "ClasseurC.xls"
Set CC = ActiveWorkbook
...
Set FC = CC.Worksheets(ComboBox7.Value)
If ComboBox10 = "6" And FC.Cells(Ligne, Col - 1) = "X" Then FB.Cells(Lligne1, Col1) = "N1"
Remarque: si le classeur C est resté celui qui est actif jusqu'à l'instruction, on n'a pas besoin de CC ni de son Set bien sûr. On peut spécifier ActiveWorkbook.Worksheets(ComboBox7.Value)

Et si la feuille C n'est pas utilisée ailleurs que dans cette instruction, laquelle n'est exécutée qu'une fois, on n'a pas besoin de FC ni de son affectation, on peut utiliser directement CC.Worksheets(ComboBox7.Value)
Où ActiveWorkbook.Worksheets(ComboBox7.Value) si ça se cumule encore avec la 1ère hypothèse.

C'est devenu un réflexe chez moi:
Dès que j'utilise plus d'une fois un classeur je le Set dans une varable As WorkBook,
dès que j'utilise plus d'une fois une feuille je la Set dans une variable As Worksheet,
dès que j'utilise plus d'une fois et moins de 7 fois (environ) une plage de cellules contiguës, je la Set dans une variable As Range.
Pour une utilisation intensive de valeurs de cellules d'une même feuille je m'en charge les Value dans un tableau de Variant. Pour des questions de performance, ça vaut le coup, pour un millier de valeurs à consulter effectivement, si elles sont disjointes, de charger un tableau 100 fois plus grand.
Pareil pour les modifications: on peut décharger d'un seul coup un tableau de Variant dans une grande plage de cellules.

Cordialement.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 452
Messages
2 088 543
Membres
103 880
dernier inscrit
rafaelredsc