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 424 VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de MolikDLuffy
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2017
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 158
    Billets dans le blog
    1
    Par défaut ERREUR 424 VBA
    Bonjour à tous,

    Malgré mes efforts de recherche (pourtant je suis quelqu'un très curieux), je ne comprends pas pourquoi le message Erreur d'exécution 424 - objet requis apparaît.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub recherche()
    Dim feuille As Worksheet
    Dim ligne As Range
    Dim cherche As Variant
     
    Dim pe As Worksheet
    Dim ce As Worksheet
    Dim c As Worksheet
    Dim acepe As Worksheet
    Dim fg As Worksheet
    Dim cdp As Worksheet
    Dim a As Worksheet
    Dim rdpece As Worksheet
    Dim pece As Worksheet
     
    Set pe = Worksheets("Produits d'exploitation")
    Set ce = Worksheets("Charges d'exploitation")
    Set c = Worksheets("Commissions")
    Set acepe = Worksheets("Autres charges et prod expl")
    Set fg = Worksheets("Frais Généraux")
    Set cdp = Worksheets("Charges de personnel")
    Set a = Worksheets("Amortissements")
    Set rdpece = Worksheets("Repr de prov et charges exc")
    Set pece = Worksheets("Provisions et charges exc")
     
    Application.ScreenUpdating = False
    Sheets("Acceuil").Range("R2").ClearContents
    cherche = InputBox("Quel numéro de compte cherchez-vous?", "Numéro de compte")
     
    For Each feuille In Array(pe, ce, c, acepe, fg, cdp, a, rdpece, pece)
    For Each ligne In feuille.Rows("1:1000")
    If Cells(ligne, 1).Value = cherche Then
    feuille.Cells(ligne, 1).Select
    End If
    Next
    Next
    Sheets("Acceuil").Range("R2") = Selection.Value
     
    If Sheets("Acceuil").Range("R2") = "" Then
    MsgBox "Le compte que vous recherchez n'existe pas", vbInformation ' je ne sais pas si le message d'information est bien placé
    End If
    Application.ScreenUpdating = True
     
    End Sub
    Comme vous avez compris, je veux rechercher un numéro comptable via INPUTBOX dans l'ensemble des feuilles. Bien entendu un numéro comptable est rattaché à une seule feuille.
    Et pour finir, si la recherche n'aboutit pas, je veux avoir le message qui me dit que le compte n'existe pas.

    Je vous remercie pour votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    feuille doit être déclaré en tant que Variant, tu ne peux pas faire un For Each en laissant feuille en tant que Worksheet

    attention aussi à la ligne 32, est-ce normal de travailler sur la feuille active plutôt que sur feuille.Cells(ligne,1) ?

    il n'est pas nécessaire de sélectionner la cellule pour ensuite affecter la valeur de "selection" à ta cellule R2 ... surtout que cette "valeur" est égale à ta variable "cherche"
    et pour gagner en efficacité, il serait opportun de prévoir une sortie des tes deux boucles For Each quand tu as trouvé ton occurence, ça ne sert à rien de finir de balayer ta feuille et de balayer ensuite les suivantes
    en dernier lieu, plutôt que de boucler ligne par ligne, utilise FIND() pour vérifier si ta valeur existe

    à main levée, je verrai quelque chose dans ce style si j'ai bien compris la finalité

    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
    Sub recherche()
    Dim feuille As Variant, cherche As Variant
    Dim ValeurTrouve As Range
    Dim pe As Worksheet, ce As Worksheet, c As Worksheet, acepe As Worksheet
    Dim fg As Worksheet, cdp As Worksheet, a As Worksheet, rdpece As Worksheet
    Dim pece As Worksheet
     
    Set pe = Worksheets("Produits d'exploitation")
    Set ce = Worksheets("Charges d'exploitation")
    Set c = Worksheets("Commissions")
    Set acepe = Worksheets("Autres charges et prod expl")
    Set fg = Worksheets("Frais Généraux")
    Set cdp = Worksheets("Charges de personnel")
    Set a = Worksheets("Amortissements")
    Set rdpece = Worksheets("Repr de prov et charges exc")
    Set pece = Worksheets("Provisions et charges exc")
     
    Application.ScreenUpdating = False
        cherche = InputBox("Quel numéro de compte cherchez-vous?", "Numéro de compte")
     
        For Each feuille In Array(pe, ce, c, acepe, fg, cdp, a, rdpece, pece)
            Set ValeurTrouve = feuille.Range("A1:A1000").Find(cherche, , xlValues, xlWhole)
            If Not ValeurTrouve Is Nothing Then Exit For
        Next feuille
     
        If Not ValeurTrouve Is Nothing Then
            Sheets("Acceuil").Range("R2") = cherche
        Else
            MsgBox "Le compte que vous recherchez n'existe pas", vbInformation
        End If
    Application.ScreenUpdating = True
    End Sub
    et j'éviterai même de passer par tes variables Worksheet pour directement construire un Array contenant mes Worksheets("toto"), mais ça c'est une question d'envie, ça ne change rien au procédé

  3. #3
    Membre expérimenté
    Avatar de MolikDLuffy
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2017
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 158
    Billets dans le blog
    1
    Par défaut ERREUR 13 VBA
    Merci joe.levrai.

    Par contre, un nouveau message d'erreur apparaît avec le code (Erreur d'exécution 13 - incompatibilité de type):

    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
    Sub recherche()
    Dim feuille As Variant
    Dim ValeurTrouve As Range
    Dim cherche As Variant
     
    Set pe = Worksheets("Produits d'exploitation")
    Set ce = Worksheets("Charges d'exploitation")
    Set c = Worksheets("Commissions")
    Set acepe = Worksheets("Autres charges et prod expl")
    Set fg = Worksheets("Frais Généraux")
    Set cdp = Worksheets("Charges de personnel")
    Set a = Worksheets("Amortissements")
    Set rdpece = Worksheets("Repr de prov et charges exc")
    Set pece = Worksheets("Provisions et charges exc")
     
    Application.ScreenUpdating = False
    Sheets("Acceuil").Range("R2").ClearContents
    cherche = InputBox("Quel numéro de compte cherchez-vous?", "Numéro de compte")
     
    For Each feuille In Array(pe, ce, c, acepe, fg, cdp, a, rdpece, pece)
    Set ValeurTrouve = feuille.Range("A1:A1000").Find(cherche, xlValues, xlWhole)
    If Not ValeurTrouve Is Nothing Then Exit For
    Next feuille
    If Not ValeurTrouve Is Nothing Then
    MsgBox "Le numéro " & cherche & "a été trouvé", vbInformation
    Else
    MsgBox "Le compte que vous recherchez n'existe pas", vbInformation
    End If
    Application.ScreenUpdating = True
     
    End Sub

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    c'est les aléas d'écrire à la volée

    j'ai oublié une virgule dans la déclarations des paramètres de find
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ValeurTrouve = feuille.Range("A1:A1000").Find(cherche, , xlValues, xlWhole)

  5. #5
    Membre expérimenté
    Avatar de MolikDLuffy
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2017
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 158
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    c'est les aléas d'écrire à la volée

    j'ai oublié une virgule dans la déclarations des paramètres de find
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ValeurTrouve = feuille.Range("A1:A1000").Find(cherche, , xlValues, xlWhole)
    Bonjour Joe.Levrai,

    Il n'y a plus de message d'erreur.

    Par contre j'ai une derrière chose à demander avant de clôturer cette discussion, après avoir chercher le compte et s'il a bien été trouvé, j'aimerais afficher directement la feuille concernée (mieux avec la cellule sélectionné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
    Sub recherche()
    Dim feuille As Variant
    Dim ValeurTrouve As Range
    Dim cherche As Variant
     
    Set pe = Worksheets("Produits d'exploitation")
    Set ce = Worksheets("Charges d'exploitation")
    Set c = Worksheets("Commissions")
    Set acepe = Worksheets("Autres charges et prod expl")
    Set fg = Worksheets("Frais Généraux")
    Set cdp = Worksheets("Charges de personnel")
    Set a = Worksheets("Amortissements")
    Set rdpece = Worksheets("Repr de prov et charges exc")
    Set pece = Worksheets("Provisions et charges exc")
     
    Application.ScreenUpdating = False
    cherche = InputBox("Quel numéro de compte cherchez-vous?", "Numéro de compte")
     
    For Each feuille In Array(pe, ce, c, acepe, fg, cdp, a, rdpece, pece)
    Set ValeurTrouve = feuille.Range("A1:A1000").Find(cherche, , xlValues, xlWhole)
    If Not ValeurTrouve Is Nothing Then Exit For
    Next feuille
    If Not ValeurTrouve Is Nothing Then
    MsgBox "Le compte que vous recherchez a été trouvé", vbInformation
    Else
    MsgBox "Le compte que vous recherchez n'existe pas", vbInformation
    End If
    Application.ScreenUpdating = True
     
    End Sub

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    bonjour,

    Essayes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Goto ValeurTrouve, True
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. Probleme prog Vba Erreur 424 objet requis
    Par sebastientabanon dans le forum Macros et VBA Excel
    Réponses: 46
    Dernier message: 02/08/2016, 00h50
  2. [AC-2010] ERREUR 424 : INSERT INTO VALUES VBA
    Par hgoss4 dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/06/2016, 13h56
  3. [VBA-E] Macro boucle for (erreur 424)
    Par vanexq dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/09/2010, 13h58
  4. [VBA-A][débutant] erreur 424
    Par sergoid dans le forum VBA Access
    Réponses: 5
    Dernier message: 07/02/2006, 18h22
  5. Récupération d'erreur en VBA
    Par User dans le forum Access
    Réponses: 3
    Dernier message: 13/09/2005, 17h08

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