IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Garder la meme cellule active en changeant de feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut Garder la meme cellule active en changeant de feuille
    Bonjour,
    Petit problème assez simple.
    J'ai un classeur avec 4 onglets : A, B, C et D
    A et B ont la meme structure sauf que pour les utilisateur certaines infos sont a entrer dans A et d'autre dans B.
    Ce qui je souhaite faire est assez simple :
    -si je suis dans A et que je passe sur B je souhaite que la cellule active de A soit la cellule active de B (si je suis sur A2 par exemple sur A et que je clique sur la feuille B, je serai sur A2 dans B)
    En plus, idéalement j'ai exactement le meme positionnement de l'écran : si j'avais ma première cellule de mon ecran B52 je me retrouve sur mon nouvel onglet avec B52 en haut à gauche.
    Idem quand je passe de B à A.
    Par contre je ne souhiate rien faire lorsque je passe de C a A ou tout autre changement de feuille.
    J'imagine qu'il faut utiliser Private Sub Worksheet_Activate() mais je n'arrive pas a retrouver le nom de la feuille d'ou je viens. Je n'arrive pas non plus a retrouver l'adresse de la cellule active de mon ancienne feuille...

    Autre info : j'ai deja une macro à l'ouverture d'excel qui me positione sur la bonne cellule sur la feuille A.
    Si quelqu'un à des idées, merci.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    par défaut, on peut juste positionner B vis à vis de A et vice versa …

    Voir les propriétés ScrollColumn et ScrollRow.


    Sinon pour connaitre la feuille de sortie, il faut tout simplement définir au niveau du module du classeur une variable

    afin de l'alimenter avec l'Index de la feuille dans l'évènement Workbook_SheetDeactivate et tester cet index de feuille

    dans l'évènement Workbook_SheetActivate remplaçant tout évènement individuel dans les modules des feuilles …


    Quant à l'adresse de la cellule active, c'est exactement comme pour la variable d'index de la feuille sortante,
    une variable en entête du module du classeur alimentée elle-aussi dans son évènement Workbook_SheetDeactivate

    Simple, non ?



  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En complément de la réponse de Marc, (La procédure Workbook_SheetActivate a déjà la cellule de la nouvelle feuille activée comme adresse sélectionnée)
    Une idée avec ces deux procédures événementielles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
    Dim rngActive As Range
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
      Sh.Range(rngActive.Address).Select
    End Sub
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
      Set rngActive = Selection
    End Sub
    Si la sélection ne doit pas se faire sur toutes les feuilles, il suffit de mettre un test (Ex : Select Case Sh.Name) dans la procédure Workbook_SheetActivate
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut
    Merci pour vos réponses.
    J'avoue que je croyais qu'il y avait plus simple, mais ca fonctionne pour la cellule active.

    Par contre pour le scroll de l'écran...
    Marc quand tu dis qu'on peut positionner A par rapport a B et vice versa avec les propriétés de scrollrow et scroll column j'avoue que je ne comprend pas trop.
    J'ai utulisé scroll row de la facon suivante dans une autre de mes macros mais je ne vois pas comment positionner A par rapport à B.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWindow.ScrollRow = (i + 1 - Day(Date))
    Plus globalement, si je souhaite savoir a un instant t quelle est la cellule en haut à gauche de mon écran, y a-t-il une fonction qui existe ?
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Row = ActiveWindow.ScrollRow
    mais ca ne ofnctionne pas.

    Merci

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    C'était dans le sens à l'entrée dans la feuille B, positionnement vis à vis de la feuille A
    même si la feuille précédente était la C …

    Mais en fait pour les propriétés Scroll* (pas des objets donc pas de Set = !),
    c'est comme pour les autres lors de la sortie de la feuille …

    Lors de la sortie de la feuille, sauvegarder
    • son n° d'index
    • son n° de première colonne
    • son n° de première ligne
    • l'adresse de la cellule active …

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut
    Merci pour vos contributions, ca fonctionne.
    Voici le code utilisé pour ceux que ca interesse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Option Explicit
    Dim rngActive As Range
    Dim Row As Long
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
      On Error GoTo Erreur
        If (Sh.Name = "Heures" Or Sh.Name = "HeuresDecalees") Then
            ActiveWindow.ScrollRow = Row
            Sh.Range(rngActive.Address).Select
        End If
     
      Exit Sub
     
    Erreur:
    End Sub
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
      If (Sh.Name = "Heures" Or Sh.Name = "HeuresDecalees") Then
      Set rngActive = Selection
      Row = ActiveWindow.ScrollRow
      'MsgBox Row
      End If
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] garder la meme valeur que la cellule précédente
    Par iliesss dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/06/2011, 17h10
  2. Réponses: 4
    Dernier message: 18/01/2006, 18h04
  3. [JTable][editable] cellule activée/ désactivée
    Par nawel dans le forum Composants
    Réponses: 5
    Dernier message: 09/05/2005, 15h37
  4. Réponses: 8
    Dernier message: 14/03/2005, 22h43
  5. [DBGrid] coordonnees ecran de la cellule active ?
    Par kase74 dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/09/2004, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo