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 :

Variable objet ou variable de bloc with non définie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Par défaut Variable objet ou variable de bloc with non définie
    Bonjour,

    lors de lexecution de la macro suivante, un message d'erreur s'affiche en me disant ainsi "variable objet ou variable de bloc with non définie" ( pour la ligne Tableau_resultats(Ligne_tableau, 2) = Plage_Rentabilites.Cells.Count 'nombre des taux de rentabilités) sauriez vous m'aider à identifier le probléme ? (j'en profite pour vous demander si il y aurait, selon vous, la possibilité d'effectuer la fonction et les procédures en meme temps de telle sorte que tous s'affiche au meme instant ? j'ai essayé un "call statistiques" pour la fonction mais celui ci m'affiche : argument non facultatif) un grand merci à vous !!

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Option Base 1
    Public Plage_Rentabilites As Range
     
     
    Sub Statistiques_Rentabilites()
     
    Dim Tableau_resultats() As Variant
    Dim Ligne_tableau As Integer
    Dim Feuille As Worksheet
    Nb_Actions = ThisWorkbook.Worksheets.Count - 1
    ReDim Tableau_resultats(Nb_Actions, 7)
    Ligne_tableau = 0
    For Each Feuille In ThisWorkbook.Worksheets
    If Feuille.Name <> "STATISTIQUES" Then
    Feuille.Activate
    Call Calcule_Rentabilites
     
    Ligne_tableau = Ligne_tableau + 1
    Tableau_resultats = Statistiques(Feuille, Tableau_resultats, Ligne_tableau)
    End If
    Next Feuille
    Worksheets("STATISTIQUES").Activate
    Range("A2").Select
    Range(Selection, Selection.Offset(Nb_Actions - 1, 6)).Value = Tableau_resultats
     
    End Sub
     
    'Calcul des taux de rentabilités
    Sub Calcule_Rentabilites()
    For Each Feuille In ThisWorkbook.Worksheets
    If Feuille.Name <> "STATISTIQUES" Then
    Feuille.Activate
    Dim Plage_Rentabilites&
    'jusqu'à la derniere ligne non vide
    Plage_Rentabilites = Cells(Rows.Count, 1).End(xlUp).Row
    Columns(7).Delete '<- ligne à supprimer aprés le test
    With Range("G1")
    .Value = "Taux de rentabilité": .Interior.Color = 55: .Font.Bold = -1: .Font.Color = 255
    End With
    'formule
    Range("G2").Resize(Plage_Rentabilites - 1) = "=ln((R[1]C2+RC3)/RC2)"
    End If
    Next Feuille
    Worksheets("STATISTIQUES").Activate
    End Sub
     
    Function Statistiques(Feuille, Tableau_resultats, Ligne_tableau)
     
    'mise en forme
    Sheets("STATISTIQUES").Range("A1:G1").Interior.Color = 55
    Sheets("STATISTIQUES").Range("A1:A7").Interior.Color = 55
    Sheets("STATISTIQUES").Range("A1:G1").Font.Color = 255
    Sheets("STATISTIQUES").Range("A1:A7").Font.Color = 255
    Sheets("STATISTIQUES").Range("A1").Value = "Nombre des taux"
    Sheets("STATISTIQUES").Range("B1").Value = "titres"
    Sheets("STATISTIQUES").Range("C1").Value = "moyenne"
    Sheets("STATISTIQUES").Range("D1").Value = "Mediane"
    Sheets("STATISTIQUES").Range("E1").Value = "Ecart-type"
    Sheets("STATISTIQUES").Range("F1").Value = "Skewness"
    Sheets("STATISTIQUES").Range("G1").Value = "kurtosis"
     
    Tableau_resultats(Ligne_tableau, 1) = Feuille.Name
    Tableau_resultats(Ligne_tableau, 2) = Plage_Rentabilites.Cells.Count 'nombre des taux de rentabilités
    Tableau_resultats(Ligne_tableau, 3) = WorksheetFunction.Average(Plage_Rentabilites) 'la moyenne
    Tableau_resultats(Ligne_tableau, 4) = WorksheetFunction.Median(Plage_Rentabilites) ' la mediane
    Tableau_resultats(Ligne_tableau, 5) = WorksheetFunction.StDev(Plage_Rentabilites) ' Ecart-type
    Tableau_resultats(Ligne_tableau, 6) = WorksheetFunction.Skew(Plage_Rentabilites) ' la Skewness
    Tableau_resultats(Ligne_tableau, 7) = WorksheetFunction.Kurt(Plage_Rentabilites) ' la kurtosis
    Statistiques = Tableau_resultats
     
    End Function

  2. #2
    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 kennedyisback Voir le message
    pour la ligne Tableau_resultats(Ligne_tableau, 2) = Plage_Rentabilites.Cells.Count
    Si j'en crois la recherche de mon navigateur, cette ligne n'est pas présente dans le code que tu présentes.

    Par contre, on y trouve cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage_Rentabilites = Cells(Rows.Count, 1).End(xlUp).Row
    Or, d'après ce que je comprends de ton code, cette variable devrait être de type Range (même si, dans la seconde procédure, elle n'est pas déclarée comme telle).
    Une référence de plage étant un objet, pour la placer dans une variable, il faut utiliser l'instruction Set.
    Mais, de toute façon, avec le Row final de cette ligne, c'est le numéro de ligne qui est renvoyé (donc une valeur de type Long) et non une plage.

    Mais c'est loin d'être le seul problème de ton code qui en a de nombreux autres.
    Il faudrait que tu fasses un peu de ménage.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Par défaut
    Bonjour, tout d'abord merci de votre réponse.
    Cette ligne est belle est bien présente, à la fin du code dans la fonction de calcul de statistiques .
    je pensais que le fait de la déclarer tout en haut de type range permettait que cela soit valable pour le module entièrement ?
    Je m'en doute bien mais je suis absolument novice en vba et donc incapable de voir ce que je dois modifier et comment malheureusement .. ahah.

    Citation Envoyé par Menhir Voir le message
    Si j'en crois la recherche de mon navigateur, cette ligne n'est pas présente dans le code que tu présentes.

    Par contre, on y trouve cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage_Rentabilites = Cells(Rows.Count, 1).End(xlUp).Row
    Or, d'après ce que je comprends de ton code, cette variable devrait être de type Range (même si, dans la seconde procédure, elle n'est pas déclarée comme telle).
    Une référence de plage étant un objet, pour la placer dans une variable, il faut utiliser l'instruction Set.
    Mais, de toute façon, avec le Row final de cette ligne, c'est le numéro de ligne qui est renvoyé (donc une valeur de type Long) et non une plage.

    Mais c'est loin d'être le seul problème de ton code qui en a de nombreux autres.
    Il faudrait que tu fasses un peu de ménage.

  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 kennedyisback Voir le message
    je pensais que le fait de la déclarer tout en haut de type range permettait que cela soit valable pour le module entièrement ?
    Elle est "redéclarée" dans la procédure Calcule_Rentabilites() où d'ailleurs elle est renseignée.

    incapable de voir ce que je dois modifier et comment malheureusement
    Je te l'ai expliqué dans mon post précédent.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Par défaut
    merci de votre réponse, je pense que alors que mon niveau, médiocre, de VBA ne m'a pas permis de comprendre votre réponse .. vous serez t'il possible de m'expliquer s'il vous plait ? merci !

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Dans ce genre de cas, je pense que le mieux est de d'abord définir en français ce que tu souhaites réaliser. On pourra bien sûr t'aider au cas par cas dans ton code, mais si nous avons d'abord l'objectif que tu poursuis, nous pourrions mieux t'aider avec un code qui serait peut-être fort différent mais plus productif.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Par défaut
    Merci pour votre réponse
    Pour vous expliquer succinctement :
    J'ai 4 feuilles qui me donnent des cours boursiers de différents titres,
    je cherche donc pour chacune des actions a tout d'abord en calculer le taux de rentabilités ( grâce à la 2e et 3e colonnes représentant les prix close et open) puis, dans une 5eme feuille de statistiques, effectuer un tableau de statistiques : moyenne, écart type, médiane, kurtosis, skewness ainsi que pour chacun des titres, savoir combien de "taux" j'ai calculé.
    l'idée est donc de spécifié que dans la feuille statistiques je crée un tableau (qui me donnera par ailleurs le nom des titres ainsi que des fonctions calculés), qu'ensuite pour toutes les feuilles mis a part celle des statistiques je calcul le taux de rentabilité jusqu'à la derniere cellules remplie de ma colonne, puis a l'aide de ces taux, dans le tableau crée précédemment je calcul les statistiques . Voila en bref ce en quoi cela consisterait.
    je cherche aussi à en calculer les moyennes mobiles à 20 jours et 50 jours ensuite.

    Voila voila, j'espère que cela vous aura éclairé et vous remercie de votre future aide à l'avance .

    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Dans ce genre de cas, je pense que le mieux est de d'abord définir en français ce que tu souhaites réaliser. On pourra bien sûr t'aider au cas par cas dans ton code, mais si nous avons d'abord l'objectif que tu poursuis, nous pourrions mieux t'aider avec un code qui serait peut-être fort différent mais plus productif.

Discussions similaires

  1. Variable objet ou variable bloc with non définie
    Par tarbala dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/05/2008, 12h19
  2. Variable objet ou variable de bloc With non définie
    Par sl1980 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2007, 19h15
  3. Réponses: 11
    Dernier message: 12/06/2007, 09h26
  4. Variable objet ou variable d'un bloc With non définie.
    Par paradeofphp dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/05/2007, 20h41
  5. Réponses: 13
    Dernier message: 01/06/2006, 17h20

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