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 400 : création de barres d'avancement


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 97
    Par défaut Erreur 400 : création de barres d'avancement
    Bonjour !

    Je fais un truc un peu tordu en ce moment.

    je créé des rectangle de tailles variables qui vont former des barres d'avancement (un peu comme des barres de télechargement).

    Les tailles vont donc changer selon des pourcentages calculés a partir de tableaux.

    J'ai déja réussi a en faire plusieurs et ça marche très bien.

    Mon problème c'est que je dois en faire une qui prendra en compte plusieurs moyennes. donc la barre aura la forme de plusieurs barres de chargement collées les une a la suite des autres. (Vous me suivez toujours ? )

    Et la j'ai une erreur 400. J'ai cru comprendre que ça veux dire qu'il y à un conflit et qu'une variable prend plusieurs valeurs différentes en même temps (mais je ne suis pas sur d'avoir bien compris...)
    Je ne vois pas d'ou ça peut venir...

    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
    Sub barrePE()
     
    nbCellsJalPE
    moyennePE
     
    Dim a, b, c, d, i, j(12) As Integer
    a = -1
    d = -1
     
    For c = 0 To 12
        DeleteShape (c + 100)
        DeleteShape (c + 200)
        j(c) = 0
    Next c
     
    For i = 0 To Cells(89, 1).Value - 1
     
        If Cells(82, 12 + i).Value <> "" Then
            a = a + 1
            j(a) = Cells(80, 12 + i).Value 'recupères des valeur pour séparer les différentes barres d'avancement
     
        End If
     
    Next i
     
    For b = 0 To Cells(89, 1).Value - 1
    d = -1
        Dim CoordX, CoordY  As Double
        Dim hauteur, Hauteur1, largeur As Double
        Dim CoordX1, CoordY1  As Double
        Dim Hauteur2 As Double
        Hauteur1 = 0
        If j(b) = 0 Then
     
        Else
                CoordX = Cells(23, j(b) + 8 - nbCellsJalonPE(j(b) - 1)).Left
                CoordY = Cells(23, j(b) + 8 - nbCellsJalonPE(j(b) - 1)).Top
            For i = 0 To nbCellsJalonPE(j(b) - 1) - 1
                d = d + 1
                Hauteur1 = Hauteur1 + Cells(23, 8 + j(b) - nbCellsJalonPE(j(b) - 1) + d).width
     
            Next i
                hauteur = (Hauteur1 * moyPE(j(b) - 1))
                largeur = Cells(23, 8 + b).RowHeight
     
                With ActiveSheet.Shapes.AddShape(msoShapeRectangle, CoordX, CoordY, hauteur, largeur)  'crée un rectangle de taille variable
                    .Name = "fait" & j(b) + 100
                    .DrawingObject.Interior.ColorIndex = 43
                End With
     
                CoordX1 = Cells(23, j(b) + 8 - nbCellsJalonPE(j(b) - 1)).Left + hauteur
                CoordY1 = Cells(23, j(b) + 8 - nbCellsJalonPE(j(b) - 1)).Top
                Hauteur2 = Hauteur1 - (hauteur)
     
                With ActiveSheet.Shapes.AddShape(msoShapeRectangle, CoordX1, CoordY1, Hauteur2, largeur)  'crée un rectangle de taille variable
                    .Name = "fait" & j(b) + 200
                    .DrawingObject.Interior.ColorIndex = 3 
                End With
        End If
    Next b
    End Sub
    quelqu'un a une idée ?
    Si vous ne m'avez pas suivi, demandez des précision, j'ai trop baigné dans mon sujet pour y voir clairement

  2. #2
    Membre éclairé Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Par défaut
    En général quand j'ai l'erreur 400 moi c'est qu'un Range a échoué. La cause peut être que ta feuille est protégée, ou que tu utilises un Range mal attribué.
    Je suis d'accord l'erreur est tout sauf claire u_u Mais d'habitude au final c'est un truc tout con =p
    Essaie de cibler un peu à quelle ligne l'erreur survient (commente des morceaux).

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 97
    Par défaut
    Bonjour Orhleil,

    Non je ne vois pas du tout d'ou vient le pb...
    Il me lance le message d'erreur, puis me fais une des deux barres que je veux dessiner (mais pas dans les bonnes proportions) et c'est tout...

    Qu'est ce que tu veux dire par
    qu'un Range a échoué
    sinon ma feuille est protégée mais j'ai déjà fait des barres d'avancement de la même façon mais en plus simplifié et ça marchait très bien...

  4. #4
    Membre éclairé Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Par défaut
    Essaie de commenter un bout de ton code, execute, vois si tu as toujours l'erreur, et recommence jusqu'à savoir à peu près précisément quelle ligne déclenche l'erreur.

    EDIT : en matière de protection de feuille, un micro-détail de différence peut provoquer le plantage d'un Range ^^

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut
    Polo31, Orhleil a raison. Une erreur, cela apparaît dans un numéro de ligne et un contexte précis.
    J'ajouterai qu'une erreur c'est plus qu'un numéro, c'est aussi un message d'erreur.

    Cette procédure a besoin d'une refonte complète du code. Elle a plus de 60 lignes.
    Ne peut-on pas factoriser l'expression d'indice suivante utilisée cinq fois ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j(b) + 8 - nbCellsJalonPE(j(b) - 1)
    A moins qu'il y ait des changements entre leurs utilisations.

    Regroupez la déclaration des variables locales sous :
    S'il y en a trop, cela démontre l'urgence de structurer en procédures compréhensibles.

    Dans la déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim a, b, c, d, i, j(12) As Integer
    Ok j malgré son nom ultra court est un tableau d'Integer.
    Mais a, b, c, d, i ne sont certainement pas des Integer car leurs types n'ont pas été précisés.
    C'est une erreur classique de croire que le dernier type spécifié (ici Integer) est propagé sur les premières variables.

    Mettre un point d'arrêt dans barrePE() sur la première affectation a = -1
    Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE, copier-coller l'instruction suivante et valider la par ENTER :
    Integer()
    Empty

    Un programme qui utilise des variables sur une seule lettre telle que a, b, c, d, i est bon à être réécrit. C'est juste illisible.

    On retrouve le même bug de déclaration dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim CoordX, CoordY  As Double
    Seul CoordY est un Double.
    A-t'on réellement besoin d'un calcul double précision en flottant pour calculer CoordY ?

    Décrire l'algorithme avec des constantes nommées.
    Plutôt que
    Indiquez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Public Const nbrMaxShape = 12 ' S'il s'agit de shape ?
    Puis dans la procédure barrePE() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim arrShape(nbrMaxShape) As Integer
     
    For indShape = 0 To nbrMaxShape
        DeleteShape indShape + 100 ' C'est quoi ce + 100 ou + 200 ?
        DeleteShape indShape + 200 ' Créer la constante ayant la valeur 200 pour expliquer
        arrShape(indShape) = 0
    Next
    On n'aura plus de chance de comprendre qu'est-ce que le tableau j.

    Remplacez les constantes numériques 89, 82, 23 dans Cells(89,1), Cells(82,...), Cells(23, ...) par des constantes nommées
    Public Const rowName = value
    avec Name un nom significatif de la rangée.
    Il faut décrire les rangées et colonnes principales de la feuille avec des constantes nommées.

    Réduisez la complexité du problème en fournissant l'environnement minimal où on peut tester individuellement les procédures dans la fenêtre d'Exécution immédiate selon le schéma paramètres d'entrée, résultat attendu. Voir C'est bien Barrée dans la progression.

    Ainsi simulez nbCellsJalPE, moyennePE, etc. dans un code fourni (éventuellement avec des procédures vides si on n'en a pas besoin pour le bug) afin que l'on puisse lancer barrePE() et reproduire le bug.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 97
    Par défaut
    Merci pour vos réponses !

    Comme vous avez pu voir je ne suis pas très doué en VBA...

    Bon j'essais de réecrire ça en avec tes conseils MattChess mais il y a quelques trucs sur lesquels je bloque donc ça risque de prendre un peu de tps...

  7. #7
    Membre éclairé Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Par défaut
    T'inquiète pas on sera encore là pour t'aider =)

    T'as été sévère MattChess quand même xD Même si je suis totalement d'accord avec tout ce que tu as dit
    Par contre tu dis au début de ton message qu'une erreur c'est pas seulement un numéro c'est aussi un message d'erreur, c'est justement moyennement vrai pour l'erreur 400, qui doit être un bug d'Excel puisque la fenêtre d'erreur n'affiche rien d'autre que "400". Il existe bien un message d'erreur mais il n'est pas affiché.

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 97
    Par défaut
    Merci Orhleil !!

    C'est vrai que les erreurs 400 ne sont pas très clairs...

    Finalement j'ai tout réecri completement différemment et ça marche. il y avait toujours une erreur 400 mais celle ci s'est areté dès que j'ai enlevé la protection de la feuille.

Discussions similaires

  1. [VBA-E]erreur sur création d'une barre de menu
    Par roseau dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/03/2007, 12h17
  2. [Sessions] Message erreur PHP création de session
    Par Ylias dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2005, 12h11
  3. Réponses: 26
    Dernier message: 27/04/2005, 12h29
  4. Réponses: 3
    Dernier message: 12/11/2003, 16h57

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