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 Objet requis


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 18
    Par défaut Erreur 424 Objet requis
    Bonjour à tous,

    Je travaille sur un fichier de suivi et surtout sur un sub qui "surveille" les valeurs dans un tableau, quand une des valeurs est supérieure à une cible un msgbox apparaît avec des informations sur la ligne de la valeur en question.
    Et là je bloque sur un point tout bête...
    Je définis ma variable "Ticker" avec une fonction offset mais j'ai une erreur 424 objet requis qui apparaît et je ne vois pas comment arranger ça...
    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 Surveille_suite()
        Dim Tableau_Variations As Range
            Set Tableau_Variations = Workbooks("TEST sbf").Worksheets("TableauFixe").Range("AW11:AW131")
            ' Définit la taille du tableau
     
        Dim limite_variations As Integer
            limite_variations = Workbooks("TEST sbf").Worksheets("TableauFixe").Cells(3, 3).Value
            'Limite à la hausse
     
        Dim Ticker As String
            Ticker = Cell.Offset(0, -47).Value
     
        Dim Nom_action As String
            Nom_action = Cell.Offset(0, -46).Value
     
        Dim variations As Integer
            variations = Cell.Value * 100 & "%"
     
     
        For Each Cell In Tableau_Variations
        If Cell.Value > limite_variations Then
     
            MsgBox Ticker & Chr(47) & Chr(32) & Nom_action & " varie de " & variations _
            & " sur les 15 dernières minutes, que voulez-vous faire ?", vbCritical, "Alerte variations"
     
            Else
     
        End If
        Next Cell
    End Sub
    Si vous avez des idées de réponse à mon problème, je suis preneur
    Bonne journée à tous !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ticker = Cell.Offset(0, -47).Value
    Cell représente quoi ?

    Même souci ligne 14 et 17

    A+

  3. #3
    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
    Je ne vois rien dans ton code qui renseigne la variable Cell.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonjour,

    Pour avancer un peu,
    - une déclaration est mal faite
    - il y a un mélange de déclarations de variables et de leur initialisation : l'une d'entre elles est initialisées avant sa déclaration.

    Dim variations As Integer 'et le & "%" ? --> merci Option Explicit
    variations = Cell.Value * 100 & "%" 'Cell n'est initialisée que ci-dessous

    For Each Cell In Tableau_Variations
    Pour éviter ce genre d'erreurs, pour ma part, je préfère déclarer toutes les variables puis les initialiser au fur et à mesure de leur utilisation comme ici
    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
    Option Explicit
    Sub Surveille_suite()
      Dim Plage As Range, R As Range
      Dim limite As Integer
      Dim Ticker As String, Action As String, Variations As String
      Set Plage = Range("AW11:AW131").SpecialCells(2)
      limite = [C3].Value
      For Each R In Plage
        If R > limite Then
          Ticker = R(1, -46)  'simplification sans .Offset…
          Action = R(1, -45)
          Variations = R * 100 & "%" 
          MsgBox Ticker & "/" & Action & " varie de " & Variations _
               & " sur les 15 dernières minutes.", , "Alerte variations..."
        End If
      Next
    End Sub
    Remarque : Quel est l'intérêt d'une alerte pour chaque cas trouvé ? Cela risque de devenir barbant avec une centaine de cas !

  5. #5
    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
    Il y a aussi celle-ci qui est jolie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Dim variations As Integer
            variations = Cell.Value * 100 & "%"
    Tu définis une variable comme Integer et juste derrière tu y mets du texte.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 18
    Par défaut
    Bonjour à tous,

    Je viens de prendre connaissance de vos réponses, en fait Ticker c'est censé être la variable contenant la valeur de la cellule que je décale de (0,-47).
    Comme je fais un "for each cell in tableau_variations" je ne pensais pas devoir définir cell ...

    Effectivement je ne sais pas pourquoi j'ai mis variations en integer ça n'a pas de sens...

    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 Surveille_suite()
        Dim Tableau_Variations As Range
            Set Tableau_Variations = Workbooks("TEST sbf").Worksheets("TableauFixe").Range("AW11:AW131")
            ' Définit la taille du tableau
     
        Dim limite_variations As Integer
            limite_variations = Workbooks("TEST sbf").Worksheets("TableauFixe").Cells(3, 3).Value
            'Limite à la hausse
     
        'Dim Ticker As String
           ' Ticker = Offset(0, -47).Value
     
       ' Dim Nom_action As String
           ' Nom_action = Offset(0, -46).Value
     
       ' Dim variations As String
            'variations = Value * 100 & "%"
     
     
        For Each cell In Tableau_Variations
        If cell.Value > limite_variations Then
     
            MsgBox cell.Offset(0, -47).Value & Chr(47) & Chr(32) & cell.Offset(0, -46).Value & " varie de " & variations _
            & cell.Value * 100 & "%" & " sur les 15 dernières minutes, que voulez-vous faire ?", vbCritical, "Alerte variations"
     
            Else
     
        End If
        Next cell
    End Sub
    Comme ça, ça marche mais je pensais pouvoir utiliser des variables pour remplacer les "cell.offset" pour que ce soit plus simple à lire

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 18
    Par défaut
    Au fait j'ai une autre petite question...
    Vous savez comment je peux créer une msgbox avec des noms d'options personnalisées ?
    L'idée ça serait de d'avoir 3 boutons du genre "acheter", "vendre", "Retour"
    Pour le retour j'imagine que c'est assez simple sachant que c'est une possibilité déjà prévue par VB, par contre pour créer les autre je ne vois pas vraiment...
    Sinon je pourrais peut être créer un userform où l'utilisateur rentre ce qu'il veut faire, vous en pensez quoi ?

  8. #8
    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 nonoitalia42 Voir le message
    Vous savez comment je peux créer une msgbox avec des noms d'options personnalisées ?
    L'idée ça serait de d'avoir 3 boutons du genre "acheter", "vendre", "Retour"
    Pour le retour j'imagine que c'est assez simple sachant que c'est une possibilité déjà prévue par VB, par contre pour créer les autre je ne vois pas vraiment...
    Sinon je pourrais peut être créer un userform où l'utilisateur rentre ce qu'il veut faire, vous en pensez quoi ?
    Il n'est pas possible de faire ça avec un MsgBox, il faut passer par un UserForm.

    Les seules possibilités avec un MsgBox sont :
    vbOKOnly 0 Affiche le boutonOK uniquement.
    vbOKCancel 1 Affiche les boutons OK et Annuler.
    vbAbortRetryIgnore 2 Affiche les boutonsAbandonner, Réessayer, et Ignorer.
    vbYesNoCancel 3 Affiche les boutons Oui, Non et Annuler.
    vbYesNo 4 Affiche les boutons Oui et Non.
    vbRetryCancel 5 Affiche les boutons Réessayer et Annuler.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 18
    Par défaut
    C'est ce qu'il me semblait, merci @Menhir

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 18
    Par défaut
    Citation Envoyé par OrDonc Voir le message
    Bonjour,

    Pour avancer un peu,
    - une déclaration est mal faite
    - il y a un mélange de déclarations de variables et de leur initialisation : l'une d'entre elles est initialisées avant sa déclaration.



    Pour éviter ce genre d'erreurs, pour ma part, je préfère déclarer toutes les variables puis les initialiser au fur et à mesure de leur utilisation comme ici
    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
    Option Explicit
    Sub Surveille_suite()
      Dim Plage As Range, R As Range
      Dim limite As Integer
      Dim Ticker As String, Action As String, Variations As String
      Set Plage = Range("AW11:AW131").SpecialCells(2)
      limite = [C3].Value
      For Each R In Plage
        If R > limite Then
          Ticker = R(1, -46)  'simplification sans .Offset…
          Action = R(1, -45)
          Variations = R * 100 & "%" 
          MsgBox Ticker & "/" & Action & " varie de " & Variations _
               & " sur les 15 dernières minutes.", , "Alerte variations..."
        End If
      Next
    End Sub
    Remarque : Quel est l'intérêt d'une alerte pour chaque cas trouvé ? Cela risque de devenir barbant avec une centaine de cas !
    Bonne remarque @OrDonc, en effet j'aimerai pouvoir faire en sorte que la macro ne se déclenche qu'entre 9h30 et 17h20 par exemple et et qu'elle ne se répète pas sur la même ligne pendant au moins 15 minutes, tu penses que c'est envisageable ?

Discussions similaires

  1. Find - Erreur 424 - Objet requis
    Par wilfried_42 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/02/2009, 09h42
  2. erreur 424, objet requis
    Par Nessie37 dans le forum VBA Access
    Réponses: 8
    Dernier message: 08/01/2009, 12h20
  3. Erreur 424 objet requis
    Par davyvba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2008, 17h52
  4. erreur "424" Objet requis
    Par fifrelin_70 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 29/10/2007, 19h48
  5. Erreur 424 Objet requis sur connexion à Access
    Par darkian dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2006, 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