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

pb de sélection de feuille (vba)

8 réponses
Avatar
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

8 réponses

Avatar
Daniel.C
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


Avatar
JPMonnier
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" a écrit dans le message de
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




Avatar
Michel Angelosanto
il faut remplacer windows par sheets

"j-pascal" a écrit dans le message de
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
Avatar
j-pascal
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" a écrit dans le message de groupe de
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


Avatar
j-pascal
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




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

JP

il faut remplacer windows par sheets

"j-pascal" a écrit dans le message de
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




Avatar
j-pascal
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" a écrit dans le message de
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






Avatar
j-pascal
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 !