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 :

Récupérer Cellule.row selectionnée sur autre feuille sans selectionner cette feuille [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 74
    Par défaut Récupérer Cellule.row selectionnée sur autre feuille sans selectionner cette feuille
    Bonjour,
    je souhaite a récupérer la ligne de la cellule qui est selectionnée sur autre feuille mais sans selectionner cette feuille ou se trouve la cellule
    Exemple:
    J'ai un classeur excel avec plusieurs sheets
    J'ai créé des variables pour chacune des feuilles exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ligneSheet1 As Long
    Sheet1= cellule active est B12
    Sheet2= cellule active est C14
    Maintenant je cherche a récupérer la valeur de la ligne pour chaque feuille ou la cellule selectionnée se trouve.
    Avec le code ci-dessous ca marche pas j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim LigneSheet1 as Long
    Dim LigneSheet2 as Long
    En ayant la Sheet1 active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LigneSheet2 = Worksheets("Sheets2").cells.Row
    => Ca me renvoie la valeur "1" à chque fois qlaors que la cellule est

    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LigneSheet2 = Worksheets("Sheets2").Activecells.Row
    => Ca me renvoie error 438

    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LigneSheet2 = Activecells.Row
    => Ca me renvoie 12 alors que je souhaite la valeur de la ligne de la celulle séelctionner en sheet 2 soit 14

    J'ai pas les bon mots clés, je ne trouve pas sur les forums

    Merci d'avance pour votre aide
    Jerome

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Pourquoi ne veux-tu pas sélectionner les feuilles ?

    ActiveCellest un membre de la classe Windowdonc ce qui est à l'affichage donc compliqué de faire varier ActiveCellsans changer de feuille.

    Si c'est juste pour éviter les crises d'épilepsie pour l'utilisateur tu peux utiliser ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
        Application.ScreenUpdating = False
            Dim sh As Worksheet, message$
            message = "Cellules actives des feuilles du classeur actif : " & vbCr & vbCr
            For Each sh In ThisWorkbook.Worksheets
                sh.Select
                message = message & sh.Name & " : " & ActiveCell.Address & vbCr
            Next
            MsgBox message
        Application.ScreenUpdating = True
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 74
    Par défaut
    Merci pour ton retour antonysansh :-D

    Ne maitrisant pas tous dans VBA,
    j'évite de sélectionner la feuille car j'essaye d'optimiser le code dans le but que la macro s'exécute rapidement et non en 30min :-S

    Mais peut être que je prend la tete pour rien :-p

    Pour mon info qu'est ce que "vbCr"?

    A quoi sert:
    Application.ScreenUpdating = True

    Cdt
    Jerome

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Citation Envoyé par jbonneval Voir le message

    Pour mon info qu'est ce que "vbCr"?
    VbCrpermet, dans une chaine de caractère, un retour à la ligne
    Citation Envoyé par jbonneval Voir le message
    A quoi sert:
    Application.ScreenUpdating = True
    Application.ScreenUpdating c'est le rafraichissement de l'écran donc à Falseça ne rafraichi pas l'affichage (gain de temps et visuellement on ne voit pas les changement d'onglet)
    Et en fin de code ne pas oublier de le remettre à True.

    Mais je te conseil t'étudier la solution de Theze, les Dico sont très utiles et c'est bien de savoir les manipuler

  5. #5
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    J'aime beaucoup ta solution Theze,

    Utiliser les évènements pour alimenter une variable global pendant l'utilisation d'un fichier je trouve toujours ça sympas

    Par contre lors de l'initialisation du dico, il a ses clefs mais pas de valeur.
    Si j'interroge sur une feuille pas encore parcourue, je n'aurais rien.

    Un couplage de ta méthode et de ma proc lors de l'initialisation peut être pas mal.

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pour éviter d'avoir des "Activecell" vides au démarrage du classeur, pourquoi ne faire ainsi, en repartant du code de Theze ?

    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
    Public DicoFeuille As Object
     
    Sub Initialiser()
     
        Dim I As Integer
        Dim Sh As Worksheet
     
        Application.ScreenUpdating = False
        Set Sh = ActiveSheet
        Set DicoFeuille = CreateObject("Scripting.Dictionary")
     
        For I = 1 To Worksheets.Count
            Worksheets(I).Activate
            DicoFeuille.Add Worksheets(I).Name, ActiveCell.Address
        Next I
     
        Sh.Activate
        Set Sh = Nothing
        Application.ScreenUpdating = True
    End Sub

    On balaye les feuilles pour chopper l'adresse de chaque activecell
    et on oublie pas de réafficher la feuille initialement affichée après traitement

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une autre possibilité avec un dico et en utilisant la procédure évènementielle "Workbook_SheetSelectionChange" du classeur. Tout d'abords, il faut initialiser le dictionnaire avec la proc. ci-dessous (ceci peut être fait sur l'évènement "Open" du classeur) :
    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
     
    Public DicoFeuille As Object
     
    Sub Initialiser()
     
        Dim I As Integer
     
        Set DicoFeuille = CreateObject("Scripting.Dictionary")
     
        For I = 1 To Worksheets.Count
     
            DicoFeuille.Add Worksheets(I).Name, ""
     
        Next I
     
    End Sub
    ensuite, dans le module du classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
     
        DicoFeuille(Sh.Name) = Target.Address
     
    End Sub
    et enfin, pour lire la valeur de la cellule sélectionnée dans la feuille voulue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub Lecture()
     
        MsgBox Range(DicoFeuille("Feuil2")).Value
     
    End Sub
    mais tout ça reste assez alambiqué et la proc proposée par antonysansh reste la plus judicieuse et la plus simple !

    Hervé.

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

Discussions similaires

  1. [XL-2007] Récupérer valeurs d'une colonne vers une liste déroulante sur autre colonne d'une nouvelle feuille
    Par redhotchilipeppers dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/07/2014, 17h26
  2. Réponses: 7
    Dernier message: 17/02/2014, 11h19
  3. [XL-2010] Récupérer des informations d'un autre classeur sans l'ouvrir
    Par Manuel40 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/08/2011, 22h03
  4. Récupérer la valeur d'une cellule avec fonction sur une autre feuille
    Par rogerlette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2010, 12h38
  5. Réponses: 1
    Dernier message: 05/03/2009, 17h44

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