Selection d'un classeur ouvert dont le nom est dans une cellule
3 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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.
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
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
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
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
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
Bonjour,
Merci pour ces retours, je vais tester et mettre en application ces précieux conseils.