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 :

Erreur sur la méthode Select [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut Erreur sur la méthode Select
    Bonjour,
    J'aimerai savoir s'il vous plait comment gérer les méthodes select et activate.
    En gros j'aimerai savoir s'il est possible d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ThisWorkbook.Sheets(NomFeuil).MaPlage.Select
    'Avec MaPlage qui est une range
    sans que la feuille dans laquelle se trouve ma plage ne soit activée.
    Lorsque j'écris cette ligne de code, j'ai un message du type:

    Propriété ou méthode non gérée par cet objet
    ou encore
    La méthode select de l'objet Range a échoué
    ma méthode Select ne marche en fait que lorsque ma feuille est active. J'aimerai savoir s'il n'y a pas un moyen d'y remédier.

    Une idée?
    Merci d'avance.

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    En gros j'aimerai savoir s'il est possible d'écrire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets(NomFeuil).MaPlage.Select
    'Avec MaPlage qui est une range sans que la feuille dans laquelle se trouve ma plage ne soit activée.
    Alors pourquoi l'activer avec Select ou Activate ? ,tu peux travailler sans selectionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets(NomFeuil).MaPlage = ce que tu veux
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour,

    tout comme Dominique !

    Pour rappel pour ceux voulant utiliser quand même cette affreuse méthode Range.Select souvent source d'ennuis,
    elle ne fonctionne que sur la feuille active, donc ne peut être liée à aucun autre objet, d'où le message d'erreur …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut casefayere
    Dc tu penses que je pourrais appliquer toute les méthodes possibles sans toutefois activer ou sélectionner?

    Par exemple faire la mise en page d'un tableau excel sans que la feuille ne soit active.

    Parce que j'ai eu le même problème avec la méthode Copy d'une feuille non visible, ca m'a affiché le même message d'erreur. Pourtant je peux bien copier une feuille d'un classeur ouvert non visible.

    Et je ne sais pas si c'est parce que j'utilise des fonctions pour le faire.
    Serait-ce le cas?! (Le fait d'utiliser les fonctions)

    #Marc-L c'est bien ce que je me disais

  5. #5
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Sheet1").Copy After:=NewClasur.Worksheets(NewClasur.Worksheets.Count)

  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
    12 825
    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 : 12 825
    Points : 28 731
    Points
    28 731
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dc tu penses que je pourrais appliquer toute les méthodes possibles sans toutefois activer ou sélectionner?
    Ce n'est pas que l'on pense mais on est certain.
    Tu peux même utiliser une variable objet en attribuant comme valeur une plage complète avec sa feuille et son classeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim maPlage As Range
     Set maPlage = ThisWorkbook.Worksheets("Feuil1").Range("A1:F500")
     maPlage = "Excel" ' Ecrire Excel dans l'ensemble des cellules de cette plage
     MsgBox "Voulez-vous continuer"
     maPlage.Clear ' Effacer la plage
    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
    Invité
    Invité(e)
    Par défaut
    quand tu arrive le matin au travail et que tu ouvre ton ordinateur, la seule chose que tu sais est que le premier fichier que tu ouvre dans Excel est le premier actif

    si tu ouvre un autre il devient actif. on a la fâcheuse tendance à oublier qu'il en est de-même quand on le fait par macro.

    la première chose à faire dans ce cas, est de sauvegarder la référence du classeur actif dans une variable Objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MyClasseur = ActiveWorkbook
    ensuite et ensuite seulement ouvre/créer un nouveau classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set NewClasseur = Workbooks.Add
    ainsi tel un joungleur tu peux manipuler tes objets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyClasseur.Sheets("Feuille1").Copy After:=NewClasur.Worksheets(NewClasur.Worksheets.Count)
    tu as accès à ses méthodes et ses propriétés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewClasseur.Range("a1").Interior.Color = red
    il existe 3 objet vb important:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MyClasseur As Workbook
    Dim MySheet As Worksheet
    Dim MyRange As Range
    Bien sur il y en à d'autre mais c'est important de connaître ceux là et de savoir les manipuler.

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut
    Ok Merci, je vais commencer à raisonner comme tel.
    Mais je me suis toujours demandé comment arriver à travailler sans utiliser select ou activate. Quand je ne les utilise pas, j'ai souvent un message d'erreur. Par exemple j'ai la ligne de code suivante qui m'affiche un message de d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabActuel = ThisWorkbook.Sheets(NomFeuil).Range(Range("C10"), Range("C10").End(xlDown)).Value
    Et je n'ai aucune idée où se trouve le le problème.

    Peut être utiliser les index des feuilles au lieu de leurs noms peut en partie résoudre ce problème. Qu'en pensez-vous?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Kutoh Voir le message
    Ok Merci, je vais commencer à raisonner comme tel.
    Mais je me suis toujours demandé comment arriver à travailler sans utiliser select ou activate. Quand je ne les utilise pas, j'ai souvent un message d'erreur. Par exemple j'ai la ligne de code suivante qui m'affiche un message de d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabActuel = ThisWorkbook.Sheets(NomFeuil).Range(Range("C10"), Range("C10").End(xlDown)).Value
    Et je n'ai aucune idée où se trouve le le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NomFeuil = "Feuil1"
    Dim TabActuel As Range
    Set TabActuel = ThisWorkbook.Sheets(NomFeuil).Range(Range("C10"), Range("C10").End(xlDown))
    For i = 1 To TabActuel.Rows.Count
    Debug.Print TabActuel(i, 1)
    Next
    le mieux serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    NomFeuil = "Feuil1"
    Dim TabActuel As Worksheet
    Dim MyRange As Range
    Set TabActuel = ThisWorkbook.Sheets(NomFeuil)
    Set MyRange = TabActuel.Range(TabActuel.Range("C10"), TabActuel.Range("C10").End(xlDown))
    For i = 1 To MyRange.Rows.Count
    Debug.Print MyRange(i, 1)
    next

  10. #10
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Citation Envoyé par Kutoh Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabActuel = ThisWorkbook.Sheets(NomFeuil).Range(Range("C10"),  Range("C10").End(xlDown)).Value
    Et je n'ai aucune idée où se trouve le le problème.
    Normal, des Range non qualifiés …
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        With ThisWorkbook.Sheets(NomFeuil)
            TabActuel = .Range(.Range("C10"), .Range("C10").End(xlDown)).Value
        End With
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim Ws As Worksheet
     
        Set Ws = ThisWorkbook.Sheets(NomFeuil)
        TabActuel = Ws.Range(Ws.Range("C10"), Ws.Range("C10").End(xlDown)).Value
     
        Set Ws = Nothing

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Invité
    Invité(e)
    Par défaut
    effectivement j'ai pas percuté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabActuel = ThisWorkbook.Sheets(NomFeuil).[C10].End(xlDown).Value …
    Dernière modification par AlainTech ; 17/09/2013 à 21h48. Motif: Balises [code], pas [quote]

  12. #12
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Désolé Robert, Mea Culpa

    Je me suis trompé en confondant une parenthèse, son idée est donc correcte pour une variable tableau !

    J'ai corrigé mon message avec une deuxième proposition, équivalente à la tienne en fait …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Invité
    Invité(e)
    Par défaut
    il faut lui préciser que c'est un variable tableau!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim TabActuel()
    TabActuel = Ws.Range(Ws.Range("C10"), Ws.Range("C10").End(xlDown)).Value

  14. #14
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Normal, des Range non qualifiés …
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        With ThisWorkbook.Sheets(NomFeuil)
            TabActuel = .Range(.Range("C10"), .Range("C10").End(xlDown)).Value
        End With
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim Ws As Worksheet
     
        Set Ws = ThisWorkbook.Sheets(NomFeuil)
        TabActuel = Ws.Range(Ws.Range("C10"), Ws.Range("C10").End(xlDown)).Value
     
        Set Ws = Nothing

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    Ok ca fonctionne. Donc le problème c'est l'attribution des valeurs d'une plage non définie si je comprends bien.
    Parce que lorsque je fais de même en attribuant à une plage les valeurs d'un tableau, j'ai pas de problème. Exple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets(NomFeuil).Range("G78:G85").Value = Nominal

  15. #15
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    il faut lui préciser que c'est un variable tableau!
    Disons c'est ce que j'en ai déduit par le nom de la variable et la présence explicite de .Value à la fin de son exemple …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  16. #16
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut
    Ahhh oui je viens de comprendre. Merci.

  17. #17
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Citation Envoyé par Kutoh Voir le message
    Parce que lorsque je fais de même en attribuant à une plage les valeurs d'un tableau, j'ai pas de problème. Exple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets(NomFeuil).Range("G78:G85").Value = Nominal
    Là pas de souci car l'unique Range est bien rattaché à une feuille et un classeur …

    Ne pas oublier :

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  18. #18
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut
    Ok. Désolé, mais j'ai envie de finir avec cette histoire de select.
    J'écris le code suivant me permettannt de faire une petite mise en page d'un tableau sur excel.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        With ThisWorkbook.Sheets("Feuille").Range("A20:D30").Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark2
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        With ThisWorkbook.Sheets("Feuille").Range("A20:D30").Font
          .Name = "Calibri"
          .Size = 12
        End With

    Mais j'ai le message suivant:
    Propriété ou méthode non gérée par cet objet sur la ligne de code suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     With ThisWorkbook.Sheets("Feuille").Range("A20:D30").Interior

  19. #19
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 825
    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 : 12 825
    Points : 28 731
    Points
    28 731
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Bien qu'en principe le message d'erreur devrait être une erreur 9 (l'indice n'appartient pas à cetet sélection), es-tu certain qu'il y a une feuille nommée Feuille dans ce classeur ?
    Pour ma part, je ne vois pas de problème dans cette ligne.
    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

  20. #20
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut
    Sisi il y'a une feuille de ce nom dans mon classeur. Moi non plus je ne vois pas de problème sur cette ligne.
    C'est ce genre de message d'erreur qui faisait en sorte que j'utilise les Select et Activate.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Erreur sur une requête select where
    Par Goffer dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/01/2009, 08h45
  2. erreur 1004 sur une méthode select
    Par lollo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2008, 19h21
  3. Erreurs sur les méthodes ApplicationClass et Application
    Par Invité dans le forum Windows Forms
    Réponses: 5
    Dernier message: 29/04/2008, 17h39
  4. [PHPMailer] Erreur sur la méthode isHtml
    Par Curby dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/03/2007, 23h16
  5. Erreur sur un simple Select
    Par defluc dans le forum SQL
    Réponses: 4
    Dernier message: 25/03/2007, 20h10

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