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ération variable dans une autre feuille sans activation de la feuille (=invisible pour l'utilisateur)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 28
    Par défaut Récupération variable dans une autre feuille sans activation de la feuille (=invisible pour l'utilisateur)
    Bonjour,

    J'ai un code qui fonctionne et une autre version qui ne fonctionne mais je n'arrive pas à comprendre pourquoi ...
    En fait, j'essaye de récupérer des valeurs de variables que je spécifie dans un onglet dédié pour ne pas mettre en dur dans mon code mes variables. En l'occurence, la fonction ci dessous récupère le nom d'une colonne dans un onglet "ListeVariablesVBA" puis retourne la colonne de l'onglet "Demande de Prestation" possédant ce titre de colonne...

    Ex: Je cherche où se situe la colonne date dans "Demande de prestation", je vais faire return_colonne("V_DATE"), la fonction va chercher la variable V_DATE dans l'onglet listant les variables VBA nommé "ListeVariablesVBA", il récupère la valeur de la variable (ex: 19/08/1982), cherche cette valeur dans l'onglet "Demande de prestation" puis retourne la colonne associée.

    Le problème est le suivant: pour faire une recherche dans l'onglet "ListeVariablesVBA", je suis obligé de l'activer puis revenir sur mon onglet courant, ce qui fait assez moche à l'écran puisqu'on voit le passage d'un onglet à un autre ... du coup, j'aimerais qu'il récupère les valeurs automatiquement sans sélectionner l'onglet "ListeVariablesVBA".

    Pour info, mon onglet ListeVariablesVBA est très basique et est structuré de la façon suivante:
    Colonne A            Colonne B
    Nom Variable        Valeur Variable
    V_TOTO              Valeur de V_TOTO

    Ainsi voici le code de ma fonction qui fonctionne mais assez moche à l'écran :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
      Function return_colonne(var) As String
     
    Dim celluleVariable As Range
        Dim columnSelected As Range
        Dim titreColonne As String
     
     
        Sheets("ListeVariablesVBA").Select
     
        Set celluleVariable = Range("A3:A300").Find(var, lookat:=xlWhole)
        MsgBox celluleVariable
        If celluleVariable Is Nothing Then
            MsgBox ("variable " & var & " non trouvée dans la liste des références")
            Exit Function
        End If
     
        titreColonne = Cells(celluleVariable.Row, celluleVariable.Column + 1).Value
        MsgBox titreColonne  
     
     
        ' ******************* Récupération du numéro de la colonne possédant la colonne associée **************************
        Sheets("Demande de Prestation").Select
     
        ' option LookIn:=xlValues permet de retourner la valeur d'une formule. Par défaut, find retourne la formule
        Set columnSelected = Range("A4:DD4").Find(titreColonne, lookat:=xlWhole, LookIn:=xlValues)
     
     
        If columnSelected Is Nothing Then
            MsgBox ("Colonne " & titreColonne & " non trouvée dans la liste des références")
            Exit Function
        End If
     
        return_colonne = NumCol2Lettre(columnSelected.Column)
     
    End Function
    Voici le code qui ne fonctionne pas (j'ai l'impression qu'il récupère bien le nom de ma variable mais pas la valeur associée ...):
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Function return_colonne(var) As String
     
    Dim celluleVariable As Range
        Dim columnSelected As Range
        Dim titreColonne As String
     
     
        ' ******************* Récupération du titre liée à la variable **************************
     
     
        Set celluleVariable = Sheets("ListeVariablesVBA").Range("A3:A300").Find(var, lookat:=xlWhole)
        'Retourne bien celluleVariable 
        MsgBox celluleVariable
     
        If celluleVariable Is Nothing Then
            MsgBox ("variable " & var & " non trouvée dans la liste des références")
            Exit Function
        End If
     
        titreColonne = Cells(celluleVariable.Row, celluleVariable.Column + 1).Value
        'titreColonne ne retourne plus rien ...
        MsgBox titreColonne
     
     
        ' ******************* Récupération du numéro de la colonne possédant la colonne associée **************************
     
        ' option LookIn:=xlValues permet de retourner la valeur d'une formule. Par défaut, find retourne la formule
        Set columnSelected = Sheets("Demande de Prestation").Range("A4:DD4").Find(titreColonne, lookat:=xlWhole, LookIn:=xlValues)
     
     
        If columnSelected Is Nothing Then
            MsgBox ("Colonne " & titreColonne & " non trouvée dans la liste des références")
            Exit Function
        End If
     
        return_colonne = NumCol2Lettre(columnSelected.Column)
    End Function
    Pourriez vous m'aider à comprendre pourquoi je suis obligé d'activer la feuille ? Pourquoi ai je l'impression de bien trouver ma variable mais je n'arrive plus ensuite à récupérer sa valeur ?
    Merci pour l'aide que vous pourrez m'apporter.
    Cédric

  2. #2
    Invité
    Invité(e)
    Par défaut Bonjour,test ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Ws = Sheets("ListeVariablesVBA")
    Set celluleVariable = Ws.Range("A3:A300").Find(Var, lookat:=xlWhole)

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 28
    Par défaut
    Bonjour,

    Non, ce code ne fonctionne pas non plus ... j'ai une erreur ... En fait, passer le Sheets("nomOnglet") dans une variable revient au même que l'appeler directement ... donc je ne pense pas que cela soit le problème ...

    Si besoin, vous trouverez le fichier ci joint.

    Pour reproduire l'erreur, suffit de cliquer sur le bouton "Add DP" puis renseigner les champs entité (string), N°affaire (String) et Nombre de lots (integer). Cliquer sur valider et une erreur apparait.
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Function return_colonne(var) As String
        Dim celluleVariable As Range
        Dim columnSelected As Range
        Dim titreColonne As String
        Dim Ws As Worksheet
        
        
        ' ******************* Récupération du titre liée à la variable **************************
        'You cannot select a sheet that is hidden so you will have to make it visible then hide it at the end
        'For a smooth display, I decided to keep this tab visible
        'Sheets("ListeVariablesVBA").Visible = True
        'Sheets("ListeVariablesVBA").Select
        
        Set Ws = Sheets("ListeVariablesVBA")
        Set celluleVariable = Ws.Range("A3:A300").Find(var, lookat:=xlWhole)
        MsgBox celluleVariable
        If celluleVariable Is Nothing Then
            MsgBox ("variable " & var & " non trouvée dans la liste des références")
            Exit Function
        End If
        
        titreColonne = Cells(celluleVariable.Row, celluleVariable.Column + 1).Value
        MsgBox titreColonne
        
        
        'You cannot select a sheet that is hidden so you will have to make it visible then hide it at the end
        'Sheets("ListeVariablesVBA").Visible = False
        
        
        ' ******************* Récupération du numéro de la colonne possédant la colonne associée **************************
        'Sheets("Demande de Prestation").Select
        Set Ws = Sheets("Demande de Prestation")
        ' option LookIn:=xlValues permet de retourner la valeur d'une formule. Par défaut, find retourne la formule
        Set columnSelected = Ws.Range("A4:DD4").Find(titreColonne, lookat:=xlWhole, LookIn:=xlValues)
        
            
        If columnSelected Is Nothing Then
            MsgBox ("Colonne " & titreColonne & " non trouvée dans la liste des références")
            Exit Function
        End If
        
        
        
        '*********************************************************************************************
        ' ************** A REVOIR:    COLONNE RENVOYEE EST UN CHIFFRE ET NON UNE LETTRE  *************
        '*********************************************************************************************
        return_colonne = NumCol2Lettre(columnSelected.Column)
        
        
        
    End Function
    Dernière modification par AlainTech ; 21/08/2014 à 12h55. Motif: Suppression de la citation inutile

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 28
    Par défaut
    Merci beaucoup pour l'aide. Ce n'était pas grand chose ... mais pourquoi cela foncitonne avec Worksheet alors que ça ne fonctionnait pas avec Sheets. D'après ce que j'ai vu sur internet, Worksheets est un sous ensemble de Sheets donc ça devrait marcher également ?? Désolé pour cette question supplémentaire, mais tant qu'à faire, mieux vaut resortir moins bête et ne plus poser cette question à l'avenir

  6. #6
    Invité
    Invité(e)
    Par défaut
    Sheets tu noteras qu'il y a un S ça ne marchera pas non plus avec As Worksheets
    Dernière modification par AlainTech ; 21/08/2014 à 12h56. Motif: Suppression de la citation inutile

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

Discussions similaires

  1. Afficher une page web dans une autre page sans frame
    Par bahs dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 24/03/2006, 18h51
  2. Definition d'une variable dans une autre variable ...
    Par gbraux dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/12/2005, 16h13
  3. [VB.NET] Utilisation d'une variable dans une autre form (!)
    Par neuropathie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/12/2005, 14h09
  4. Nom de variable dans une autre variable
    Par lsdInside dans le forum Linux
    Réponses: 5
    Dernier message: 04/12/2004, 20h36
  5. [langage] trouver une variable dans une autre
    Par BEAUJAULT dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2004, 16h04

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