pb de sélection de feuille (vba)

Le
j-pascal
Bonsoir,

Ci-après les noms de divers classeurs et feuilles :

NomClasseurActif = ActiveWorkbook.Name '(prévient les modifs)
NomFeuilActive = ActiveSheet.Name
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Du code :

[]

Windows(NomFichierImport).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close
Application.EnableEvents = True

[Le classeur actif réapparaît après fermeture du classeur précédent]
Sheets("import relance").Activate
Sheets("import relance").Visible = False

[Je me demande si la ligne suivante est indispensable, sauf à s'assurer
qu'on récupère le bon classeur ]

Windows(NomClasseurActif).Activate 'ajout 13/04/09

[Quoiqu'il en soit, je suis bien sur le bon classeur, mais impossible
d'activer la bonne feuille avec la ligne suivante !! ]

Windows("NomFeuilActive").Select

Question : Pourquoi cette dernière ligne ne me sélectionne pas l'onglet
voulu ?

Merci d'avance pour votre aide,

JP
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #19116431
Bonsoir.
Il ne faut pas mettre le nom d'une variable entre guillemets :
Windows(NomFeuilActive).Select
Cordialement.
Daniel

Bonsoir,

Ci-après les noms de divers classeurs et feuilles :

NomClasseurActif = ActiveWorkbook.Name '(prévient les modifs)
NomFeuilActive = ActiveSheet.Name
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Du code :

[...]

Windows(NomFichierImport).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close
Application.EnableEvents = True

[Le classeur actif réapparaît après fermeture du classeur précédent]
Sheets("import relance").Activate
Sheets("import relance").Visible = False

[Je me demande si la ligne suivante est indispensable, sauf à s'assurer qu'on
récupère le bon classeur ...]

Windows(NomClasseurActif).Activate 'ajout 13/04/09

[Quoiqu'il en soit, je suis bien sur le bon classeur, mais impossible
d'activer la bonne feuille avec la ligne suivante !! ]

Windows("NomFeuilActive").Select

Question : Pourquoi cette dernière ligne ne me sélectionne pas l'onglet voulu
?

Merci d'avance pour votre aide,

JP


JPMonnier
Le #19116421
Bonsoir JP
Windows("NomFeuilActive").Select à remplacer par
Sheets(NomFeuilActive).activate
Bien que lorsque ton classeur actif est activé, il se trouve déja sur la
feuille active !!
Ou je n'ai pas tout compris
--
Cordialement


"j-pascal" news:
Bonsoir,

Ci-après les noms de divers classeurs et feuilles :

NomClasseurActif = ActiveWorkbook.Name '(prévient les modifs)
NomFeuilActive = ActiveSheet.Name
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Du code :

[...]

Windows(NomFichierImport).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close
Application.EnableEvents = True

[Le classeur actif réapparaît après fermeture du classeur précédent]
Sheets("import relance").Activate
Sheets("import relance").Visible = False

[Je me demande si la ligne suivante est indispensable, sauf à s'assurer
qu'on récupère le bon classeur ...]

Windows(NomClasseurActif).Activate 'ajout 13/04/09

[Quoiqu'il en soit, je suis bien sur le bon classeur, mais impossible
d'activer la bonne feuille avec la ligne suivante !! ]

Windows("NomFeuilActive").Select

Question : Pourquoi cette dernière ligne ne me sélectionne pas l'onglet
voulu ?

Merci d'avance pour votre aide,

JP




Michel Angelosanto
Le #19116411
il faut remplacer windows par sheets

"j-pascal" news:
Bonsoir,

Ci-après les noms de divers classeurs et feuilles :

NomClasseurActif = ActiveWorkbook.Name '(prévient les modifs)
NomFeuilActive = ActiveSheet.Name
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Du code :

[...]

Windows(NomFichierImport).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close
Application.EnableEvents = True

[Le classeur actif réapparaît après fermeture du classeur précédent]
Sheets("import relance").Activate
Sheets("import relance").Visible = False

[Je me demande si la ligne suivante est indispensable, sauf à s'assurer
qu'on récupère le bon classeur ...]

Windows(NomClasseurActif).Activate 'ajout 13/04/09

[Quoiqu'il en soit, je suis bien sur le bon classeur, mais impossible
d'activer la bonne feuille avec la ligne suivante !! ]

Windows("NomFeuilActive").Select

Question : Pourquoi cette dernière ligne ne me sélectionne pas l'onglet
voulu ?

Merci d'avance pour votre aide,

JP





--
Michel Angelosanto, Bordeaux
Dernières mises à jour du site Voyage au pays Internet
http://angelosa.free.fr/index.php?t=8
j-pascal
Le #19116391
Bonsoir,

Effectivement, j'ai modifié comme suit :

'Windows(NomClasseurActif).Activate 'supprimé le 14/04/09
Workbooks(NomClasseurActif).Activate 'ajouté 14/04/09
'Windows("NomFeuilActive").Select 'supprmé le 14/04/09
Worksheets(NomFeuilActive).Select 'ajout 14/04/09

... et ça fonctionne,

Mais qu'est-ce que : "Windows(NomClasseurActif).Activate" active ?
Il s'agit bien d'une "activation" ?!

Un grand merci.

@+

JP

Bonjour J-Pascal,

C'est toujours le même principe

d'abord tu dois t'assurer que c'est le bon classeur qui est
la fenêtre actif, la feuille et en dernier lieu la feuille

Workbooks("NomDuclasseur.xls").Activate
Worksheets(NomDeLaFeuille).Select
Range("A1").Select

Ou une autre syntaxe

With Workbooks("NomDuclasseur.xls").Worksheets(NomDeLaFeuille).
.range("A1") = "Ok"
End With



"j-pascal" discussion : Bonsoir,

Ci-après les noms de divers classeurs et feuilles :

NomClasseurActif = ActiveWorkbook.Name '(prévient les modifs)
NomFeuilActive = ActiveSheet.Name
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Du code :

[...]

Windows(NomFichierImport).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close
Application.EnableEvents = True

[Le classeur actif réapparaît après fermeture du classeur précédent]
Sheets("import relance").Activate
Sheets("import relance").Visible = False

[Je me demande si la ligne suivante est indispensable, sauf à s'assurer
qu'on récupère le bon classeur ...]

Windows(NomClasseurActif).Activate 'ajout 13/04/09

[Quoiqu'il en soit, je suis bien sur le bon classeur, mais impossible
d'activer la bonne feuille avec la ligne suivante !! ]

Windows("NomFeuilActive").Select

Question : Pourquoi cette dernière ligne ne me sélectionne pas l'onglet
voulu ?

Merci d'avance pour votre aide,

JP


j-pascal
Le #19116381
Bonsoir Daniel,

J'ai donc fait un essai avec : Windows(NomFeuilActive).Select

Mais ça ne fonctionne pas (chez moi !)

JP

Bonsoir.
Il ne faut pas mettre le nom d'une variable entre guillemets :
Windows(NomFeuilActive).Select
Cordialement.
Daniel

Bonsoir,

Ci-après les noms de divers classeurs et feuilles :

NomClasseurActif = ActiveWorkbook.Name '(prévient les modifs)
NomFeuilActive = ActiveSheet.Name
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Du code :

[...]

Windows(NomFichierImport).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close
Application.EnableEvents = True

[Le classeur actif réapparaît après fermeture du classeur précédent]
Sheets("import relance").Activate
Sheets("import relance").Visible = False

[Je me demande si la ligne suivante est indispensable, sauf à s'assurer
qu'on récupère le bon classeur ...]

Windows(NomClasseurActif).Activate 'ajout 13/04/09

[Quoiqu'il en soit, je suis bien sur le bon classeur, mais impossible
d'activer la bonne feuille avec la ligne suivante !! ]

Windows("NomFeuilActive").Select

Question : Pourquoi cette dernière ligne ne me sélectionne pas l'onglet
voulu ?

Merci d'avance pour votre aide,

JP




j-pascal
Le #19116371
Merci pour cette proposition que j'avais déjà essayée sans succès.

JP

il faut remplacer windows par sheets

"j-pascal" news:
Bonsoir,

Ci-après les noms de divers classeurs et feuilles :

NomClasseurActif = ActiveWorkbook.Name '(prévient les modifs)
NomFeuilActive = ActiveSheet.Name
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Du code :

[...]

Windows(NomFichierImport).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close
Application.EnableEvents = True

[Le classeur actif réapparaît après fermeture du classeur précédent]
Sheets("import relance").Activate
Sheets("import relance").Visible = False

[Je me demande si la ligne suivante est indispensable, sauf à s'assurer
qu'on récupère le bon classeur ...]

Windows(NomClasseurActif).Activate 'ajout 13/04/09

[Quoiqu'il en soit, je suis bien sur le bon classeur, mais impossible
d'activer la bonne feuille avec la ligne suivante !! ]

Windows("NomFeuilActive").Select

Question : Pourquoi cette dernière ligne ne me sélectionne pas l'onglet
voulu ?

Merci d'avance pour votre aide,

JP




j-pascal
Le #19116361
Bonsoir,

Je sais, c'est un peu tordu, mais la macro travaille sur plusieurs
classeurs et plusieurs feuilles tour à tour actifs... La solution de
MichDenis est néanmoins très efficace.
Je te remercie pour ta proposition,
JP

Bonsoir JP
Windows("NomFeuilActive").Select à remplacer par
Sheets(NomFeuilActive).activate
Bien que lorsque ton classeur actif est activé, il se trouve déja sur la
feuille active !!
Ou je n'ai pas tout compris
--
Cordialement


"j-pascal" news:
Bonsoir,

Ci-après les noms de divers classeurs et feuilles :

NomClasseurActif = ActiveWorkbook.Name '(prévient les modifs)
NomFeuilActive = ActiveSheet.Name
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Du code :

[...]

Windows(NomFichierImport).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close
Application.EnableEvents = True

[Le classeur actif réapparaît après fermeture du classeur précédent]
Sheets("import relance").Activate
Sheets("import relance").Visible = False

[Je me demande si la ligne suivante est indispensable, sauf à s'assurer
qu'on récupère le bon classeur ...]

Windows(NomClasseurActif).Activate 'ajout 13/04/09

[Quoiqu'il en soit, je suis bien sur le bon classeur, mais impossible
d'activer la bonne feuille avec la ligne suivante !! ]

Windows("NomFeuilActive").Select

Question : Pourquoi cette dernière ligne ne me sélectionne pas l'onglet
voulu ?

Merci d'avance pour votre aide,

JP






j-pascal
Le #19118011
Bonjour,

Je pense que tes conseils sont (évidemmment) très judicieux et surtout
pour le néophyte que je suis.
Sauf à rencontrer un pb au moment de l'utilisation, je pense avoir bien
compris l'intérêt de procéder ainsi à l'avenir.
Merci beaucoup. Je me lance ... et je te tiens au courant.

@+

JP


Mais qu'est-ce que : "Windows(NomClasseurActif).Activate" active ?



Pourquoi désires-tu tant utiliser Windows plutôt que Workbooks() ?

En théorie, Windows(NomClasseurActif).Activate fonctionne mais quand
tu définis tes variables de cette manière :

NomClasseurActif = ActiveWorkbook.Name '(prévient les modifs)
NomFeuilActive = ActiveSheet.Name

Ceci est du code très approximatif ! au lancement de ton code, si tu as
plus d'un classeur ouvert, comment fais-tu pour être sûr que ActiveWorbook
est le bon classeur qui est actif ?

Les expressions suivantes utilisées très fréquemment par l'enregistreur de
macro sont à remplacer à chaque fois où c'est possible :
ActiveCell, ActiveWorkbook, Activesheet, Selection

Tu peux (devrais) utiliser les variables "objet" pour ce faire :

Dim Wk As Workbook
Dim Sh As Worksheet

Set Wk = ThisWorkbook
OU
Set Wk = Workbooks("MonClasseur.xls")
Ou
Set Wk = Workbooks.Open("c:CheminMonClasseur.xls")
Ou
Set Wk = Workbooks.Add

Et pour spécifier une feuille de la variable objet Wk
Set Sh = Wk.Worksheets("NomDeLaFeuille")

Tout au long du code, Wk Et Sh représentent toujours le même classeur et la
même feuille. à n'importe quel moment, tu peux faire appel la la feuille Sh
sans faire référence à l'objet Wk.

Avec un peu d'habitude, c'est beaucoup plus précis, plus court à écrire et
plus lisible.

Une bonne habitude à développer !


Publicité
Poster une réponse
Anonyme