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 :

Range défini avec variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 61
    Par défaut Range défini avec variable
    Bonjour à tous,

    Je rencontre un problème dans la définition d'un Range dont la colonne est déterminée par une variable.

    Voici mon code qui pose problème, intégré dans une boucle qui incrémente NoCol2 et NoLig2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         'Récupération de l'adresse de la cellule en NoCol2 de la Feuille 3
                    cellForValue = Worksheets("Feuil3").Cells(20, NoCol2).Address(RowAbsolute:=False, ColumnAbsolute:=False) 'testé et fonctionne
     
                   'récupération de la valeur de la cellule (une lettre est saisie dans la cellule concernée, "N" par exemple)
                   Dim rangeCell As String
                   rangeCell = Worksheets("Feuil3").Range(cellForValue).Value 'testé et fonctionne
     
                   'utilisation de la valeur de la cellule pour obtenir le Range à récupérer en Feuille 2
                   Dim rangeRecup As Range
                   rangeRecup = Worksheets("Feuil2").Range(rangeCell & NoLig2) 'Cette ligne est en erreur d'excécution 1004
    Je veux ensuite utiliser ma variable rangeRecup pour récupérer la valeur de la cellule concernée.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    valeurArecuperer = Worksheets("Feuil2").Range(rangeRecup).Value
    Auriez-vous une idée de ce qui bloque ?

    En vous remerciant par avance.

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Ifiii, bonjour le forum,

    J'ai pas bien compris ton speech mais plutôt que de définir une cellule par Range(adresse), utilise Cells(Ligne, Colonne). Tu définis une variable COL, tu l'initialises et tu l'utilises :
    Exemple : A5 vaut 12

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim COL As Interger
    DIM PL As Range
    COL = Range("A5").Value
    Set PL=Range(Cells(1, COL), Cells(10, COL+5)
    la plage PL est la plage L1:Q10...

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 61
    Par défaut
    ma variable rangeCell contient obligatoirement une lettre, c'est pour ça que j'utilise Range et non pas Cells...

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu dois utiliser l’instruction Set pour associer une référence d’objet à la variable rangeRecup.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rangeRecup = Worksheets("Feuil2").Range(rangeCell & NoLig2)
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeurArecuperer = rangeRecup.Value
    Cordialement.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 61
    Par défaut
    J'ai la même erreur avec l'instruction Set.

    Je pense en revanche que le problème vient bien de la référence objet.

    Quand je force la référence ainsi par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rangeRecup = Worksheets("Feuil2").Range("N" & NoLig2)
    J'obtiens bien un résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rangeRecup = Worksheets("Feuil2").Range(rangeCell & NoLig2)
    Là, j'ai de nouveau une erreur d'excécution 1004

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Il me semble qu'il y a plus de lignes qu'il n'en faudrait :

    Si les variables NoCol2 et NoLig2 sont connues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Macro1()
    Dim COL As String
    Dim PL As Range
     
    'NoCol2 = 10
    'NoLig2 = 4
    COL = Worksheets("Feuil3").Cells(20, NoCol2).Value
    Set PL = Worksheets("Feuil2").Cells(NoLig2, COL)
    PL.Select
    End Sub

    Mais bizarrement aucune lettre dans les variables...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 61
    Par défaut
    Pour relier ton exemple au mien, dans la variable COL qui chez moi est représentée par la variable rangeCell, j'obtiens obligatoirement une lettre et non un chiffre, je ne peux donc pas l'utiliser en tant que Colonne dans Cells, puisque selon moi nous devons obligatoirement avoir Cells(NuméroLigne, NuméroColonne). Je ne peux pas avoir par exemple Cells(1, N). Dites moi si je me trompes...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 61
    Par défaut
    Bon finalement j'ai trouvé. Ma variable rangeCells pouvait être vide, d'où l'erreur d'instruction puisque la détermination du Range n'était alors pas toujours possible. Désolé pour le dérangement et merci pour vos réponses

  9. #9
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Citation Envoyé par ifiii Voir le message
    Pour relier ton exemple au mien, dans la variable COL qui chez moi est représentée par la variable rangeCell, j'obtiens obligatoirement une lettre et non un chiffre, je ne peux donc pas l'utiliser en tant que Colonne dans Cells, puisque selon moi nous devons obligatoirement avoir Cells(NuméroLigne, NuméroColonne). Je ne peux pas avoir par exemple Cells(1, N). Dites moi si je me trompes...

    Alors je te le dis, tu te trompes !... Tu peux écrire Cells(1, 1) ou Cells(1, "A") les deux sont équivalent de Range("A1"). Comme COL est déclarée de type String,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PL = Worksheets("Feuil2").Cells(NoLig2, COL)
    fonctionne tout à fait bien. Si tu avais pris la peine de tester au lieu de t'obstiner, tu l'aurait vu par toi-même, d'ailleurs...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 61
    Par défaut
    Citation Envoyé par Thautheme Voir le message

    fonctionne tout à fait bien. Si tu avais pris la peine de tester au lieu de t'obstiner, tu l'aurait vu par toi-même, d'ailleurs...
    Je ne me suis en rien obstinée, j'ai d'ailleurs demandé si je me trompais, je ne pense pas que ce ton moralisateur soit justifié, surtout que là n'était pas mon problème. J'ai appris quelque chose et j'en te remercie, dommage en revanche pour la façon dont les choses sont expliquées.

  11. #11
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Marrant, moi c'est :

    Citation Envoyé par ifiii Voir le message
    ma variable rangeCell contient obligatoirement une lettre, c'est pour ça que j'utilise Range et non pas Cells...
    ce ton, comment dire.... imbu de soi-même, qui m'avait déplu...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 61
    Par défaut
    Vous auriez pu alors vous abstenir de répondre à partir de ce moment là. Il s'agissait d'une erreur de ma part dans l'utilisation de Cells. '' imbu de soi-même'' est un peu fort de la part de quelqu'un qui se permet une leçon de moralité pour une soi-disant obstination. C' est un forum d'entraide qui rassemble des gens qui connaissent bien le langage VBA et d'autres beaucoup moins. Vous faites sans doute partie de la première catégorie mais redescendez un peu, aider les moins bons ne signifie pas les rabaisser ! Si vous ne supportez pas les erreurs des débutants, ne leur répondez pas...

  13. #13
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Hola ! Pas besoin de redescendre, je suis suffisamment bas et loin, très loin du niveau de beaucoup ici... Je prends juste mon pied à aider quand je peux et si j'ai continué à répondre c'est que tu as affirmé quelques chose d’erroné en plus de ta première phrase franchement pas sympathique alors que mon but était juste de te venir en aide. Mais c'est comme la pouille et la patre dans l'œil du voisin... Certains la voient, d'autres pas... Bonne Soirée.

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

Discussions similaires

  1. Range avec Variable
    Par argal dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2008, 10h39
  2. requete sql avec variable feuil-range
    Par jokenjo dans le forum Excel
    Réponses: 6
    Dernier message: 18/03/2008, 15h47
  3. vba range selection avec variable
    Par pierre.paumier dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2007, 03h04
  4. vba range selection avec variable
    Par pierre.paumier dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/12/2007, 23h35
  5. Réponses: 13
    Dernier message: 01/06/2006, 17h20

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