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 d'execution 9 [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juin 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 2
    Par défaut Erreur d'execution 9
    Bonjour à tous,
    J'ai rencontré un problème que je ne parviens pas à m'expliquer dans une macro, j'espérais trouver de l'aide ici.
    Voila le début de la macro (elle est très longue mais le problème apparait tot)

    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
     
    Sub Ban()
     
    Dim l1, l2, l3, l4, l5, l6, l7, kw, lr1, lr2, lr3, lr4, lr5, lr6, lr7, q1, q2, q3, q4, q5, q6, q7, v, w, x As Integer
    Dim y, b, b1, b2, b3, b4, b5, bs As Long
    Dim t1, t2, t3, t4, t5 As Boolean
     
    Dim m As String
     
    Application.ScreenUpdating = False
     
    kw = Workbooks("Planung Übersicht.xlsm").Sheets("Instructions").Cells(10, 7).Value
    m = Workbooks("Planung Übersicht.xlsm").Sheets("Instructions").Cells(12, 7).Value
    y = Workbooks("Planung Übersicht.xlsm").Sheets("Instructions").Cells(15, 7).Value
     
     
     
    Workbooks("Bänder    " & y & ".xls").Activate
    lr6 = Workbooks("Bänder    " & y & ".xls").Sheets("KW " & kw).Cells(Rows.Count, 1).End(xlUp).Row
    l6 = 35
     
    'starting from the bottom as planned qty is written in the last day for continuous jobs
     
    l7 = 7
     
    b1 = 0
    b2 = 0
    b3 = 0
    b4 = 0
    b5 = 0
     
    t1 = False
    t2 = False
    t3 = False
    t4 = False
    t5 = False
     
    y = 0
     
    For y = lr6 To 7 Step -1
     
    'day off?
     
        If Workbooks("Bänder    " & y & ".xls").Sheets("KW " & kw).Cells(y, 7).Interior.ColorIndex = 3 Then
     
    ...
    Lorsque l'execution passe sur les lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Workbooks("Bänder    " & y & ".xls").Activate
    lr6 = Workbooks("Bänder    " & y & ".xls").Sheets("KW " & kw).Cells(Rows.Count, 1).End(xlUp).Row
    Il n'y a aucun souci, la macro continue tranquillement...

    Mais, lorsqu'on arrive au

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Workbooks("Bänder    " & y & ".xls").Sheets("KW " & kw).Cells(y, 7).Interior.ColorIndex = 3 Then
    C'est le drame, la fatidique erreur 9...

    J'ai pensé que le problème venait des noms de classeur/feuilles mais pourquoi la première ligne passerait alors? J'ai bien copié/collé ce qui était ecrit dans la ligne qui fonctionnait mais rien n'a changé.

    J'ai essayé de changer la variable "y" par un chiffre fixe pour voir si elle était la cause du problème et pareil, erreur 9.

    Je sais aussi que ces noms de classeurs sont pour le moins horribles mais je dois helas satisfaire la demande du client qui lui ne veut pas supprimer tous ces espaces...

    Merci de votre aide!

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Plusieurs remarques sur ton code:
    Tu travailles avec plusieurs fichiers censés être ouvert simultanément dans la même instance Excel.

    Attention à la déclaration de tes variablest1 est un variant et t5 est un boolean. il faut les déclarer impérativement comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim t1 As Boolean, t5 As Boolean

    Cette partie n'est pas nécessaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    b1 = 0
    b2 = 0
    b3 = 0
    b4 = 0
    b5 = 0
     
    t1 = False
    t2 = False
    t3 = False
    t4 = False
    t5 = False
    Car par défaut les nombres sont à 0 et les boolean sont à False

    Ensuite, utilise plutôt des variables String pour distinguer les fichiers et non un recopiage à chaque fois et utilise aussi souvent que possible les With/ End With.

    Le début de ton code pourrait s'écrire simplement
    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
    Sub Ban()
    Dim Fichier As String, Feuille As String, m As String
    Dim Lr6 As Long, y As Long
    Dim Kw As Integer
     
    Application.ScreenUpdating = False
    With Workbooks("Planung Übersicht.xlsm").Sheets("Instructions")
        Kw = .Cells(10, 7).Value
        m = .Cells(12, 7).Value
        y = .Cells(15, 7).Value
    End With
     
    Fichier = "Bänder    " & y & ".xls"
    Feuille = "KW " & Kw
     
    With Workbooks(Fichier).Worksheets(Feuille)
        Lr6 = .Cells(.Rows.Count, 1).End(xlUp).Row
        For y = Lr6 To 7 Step -1
            If .Cells(y, 7).Interior.ColorIndex = 3 Then
                '...
     
            End If
        Next y
        '....
    End With
    '....
    End Sub
    Ce code pourrait auusi être optimisé en utilisant les variables Objet se rapportant aux fichiers et aux feuilles.

    PS. Vérifie le nom exact des feuille

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 2
    Par défaut
    Effectivement en changeant les noms de classeurs et feuilles en des variables string ca passe tout seul...

    Ca aura été rapide au moins

    Merci de la rapidité et de la perspicacité de ta réponse !

    Bonne journée

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

Discussions similaires

  1. erreur d'execution 3704, ...:objet n'est pas ouvert
    Par cari dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/11/2005, 15h44
  2. [ERREUR D'EXECUTION] Segmentation Fault
    Par CestPasMoi dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 17h38
  3. Réponses: 3
    Dernier message: 03/11/2005, 18h41
  4. [LDAP][Interface Winldap.h] Erreur d'execution
    Par -=Spoon=- dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 10/03/2005, 17h10
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

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