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 :

Qualificateur incorrect VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 9
    Par défaut Qualificateur incorrect VBA
    Bonjour,

    J'ai une question concernant une erreur de compilation. Je ne comprends pas pourquoi elle apparaît, puisque je fais la même chose à plusieurs endroits du code et ça ne pose pas de problèmes :/
    J'ai fait plusieurs recherche sur l'erreur, sans succès.

    voici le code et l'erreur :
    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
    ' activationn de la feuille
            Sheets("Cours " & Section).Activate
            Annee = Correspondance(Section, Bloc)
            If Annee <> "" And Selection = "" Then ' si il y a un bloc s?lectionn? et pas d'ue s?lectionn?e
                ' on cherche l'endroit ? partir duquel on doit afficher les cours
                Columns("A:A").Find(What:=Annee, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=False).Activate
                ActiveCell.Select
                LBSans.Clear
                LBAvec.Clear
                CellulePrecedente = Range("A" & ActiveCell.Row).Value
                While CellulePrecedente = Range("A" & ActiveCell.Row)
                    If Left(Range("I" & ActiveCell.Row).Value, 3) = "non" Then 'sans attributions
                        LBSans.AddItem Range("D" & ActiveCell.Row)
                    Else ' avec attributions
                        LBAvec.AddItem Range("D" & ActiveCell.Row)
                    End If
                Wend
            Else ' si il y a une Ue s?lectionn?e (le bloc n'a plus d'importance)
                MsgBox "ue"
            End If
    Nom : jenaimarreduprojet.png
Affichages : 1213
Taille : 23,0 Ko

    Contexte, je veux chercher une certaine valeur (variable Annee, déclarée string, dans la colonne A). Chose que je fais à de très nombreux endroits différe,ts du code et ce sans problèmes.
    J'ai aussi remarqué que lorsque je met le .find directement après Columns("A:A"), cette erreur disparaît et laisse place à une erreur d'incompatibilité de type.
    Autre chose, je ne peux même pas debuger mon programme puisque, même avec un point d'arrêt sur l'appel de la procédure, l'erreur apparaît directement.

    Je vais continuer mes recherches pour ne pas perdre lus de temps,
    merci d'avance

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 705
    Par défaut
    Bonjour,

    Il y a beaucoup de Select et Activate dans ton code. Est-ce vraiment utile ? De façon général, il faut éviter au maximum d'utiliser des Select/Activate. Exemple plutôt que d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A:A").Find("toto").Select
    Selection.Value = "titi"
    On écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A:A").Find("toto").Value = "titi"
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim trouve As Range
    Set trouve = Range("A:A").Find("toto")
    trouve.Value = "titi"
    Par exemple, quand tu écris cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Columns("A:A").Select
    Selection.Find(What:=Annee, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=False).Activate
    Tout ce qui est en orange fait référence au Select, donc à Columns("A:A"), or je ne suis pas sûre que c'est ce que tu veux avec ActiveCell.

    D'autre part,
    est redondant, puisque ActiveCell est déjà la cellule sélectionnée.

    Quant à ton erreur, j'ai essayé sur un exemple tout simple où "a" est écrit dans une cellule de la colonne A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
        MsgBox Columns("A:A").Find("a").Row
    End Sub
    Ceci fonctionne. J'ai une erreur si je cherche quelque chose qui n'est pas dans la colonne A. Est-ce que le mot que tu cherches se situe bien dans la colonne A ?
    Vérifie que la variable Anne correspond bien à ce que tu cherches. Utilises par exemple une MsgBox pour faire des tests.

    Est-ce normal que tu ais le paramètre LookIn:=xlFormulas ? Tu cherches l'année dans la formule et pas dans le contenu ? Tu me diras, s'il n'y a pas de formule, mais que du texte écrit en brut, c'est équivalent.


    Essaie de vérifier que le find trouve bien qqc en utilisant une variable Variant comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim trouve As Variant
     
    Set trouve = Columns("A:A").Find(What:=Annee, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=False)
     
    If trouve Is Nothing Then MsgBox "pas trouvé": exit sub

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 9
    Par défaut
    Citation Envoyé par riaolle Voir le message
    Il y a beaucoup de Select et Activate dans ton code. Est-ce vraiment utile ? […]

    […] J'ai une erreur si je cherche quelque chose qui n'est pas dans la colonne A. Est-ce que le mot que tu cherches se situe bien dans la colonne A ?
    Vérifie que la variable Anne correspond bien à ce que tu cherches. Utilises par exemple une MsgBox pour faire des tests.[…]

    Est-ce normal que tu ais le paramètre LookIn:=xlFormulas ? Tu cherches l'année dans la formule et pas dans le contenu ? Tu me diras, s'il n'y a pas de formule, mais que du texte écrit en brut, c'est équivalent.


    Essaie de vérifier que le find trouve bien qqc en utilisant une variable Variant comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim trouve As Variant
     
    Set trouve = Columns("A:A").Find(What:=Annee, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                    False, SearchFormat:=False)
     
    If trouve Is Nothing Then MsgBox "pas trouvé": exit sub
    Bonjour,
    Merci pour tes explications, je vais répondre dans l'ordre. D'abord pour l'utilité des select et activate, ils viennent tous d'une macro de recherche que j'ai effectuée au début du projet, comme notre prof nous a dit de le faire. Et ayant très peu de connaissance en vba, je ne sais pas trop si c'est utile, après avec ça mon code fonctionne donc je préfère laisser ça comme ça et ne pas chipoter à chercher d'autres moyen, la deadline du projet étant vendredi 00h.

    Oui, ce que je cherche se trouve bien dans la colonne A. Et pour vérifier mes variables j'utilise la fenêtre des variables locales pour ne pas surcharger de msgbox. Aussi je trouve ça plus simple pour suivre l'évolution de mes variables et je suis assez habitué à ce genre de debug.

    Pour le lookin0:=xiFormulas, cela vient aussi de ma macro de base, mais en effet il n'y a que du texte dans mes cellules.

    J'ai essayé ton code de test, j'ai une erreur de type incompatibles. Je vais essayer de trouver la source de l'erreur. Mais je ne peut même pas tester la valeur de trouve puisque l'erreur survient pendant la recherche. Je ne comprends pas pourquoi puisque la valeur que je cherche est bien présente dans ma colonne.

    J'ai aussi essayé les recherches en simplifiant le code comme tu le proposes, mais là, plus aucune procédure ne fonctionne correctement. J'ai donc remis comme c'était à la base, ce n'est peut être pas optimisé, mais ça fonctionne.

    Mehnir : c'est le même code, j'ai juste mis le find directement sur le columns("A:A")

    Merci

    EDIT :
    en codant le reste de la procédure, j'ai remarqué que l'erreur arrivait même si je ne rentre pas dans la condition avec ce problème. J'ai alors le "Selection" qui posait problème sélectionné en bleu et l'en tête de la procédure sélectionné en jaune. Voir l'image qui suit.
    J'ai vérifié les arguments que je passe à ma procédure lors de l'appel et ils sont tous bons donc aucune idée de l'erreur. Je ne vous cache pas que je trouve la gestion des erreurs en VBA très floue. C'est peut-être une question d'habitude, mais je trouve que la gestion des erreurs en vba est loin d'être aussi claire qu'en java par exemple, où on peut remonter facilement la gestion de l'erreur.
    Nom : cettefoiscestlabonne.png
