Afficher ET utiliser la dernière feuille ou onglet précédemment sélectionné(e) en VBA

lalalie3

XLDnaute Nouveau
Bonjour a tous et toutes,
Ma question est la suivante :
Comment afficher ET utiliser la dernière feuille ou onglet précédemment sélectionné(e) en VBA ?
Je m'explique :
J'ai 2 classeurs, le premier [calendrier] crée un calendrier sur une année complète + 7 jours qui va générer un second classeur [planning] avec pléthore d'onglets (53 à 55 onglets correspondants aux nombre de semaines de cette même année +7 jours). Ses onglets sont nommés en fonction du n° de semaine et de l'année (S_n°semaine_année)
Mon souci est que je dois sélectionner un code dans l'onglet S_n°semaine_année qui se trouve dans un autre onglet (Salariés).
En fait pour faire court il faut que je dise a Excel d'aller chercher l'information désirée et de me réafficher l'onglet sur lequel je viens de faire ma dernière sélection.


Ci-dessous le lien des classeurs liés.

Cijoint.fr - Service gratuit de dépôt de fichiers


Si je n'ai pas été assez clair n'hésitez pas…

Merci par avance pour votre aide et au plaisir de vous lire.
 

Dranreb

XLDnaute Barbatruc
Re : Afficher ET utiliser la dernière feuille ou onglet précédemment sélectionné(e) e

Bonjour.
Je n'ai pas ouvert le classeur, mais, la solutuion générale est de noter le classeur actif par un Set dans une variable As WorkBook avant d'activer l'autre classeur, par exemple MonClasseur, puis de faire MonClasseur.Activate après. Pareil pour la feuille dans une variable As Worksheet si nécessaire.
Si la macro est écrite dans le classeur à réactiver c'est plus simple: ThisWorkbook.Activate: Feuil1.Activate, Feuil1 étant le CodeName de la feuille à réactiver.
À noter aussi pour information qu'avec une variable As Range correctement initialisée on à tout: sa propriété Parent ou Worksheet redonne la feuille, son objet Worksheet, et ce dernier a une propriété Parent qui redonne son objet Workbook.
Cordialement.
 

lalalie3

XLDnaute Nouveau
Re : Afficher ET utiliser la dernière feuille ou onglet précédemment sélectionné(e) e

Bonjour,
Merci pour ces informations.
Ce que je cherche a faire se trouve dans le meme classeur. Il faut que je trouve le moyen de "naviguer" entre 2 feuilles une qui est la source et l'autre le "receptacle".

J'ai une autre question : Pourquoi lorsque je fais mon cop/col de calendrier vers Planning les dates ne se positionnent pas dans le bon onglet ? alors que je pense lui avoir bien dis de me faire ce cop/col dans l'onglet correspondant a une concaténisation egale au nom de l'onglet.

Pourriez vous m'eclairer ?

Au plaisir de vous lire.
 

Dranreb

XLDnaute Barbatruc
Re : Afficher ET utiliser la dernière feuille ou onglet précédemment sélectionné(e) e

lorsque je fais mon cop/col de calendrier vers Planning
Où faut-il regarder, quel classeur, quel module, quelle procédure ?
Enfin personnellement je travaille avec des Range. j'utilise le moins possible les Activate et Select
j'affecte les Value en général de la source à la destination, ce qui n'en requiert jamais.
À+
 

lalalie3

XLDnaute Nouveau
Re : Afficher ET utiliser la dernière feuille ou onglet précédemment sélectionné(e) e

il faut regarder dans le classeur Calendrier onglet calendier module 1 procedure nommée sub copcol.

Voici le dossier où il y a tout.
Cijoint.fr - Service gratuit de dépôt de fichiers

au plaisir de vous lire
 

Dranreb

XLDnaute Barbatruc
Re : Afficher ET utiliser la dernière feuille ou onglet précédemment sélectionné(e) e

Bonsoir.
C'est parce que:
Sheets("S_" & numsem & "_" & Format(dateorigine, "yyyy")).Activate
n'affecte pas cette feuille à ActiveSheet si elle n'est pas dans ActiveWorkbook ce qui semle être le cas puisque plus haut vous définissez:
Set wksCALEND = ActiveWorkbook.Sheets("calendrier")
et que vous n'activez pas d'autre classeur avant l'opération.
Mais encore une fois n'utilisez pas cette voie empruntée par l'enregistreur de macro du fait que les opérations exécutées par l'usager ne peuvent se faire que via des sélections.
Vous pourriez vous passer de wksCALEND: ça existe déjà et ça s'appelle Feuil1 dans le projet VBA (mais vous pourriez le renommer WskCALEND dans les propriétés si vous voulez).
Qualifiez vos méthodes Range et Cells par les identifiant de feuille pour qu'il emploi la méthode Range de l'objet Workskeet plutôt que celle de l'objet Application qui assume la feuille active du classeur actif.
remplacez toute les séquences UnTruc.Select: Selection.FaitEnÇa par UnTruc.FaitEnÇa
wksCALEND.Activate
Sheets("calendrier").Select
Range("B1").Select
Selection.Copy
Workbooks("Planning_caisse_original.xls").Activate
Sheets("Paramétrages").Select
Range("C2").Select
ActiveSheet.Paste
Tout ça peut s'écrire:
VB:
    Feuil1.Range("B1").Copy Destination:=Workbooks("Planning_caisse_original.xls").Sheets("Paramétrages").Range("C2")
Ou pour ne copier que la valeur:
VB:
Workbooks("Planning_caisse_original.xls").Sheets("Paramétrages").Range("C2").Value = Feuil1.Range("B1").Value
À+
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 010
Membres
101 866
dernier inscrit
XFPRO