Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Selection d'un classeur ouvert dont le nom est dans une cellule

3 réponses
Avatar
Alex
Bonjour,
Dans une macro, j'ouvre un classeur dont le nom apparait dans une cellule :
Workbooks.Open Filename:= _
Range("E" & i).Value
Une fois ouvert je copie une zone, et retourne sur mon classeur "origine", et souhaiterai revenir sur le second classeur toujours en utilisant la valeur de la cellule :
Workbooks(Range("E" & i).Value).Activate
mais la j'ai un message d'erreur : l'indice n'appartient pas Í  la selection.
Quand je me mets sur la ligne, il indique pourtant le bon chemin du fichier.
Auriez vous la solution Í  mon problème.
Merci par avance de votre aide.
Bonne journée

3 réponses

Avatar
MichD
Le 21/10/21 Í  09:36, Alex a écrit :
Bonjour,
Dans une macro, j'ouvre un classeur dont le nom apparait dans une cellule :
Workbooks.Open Filename:= _
Range("E" & i).Value
Une fois ouvert je copie une zone, et retourne sur mon classeur "origine", et souhaiterai revenir sur le second classeur toujours en utilisant la valeur de la cellule :
Workbooks(Range("E" & i).Value).Activate
mais la j'ai un message d'erreur : l'indice n'appartient pas Í  la selection.
Quand je me mets sur la ligne, il indique pourtant le bon chemin du fichier.
Auriez vous la solution Í  mon problème.
Merci par avance de votre aide.
Bonne journée

Bonjour,
Pour faire ce que tu veux, l'usage d'une variable va te faciliter la
t͢che. Je te donne un exemple :
'Déclaration d'une variable Objet Workbook
Dim Wk As Workbook
'Pour affecter un classeur Í  cette variable (objet), il
'faut utiliser l'expression "Set" comme suit :
Set Wk = Workbooks.Open Filename:=Range("E" & i).Value
Maintenant, Wk représente ton classeur. Au lieu d'utiliser le nom de ton
classeur, tu emploies cette variable
Wk.Activate
Pour écrire dans la feuille "Feuil1" dans la cellule A1
Attention au "." dans la syntaxe... Signification de chaque ligne
'Avec le classeur que représente cette variable
With Wk
'Avec la feuille Feuil1 appartenant au classeur Wk
'le point signifie l'appartenante de la "Feuil1" au classeur Wk
With .Worksheets("Feuil1")
'Avec la cellule A1 de la Feuil1
'Attribution de la valeur "Toto".
.range("A1").Value = "toto"
End with 'Fin du travail avec l'objet Feuil1
End with 'Fin du travail avec l'objet Wk
Pour Fermer le classeur :
Wk.Close True 'True pour sauvegarde ou false sans sauvegarde
Cette manière d'écrire du code permet de l'inscrire dans n'importe quel
module du projetVBA et il va fonctionner.
Tu peux déclarer une variable pour chacun des classeurs de la procédure,
par la suite, tu utilises leur variables.
Est-ce que cela répond Í  ta question?
MichD
Avatar
MichD
Le 21/10/21 Í  09:36, Alex a écrit :
Workbooks(Range("E" & i).Value).Activate

Plus simplement, si plutÍ´t dans le code, tu as pu ouvrir le fichier en
faisant référence Í  Range("E" & i).Value, cela signifie que dans cette
cellule, il y a le chemin + le nom du classeur.
Ta ligne de code requiert seulement le nom du classeur lorsqu'il est
ouvert et pas le chemin
Ce que tu peux faire, c'est d'extraire le nom du classeur,
Dim T As String, F as String
T = Range("E" & i).Value
F = Split(T, "")(UBound(Split(T, "")))
Workbooks(F).Activate
MichD
Avatar
Alex
Bonjour,
Merci pour ces retours, je vais tester et mettre en application ces précieux conseils.
Merci encore pour ton aide.
Bonne journée