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 :

Problème Select (Methode Select de la classe Range à échoué)


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
    Avril 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 91
    Par défaut Problème Select (Methode Select de la classe Range à échoué)
    Bonjour à tous!

    J'ai protégé ma feuille et je souhaite faire ajouter une liste déroulante dans une cellule. Voici mon code :

    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
    Sheets("Compte rendu").Rows(compteur2).Insert
                    Sheets("Compte rendu").Unprotect
                    Sheets("Compte rendu").Range("A" & compteur2 & ": I" & compteur2).Locked = False
                    Sheets("Compte rendu").Cells(compteur2, 1).Interior.Color = RGB(0, 0, 0)
                    Sheets("Compte rendu").Cells(compteur2, 2).Interior.Color = RGB(0, 0, 0)
                    Sheets("Compte rendu").Cells(compteur2, 3) = Usr_Ajouter.Txt_Nature.Text
                    Sheets("Compte rendu").Cells(compteur2, 3).Interior.ColorIndex = xlNone
                    Sheets("Compte rendu").Unprotect
                    Sheets("Compte rendu").Range("D" & compteur2).Select
                    With Selection.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="Fonctionnement interne;Ressources humaines;Suivi client;Système QSE"
                        .IgnoreBlank = True
                        .InCellDropdown = True
                        .InputTitle = ""
                        .ErrorTitle = ""
                        .InputMessage = ""
                        .ErrorMessage = ""
                        .ShowInput = True
                        .ShowError = True
                    End With
    Cependant, le code plante à cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Sheets("Compte rendu").Range("D" & compteur2).Select
    Je ne comprends pas car c'est un simple select... Et en plus la feuille n'est pas protégé...

    Est-ce que quelqu'un peut m'aider à mettre cette liste déroulante dans cette cellule svp?

    Merci d'avance pour vos réponses!

  2. #2
    Membre chevronné Avatar de jackborogar
    Homme Profil pro
    Etudiant Ingénierie Financière
    Inscrit en
    Avril 2012
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingénierie Financière
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 290
    Par défaut
    Bonjour,

    Je me souviens de ce fichier
    Déjà tu as deux fois Unprotected je pense que se n'est pas utile! As tu essayé de compiler pas à pas? Si non, fait le et regarde la valeur de ton compteur2 (en mettant ton curseur sur le nom curseur2").
    J'ai bien peur qu'elle aille chercher une valeur "Vide"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 91
    Par défaut
    Je me souviens de ce fichier
    Oui ça fait une semaine que je suis dessus et je suis pas prêt d'avoir finit avec les galères que j'ai

    Le Unprotect était là pour me rassurer que ma feuille n'était plus protégé, je sais qu'il n'est pas utile ^^

    Ensuite, le problème est plus grave qu'un simple Select, J'ai éssayé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With Sheets("Compte rendu").Range("D" & compteur2).Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="Fonctionnement interne;Ressources humaines;Suivi client;Système QSE"
                        .IgnoreBlank = True
                        .InCellDropdown = True
                        .InputTitle = ""
                        .ErrorTitle = ""
                        .InputMessage = ""
                        .ErrorMessage = ""
                        .ShowInput = True
                        .ShowError = True
                    End With
    Et là c'est le drame : Erreur d'exécution -2147417848 (80010108) Erreur Automation
    L'objet invoqué s'est déconnecté de ses clients.

    Il semblerait que cela provient d'une erreur ActiveX, mais je ne sais pas la résoudre (la ligne plante sur le .Add Type...)

  4. #4
    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 166
    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 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'utilisation de SELECT est à proscrire pour deux raisons. Cela ralenti l'exécution du programme et de plus c'est parfaitement inutile. On peut parfaitement modifier la propriété d'une cellule sans la sélectionner.
    Exemple à adapter selon tes besoins Ici la cellule qui contient la validation de données se trouve en cellule E2 de la même feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Dim sht As Worksheet
     Set sht = ThisWorkbook.Worksheets("Compte rendu")
     Dim rng As Range: Set rng = sht.Range("E2")
     Dim NewAddress As String
     NewAddress = "$A$2:$A$7"
     With rng.Validation
     .Delete
     .Add Type:=xlValidateList, Formula1:="=" & NewAddress
     End With
    Petite question, pourquoi faire un INSERT d'une ligne plutôt que d'ajouter tout simplement une ligne à la fin de la liste ?
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 91
    Par défaut
    Je sais pour les Select, ce code vient de l'enregistreur de macro, j'essaie de la faire fonctionner avant de l'optimiser ^^

    corona, est-il possible d'ajouter manuellement les données de la liste déroulante?

    Je vais essayer ton code en attendant, merci.

    EDIT : corona, il y a une erreur dans ton code.
    Impossible de réaliser la ligne avec .Add (la méthode Add de l'objet Validation à échoué)

    Petite question, pourquoi faire un INSERT d'une ligne plutôt que d'ajouter tout simplement une ligne à la fin de la liste ?
    J'ai des For et des If au dessus, je cherche le positionnement et j'insére une ligne dans un tableau que j'essaie ensuite de remplir avec notamment pour une cellule, une liste déroulante, voila le pourquoi du INSERT ^^

  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 166
    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 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par linkcr15 Voir le message
    corona, est-il possible d'ajouter manuellement les données de la liste déroulante?
    Oui, bien sûr, si tu transformes ta plage en tableau, les ajouts seront pris en compte automatiquement par la validation de données.
    EDIT : corona, il y a une erreur dans ton code.
    Impossible de réaliser la ligne avec .Add (la méthode Add de l'objet Validation à échoué)
    C'est curieux, parce-que je teste toujours les codes avant de les publier sur le forum.
    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 confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 91
    Par défaut
    J'en doutes pas, mais quelque chose ne fonctionne pas chez moi...
    Voici mon code :

    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
                    Dim sht As Worksheet
                    Set sht = ThisWorkbook.Worksheets("Compte rendu")
                    Dim rng As Range: Set rng = sht.Range("D" & compteur2)
                    Dim NewAddress As String
                    NewAddress = "$J$4:$J$7"
                    With rng.Validation
                        .Delete
                        .Add Type:=xlValidateList, Formula1:="=" & NewAddress
                        .IgnoreBlank = True
                        .InCellDropdown = True
                        .InputTitle = ""
                        .ErrorTitle = "Interdit"
                        .InputMessage = ""
                        .ErrorMessage = _
                        "Veuillez sélectionner une valeur dans la liste déroulante de la cellule."
                        .ShowInput = True
                        .ShowError = True
                    End With
    Et il bloque sur le .Add

  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 166
    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 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A la relecture de ton premier post, je constate que tu as placé en constante la liste de la Validation de données alors que moi je fais référence à un range.
    Mon test a été lancé alors que la feuille active était la même feuille que celle où se trouve la liste.
    Qu'elle est la valeur de la variable compteur2 ?
    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 confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 91
    Par défaut
    compteur2 change justement en fonction des choses déjà ajouté dans un tableau.
    J'ai compris ton code et le soucis ne vient pas de là.
    Le placement en constante faisait partie de l'enregistreur de macro, j'ai repris ton code entièrement ^^
    Par contre ma feuille active n'est pas la même que la feuille où se trouve les données ainsi que la feuille où j'insère les données, est-ce que l'erreur pourrait venir de là?

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

Discussions similaires

  1. Problème requete SQL select * from( select )
    Par yacinew dans le forum Bases de données
    Réponses: 8
    Dernier message: 12/04/2015, 07h14
  2. méthode select class range échoué
    Par PLH81 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/08/2014, 17h03
  3. Réponses: 11
    Dernier message: 09/07/2014, 16h40
  4. [XL-2010] Méthode Select de la classe Range échoué
    Par Identifiant_Anonyme dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/05/2014, 10h06
  5. La methode sort de la classe range a échouée
    Par titeZ dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 24/08/2007, 15h25

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