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 :

Erreurs ou bug Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 10
    Par défaut Erreurs ou bug Excel
    Bonjour,

    Je vous contacte car j'ai un problème avec ma macro vba. Celle-ci sert à retourner des couples de points pour ensuite tracer un graphique.
    Les valeurs rentrées par l'utilisateur sont les suivantes :
    épaisseur matière : 0,068
    rayon intercalaire : 0,318
    pas souhaité : 0,59
    hauteur intercalaire : 3,27856
    La macro "fonctionne" mais quelques erreurs demeurent : Excel me renvoie des couples de valeurs faux (par exemple ici, jusqu'au pas de 0.56mm, sauf la première valeur avec le pas de 0.2mm), ensuite les couples sont bons. Cela fait qu'en traçant le graphique, j'ai une courbe moche au début.
    Sauriez-vous ce qui peut causer cela ?

    De plus, je ne comprends pas pourquoi il m'avertit parfois que le nombre de points maximals que je peux placer dans un graphique 2D est de 32 000. Je pense qu'il y a un endroit ou il essaie de tracer un graphique alors que les points viennent d'être supprimé. Du coup, la sélection des données pour le graphique s'étend juqu'en bas (jusqu'à la ligne 65536 ou quelque chose comme ça). Le problème c'est que je ne sais pas où est l'erreur dans mon programme.

    Enfin, j'ai une sorte de bug : à chaque fois, je ne peux utiliser la macro qu'une seule fois dans mon fichier Excel. Si je retente, il ne me calcule pas les points, mais va bien jusqu'à créer le graphique (il ne me l'affiche pas juste parce qu'il n'y a aucun couple de points dans les colonnes. Auriez vous une idée du problème ?

    Voici le 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
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    Dim rayon_intercalaire As Double
    Dim Rm As Double
    Dim ep_matiere As Double
    Dim Hm As Double
    Dim Pas As Double
    Dim H_inter As Double
    Dim Pas_fixe As Double
    Dim H_moyen As Double
    Dim dev_cible As Double
    Dim dev_calculée As Double
    Dim i As Integer
    Dim ligne As Integer
     
    Function dev(Rm, Pas, H_moyen)
    dev = (4 * WorksheetFunction.Pi * Rm / 360) * (Atn(((H_moyen - 2 * Rm) / Pas)) * (180 / WorksheetFunction.Pi) + Atn(Rm / Sqr(((Sqr(((H_moyen - 2 * Rm) * (H_moyen - 2 * Rm)) + (Pas * Pas)) * Sqr(((H_moyen - 2 * Rm) * (H_moyen - 2 * Rm)) + (Pas * Pas))) / 4) - (Rm * Rm))) * 180 / WorksheetFunction.Pi) + Sqr((H_moyen * H_moyen) - (4 * Rm * H_moyen) + (Pas * Pas))
    End Function
     
     
    Function dev_c(Rm, Hm, Pas_fixe)
    dev_c = (4 * WorksheetFunction.Pi * Rm / 360) * (Atn(((Hm - 2 * Rm) / Pas_fixe)) * (180 / WorksheetFunction.Pi) + Atn(Rm / Sqr(((Sqr(((Hm - 2 * Rm) * (Hm - 2 * Rm)) + (Pas_fixe * Pas_fixe)) * Sqr(((Hm - 2 * Rm) * (Hm - 2 * Rm)) + (Pas_fixe * Pas_fixe))) / 4) - (Rm * Rm))) * 180 / WorksheetFunction.Pi) + Sqr((Hm * Hm) - (4 * Rm * Hm) + (Pas_fixe * Pas_fixe))
    End Function
     
     
    Sub hauteur_intercalaire()
     
    'On supprime tous les graphiques pré-existants
    Dim Graph As ChartObject
    Dim objRange As Range
    Dim Sh As Worksheet
    Set Sh = Sheets("Graphique")
    For Each Graph In Sh.ChartObjects
        Graph.Delete
    Next Graph
     
    'On efface le contenu des colonnes A, B, C
    Workbooks("Essai mesure hauteur =fonction(pas)(avec macro).xlsm").Sheets("Graphique").Activate
     
    Range("A2", Range("A2").End(xlDown)).Select
    Selection.ClearContents
    Range("B2", Range("B2").End(xlDown)).Select
    Selection.ClearContents
    Range("C2", Range("C2").End(xlDown)).Select
    Selection.ClearContents
     
    On Error Resume Next
     
    'Mettre ici une fenêtre utilisateur pour rentrer toutes ces données et choisir si tu veux
    'juste déterminer la hauteur maximale poiur un certain pas ou si tu veux tracer le graphique
     
     
     
    'Entrée utilisateur
    ep_matiere = InputBox("Entrez l'épaisseur matière en mm", "Epaisseur matiere", "", 150, 150)
     
    rayon_intercalaire = InputBox("Entrez le rayon de l'intercalaire", "Rayon de l'intercalaire", "", 150, 150)
     
    Pas_fixe = InputBox("Entrez le pas souhaité", " Pas pour le calcul de hauteur ", "", 150, 150)
     
    H_inter = InputBox("Entrez la hauteur de votre intercalaire", " Hauteur sur plan de l'intercalaire ", "", 150, 150)
     
    'Calcul intermédiaire
    Rm = rayon_intercalaire - (ep_matiere / 2)
    Hm = H_inter - ep_matiere
     
    'Calcul développée fixée
    On Error Resume Next
    dev_cible = dev_c(Rm, Hm, Pas_fixe)
    If Err.Number <> 0 Then
           'MsgBox "Votre développée est incalculable (valeur négative dans la fonction)"
            Err.Clear
    End If
     
    'Affichage développée de l'intercalaire pour vérification
    MsgBox ("Votre développée vaut " & dev_cible & " mm" & Chr(10) & " Vérifiez dans FEUILLE CALCUL MOLETTE TYPE LA CONCORDANCE. ")
     
     
    'Ecriture des colonnes du graphique
    Sheets("Graphique").Activate
    i = 2
    Do While Pas <= 3
        For Pas = 0.2 To 3 Step 0.01
        'MsgBox ("le Pas est " & Pas)
     
            For H_moyen = 0.5 To (H_inter + 3) Step 0.001
            'MsgBox ("H_moyen vaut " & H_moyen)
     
            dev_calculée = dev(Rm, Pas, H_moyen)
     
                If Err.Number <> 0 Then
                'MsgBox "Erreur"
                Err.Clear
                End If
                     'Si la développée est trouvée
                    If dev_calculée <= (dev_cible + 0.005) And dev_calculée >= (dev_cible - 0.005) Then
                        'MsgBox ("développée trouvée")
                        Cells(i, 1) = Pas
                        Cells(i, 2) = H_moyen
                        Cells(i, 3) = dev_calculée
                        i = i + 1
                        Exit For
                    End If
     
            Next
        Next
     
    Loop
     
    'Tracé du graphique
    MsgBox ("Tracé du graphique")
     
    'Création du graphique
    Set Graph = Sh.ChartObjects.Add(140, 10, 500, 300)
    With Graph.Chart
        .ChartType = xlLineMarkers
        .SeriesCollection.NewSeries
        .HasTitle = True
        With .ChartTitle
            .Characters.Text = "Hauteur = f(pas)"
        End With
        With .SeriesCollection(1)
            .Values = Sh.Range("B2", Range("B2").End(xlDown))
            .XValues = Sh.Range("A2", Range("A2").End(xlDown))
        End With
    End With
    Set Graph = Nothing
    Set Sh = Nothing
     
     
    End Sub
    Merci beaucoup de votre aide !

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2014
    Messages : 41
    Par défaut
    Hello,

    Est ce que la Macro fonctione sans le "On Error Resume Next" ?
    Est ce que c'est possible qu'il y ait des cases vides dans tes colonnes ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 10
    Par défaut
    hello,

    Merci de ta réponse.
    Oui en retirant le "On Error Resume Next" ligne 45 dans le code , cela fonctionne. Je l'avais mis ici parce que j'ai remarqué que le message concernant le nombre de points maximales que je peux placer dans un graphique 2D apparaît seulement quand,initialement (avant de lancer la macro) je n'ai rien dans les colonnes pour tracer le graphique. Du coup, comme mon code lui indique qu'il va prendre toutes les cases jusqu'à celle précédent la première case vide, il me prend toutes les lignes de la colonne (donc + de 65000 lignes). Ce qui est bizarre c'est que cela ne devrait pas se produire puisque dès le début du programme, je supprime les graphiques qui existent.

    Sinon, dans mes colonnes, ce n'est pas possible d'avoir des cellules vides. Je veux dire que le programme écrit par exemple, suivant ce qu'il trouve, de la cellule A2 à A400 sans aucune cellule vide. Par contre après rien n'est décrit dedans, mais le programme ne prend pas les valeurs dans ces cellules vides, il s'arrête à la dernière cellule non vide.

    Mais en fait j'ai trouvé le problème pour les fausses valeurs : en fait elles sont incalculables, mais excel inscrivait quand même qqchose à cause de mon "On Error Resume Next" (c'est peut être plutôt celui là auquel tu pensais ?). Le seul moyen pour moi d'avoir des couples de points est de déterminer la hauteur en fonction de ma développée, et non l'inverse. En effet, en utilisant l'analyse de scénario d'Excel, je peux bien déterminer une hauteur pour un certain pas et une certaine développée fixée (et un rayon fixé ).
    Désolé c'est peut être pas très clair...

    En tout cas, le problème serait de pourvoir résoudre l'équation présente dans l'une des 2 fonctions du début en ayant Hauteur = fonction ( pas, développée, rayon) (comme dans l'analyse de scénario en fait), et non pas développée =fonction (pas, hauteur, rayon).

    Excel sait il résoudre ce genre d'équation, mis à part avec l'analyse de scénario ? (pour avoir en fait tous les couples de solutions ?)

    Merci !

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

Discussions similaires

  1. barre d'erreur sur graphique excel
    Par fmris dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/10/2006, 14h41
  2. [VBA-A] erreur de compilation excel->access
    Par ashen dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/05/2006, 22h49
  3. Erreure pendant macro Excel
    Par nemesys971 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/01/2006, 12h11
  4. Bug Excel vers Access
    Par jbaudin dans le forum Access
    Réponses: 2
    Dernier message: 01/12/2005, 15h56
  5. Erreur d'import Excel -> Delphi
    Par Homer dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 05/07/2004, 10h07

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