Affichages : 962
Taille : 31,0 Ko

    EDIT 2 :
    J'ai bêtement fait l'erreur d'appeler une variable "Selection"

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par scryper Voir le message
    Mehnir : c'est le même code, j'ai juste mis le find directement sur le columns("A:A")
    Donc ce n'est pas le même code.

    J'ai bêtement fait l'erreur d'appeler une variable "Selection"
    CQFD

  5. #5
    Membre du Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2020
    Messages : 10
    Par défaut Macro ajout ligne selon conditions
    Bonjour,
    Je suis complètement novice en macro.
    J'ai effectué une planification avec un ajout / suppression d'une ligne et je souhaiterais insérer des conditions d'insertion selon deux critères de rangement :
    Le premier est la section de l'intéressé.
    Le deuxième est le grade de l'intéressé.
    Comment puis je réaliser ce travail via macro

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Floy69 Voir le message
    J'ai effectué une planification avec un ajout / suppression d'une ligne et je souhaiterais insérer des conditions d'insertion selon deux critères de rangement :
    Le premier est la section de l'intéressé.
    Le deuxième est le grade de l'intéressé.
    Comment puis je réaliser ce travail via macro
    Crée ton propre sujet plutôt que de squater le sujet de quelqu'un d'autre qui, en plus, est qualifié "Résolu".

    De plus, les éléments que tu fournis sont très insuffisants pour apporter une réponse exploitable.

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Pourquoi le code que tu présentes ne correspond pas à celui qui génère l'erreur ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/11/2015, 12h29
  2. [XL-2007] VBA concatener, erreurs variable non définie ou qualificateur incorrect
    Par pétrin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/07/2015, 17h50
  3. [XL-2007] Qualificateur incorrect sur un offset apres une methode find
    Par scoulibri dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/03/2015, 09h55
  4. [XL-2007] Erreur de compilation: Qualificateur incorrect
    Par chombriko dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/05/2012, 17h06
  5. qualificateur incorrect dans Workbook_SheetChange
    Par firaponte dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/09/2008, 11h32

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