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 :

Comment changer la cellule active dans une feuille sans l'activer ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Developpeur
    Inscrit en
    Novembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2024
    Messages : 8
    Par défaut Comment changer la cellule active dans une feuille sans l'activer ?
    Bonjour,

    Comment changer la cellule active dans une feuille sans être obligé de l'afficher.
    je me suis aperçu que mon code plante si la cellule active est dans le tableau Excel "TableLocataires" d'où j'extrais les données.


    contexte:
    il y a un bouton dans la feuille "FeuilleListeChoix" qui va lire le contenu d'un tableau Excel nommé "TableLocataires" présent la feuille "locataires" et crée une liste dans la feuille "FeuilleListeChoix" en fonction de critères critères de filtrage présents dans cette feuille.

    Voici le code lancé par le bouton présent dans la feuille "FeuilleListeChoix" qui fonctionne seulement si la cellule active de la feuille TableLocataires est a l'extérieur de "TableLocataires"
    si tout était dans la feuille "locataires" tout fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub bouton_majListLocatairesActifs()
       Range("TableLocataires[#All]").AdvancedFilter Action:=xlFilterCopy, _
       CriteriaRange:=FeuilleListeChoix.Range("C125:C126"), _
       CopyToRange:=FeuilleListeChoix.Range("C128"), _
       Unique:=False
    end sub
    Ce code me permet d'extraire d'un tableau Excel nommé "TableLocataires", une liste de noms selon un filtre présent dans FeuilleListeChoix.Range("C125:C126") et de mettre le résultat dans la feuille FeuilleListeChoix en position C128

    l'usage de ...select ou ...activate affiche systématiquement la feuille "locataires"

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    tu peux faire une syntaxe directement avec quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("TaFeuille").Range("C28").Value = "123"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre régulier
    Homme Profil pro
    Developpeur
    Inscrit en
    Novembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2024
    Messages : 8
    Par défaut
    Citation Envoyé par Jean-Philippe André Voir le message
    Salut,

    tu peux faire une syntaxe directement avec quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("TaFeuille").Range("C28").Value = "123"
    bonjour,
    le but n'est pas d'écrire dans la feuille.
    malgré tout j'ai essayé en espérant que ça modifie la cellule active. mais pas concluant

  4. #4
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 207
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Autant que je sache, activer une cellule est une des rares actions qui nécessitent d'activer la feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FeuilleListeChoix.Activate
    FeuilleListeChoix.range("A1").select
    'Puis filtre avancé

  5. #5
    Membre régulier
    Homme Profil pro
    Developpeur
    Inscrit en
    Novembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2024
    Messages : 8
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Bonsoir,

    Autant que je sache, activer une cellule est une des rares actions qui nécessitent d'activer la feuille
    c'est ce que je craignais, ça m'oblige a afficher la feuille source, changer la cellule active et repasser dans la feuille ou mon code se trouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     Sub bouton_majListLocatairesActifs()
      FeuilleTableLocataires.Activate
      FeuilleTableLocataires.Range("A1").Select
     
      FeuilleListeChoix.Activate
     
        Range("TableLocataires[#All]").AdvancedFilter Action:=xlFilterCopy, _
       CriteriaRange:=FeuilleListeChoix.Range("C128:C129"), _
       CopyToRange:=FeuilleListeChoix.Range("C131:D131"), _
       Unique:=False
     End sub
    après essaie ça fonctionne et ce n'est pas visible coté utilisateur

    merci pour votre aide

  6. #6
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    c'est ce que je craignais, ça m'oblige a afficher la feuille source, changer la cellule active et repasser dans la feuille ou mon code se trouve
    Dans votre demande, vous évoquiez la cellule active soit l'objet ActiveCell or vous n'utilisez pas celui-ci dans le code publié.
    Il est évident que si vous voulez écrire ou lire dans une cellule ou une plage de cellules avec une adresse précise, il parfaitement possible de le faire sans activer la feuille parente.
    Pour information : Pour ne pas afficher une feuille lors de son activation, il faut utiliser l'instruction Application.ScreenUpdating = False (ne pas oublier de remettre la valeur à True juste avant l'instruction Activate
    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

  7. #7
    Membre régulier
    Homme Profil pro
    Developpeur
    Inscrit en
    Novembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2024
    Messages : 8
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Dans votre demande, vous évoquiez la cellule active soit l'objet ActiveCell or vous n'utilisez pas celui-ci dans le code publié.
    Il est évident que si vous voulez écrire ou lire dans une cellule ou une plage de cellules avec une adresse précise, il parfaitement possible de le faire sans activer la feuille parente.
    Pour information : Pour ne pas afficher une feuille lors de son activation, il faut utiliser l'instruction Application.ScreenUpdating = False (ne pas oublier de remettre la valeur à True juste avant l'instruction Activate
    C'est vrai car mon code plantait si la cellule active de la feuille se trouvant dans un tableau Excel .
    malheureusement mafeuille.activeCell.address n'existe pas. activeCell.address ne fonctionne que dans activeSheet.

    Du coup, j'ai systématiquement positionné la cellule active en A1 car c'est hors du tableau Excel ce qui m'a évité de tester si elle était positionnée dans ce tableau.

  8. #8
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il n'y a aucun problème d'avoir l'adresse, la valeur, etc. d'une cellule active que celle-ci soit présente dans un tableau croisé dynamique, tableau structuré (y compris s'il est filtré) ou cellule classique
    Test effectué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub t()
     Dim sht As Worksheet
     Application.ScreenUpdating = False
     For Each sht In ThisWorkbook.Worksheets
       sht.Activate
       Debug.Print ActiveCell.Address(External:=True)
     Next
     Application.ScreenUpdating = False
     Set sht = Nothing
    End Sub
    Je ne suis pas certain d'avoir compris vos explications. Suivant quel critère souhaitez vous exporter les données de la table Locataire avec la méthode AdvancedFilter. D'après ce que je vois vous n'avez qu'un seul critère donc une liste déroulante (Validation de données) suffirait avec la procédure liée à la procédure événementielle Worksheet_Change au lieu d'un bouton pour exporter dynamiquement suivant le choix effectué dans la liste déroulante.
    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

  9. #9
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 207
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Pas réussi à faire planter AdvancedFilter sur de nombreux essais, quel que soit l'endroit où je place ma cellule active avec un code proche de 38160
    Pas compris non plus, au bout

  10. #10
    Membre régulier
    Homme Profil pro
    Developpeur
    Inscrit en
    Novembre 2024
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2024
    Messages : 8
    Par défaut
    Suite à ta remarque j'ai essayé de créer un classeur de tests mais le Problème ne se reproduisait pas

    Merci tototiti2008 d'avoir passé du temps pour tester
    il faut savoir que j'utilise la version MAC 16.91 (24111020)
    mais juste avant de poster ce message j'ai constaté une différence entre les deux feuilles,
    c'est la présence de segments dans la feuille à problèmes.
    en supprimant les segments le problème disparait


    Nom : Capture d’écran 2024-11-23 à 07.09.30.png
Affichages : 123
Taille : 895,2 Ko

    Avec la nouvelle feuille s'il y a un segment cela bug aussi

    Nom : Capture d’écran 2024-11-23 à 07.23.16.png
Affichages : 132
Taille : 61,1 Ko

  11. #11
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 207
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    En effet, j'arrive au même résultat sur PC, ça plante avec un segment, mais seulement si la cellule active est dans la liste à filtrer
    Merci, ça peut être intéressant à savoir

    D'ailleurs en manuel, le bouton Filtre avancé est grisé dans le ruban quand on a mis un segment (pff j'avais pas regardé ton image )

  12. #12
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Effectivement, je découvre également que le filtres avancé d'excel ne fonctionne pas si un ou plusieurs segments sont insérés et que l'on sélectionne une cellule du tableau structuré
    Pour exporter les données suivant critères, je privilégie Power Query.

    Une solution proposée dans un billet de Pierre Fauconnier titré Power Query Excel: Alternative efficace au filtre avancé, dynamique de surcroît!
    Il existe également une solution basée sur la fonction AGREGAT et les segments. Voir le billet Passer des paramètres dans Power Query à l’aide d’un segment
    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

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/01/2016, 12h47
  2. Réponses: 1
    Dernier message: 21/10/2010, 17h47
  3. [XL-2003] Comment utiliser des images stockées dans une feuille
    Par Pastekk dans le forum Excel
    Réponses: 2
    Dernier message: 30/06/2009, 12h17
  4. Réponses: 1
    Dernier message: 15/09/2008, 10h21
  5. Evaluer la cellule sélectionnée dans une feuille
    Par Tabila dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/04/2008, 18h36

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