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 :

Application defined or object defined error


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    oki
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : oki
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut Application defined or object defined error
    bonjour
    j'ai un petit soucis avec ce code
    je reçois ce message application defined or object defined error
    le code a été écrit il y a deux ans et fonction bien jusque là.
    il est sensé mettre la valeur pwo(0) ou pw(1) dans Ji en fonction de Gi
    pouvez vs m'aider je suis débutant en vba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim PWO(2)
    With Params
        PWO(0) = .Range("T39").Value
        PWO(1) = .Range("U39").Value
    End With
    i=2
    While Sheets("Arepartir").Range("A" & i).Text <> ""
        With Sheets("Arepartir")
        .Range("J" & i).Formula = "=IF(G" & i & ">0," & PWO(0) & "," & PWO(1) & ")"
        i=i+1
       End with

  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 akh2017 Voir le message
    je reçois ce message application defined or object defined error
    Sur quelle ligne se produit l'erreur ?
    Qu'est-ce que "Params" ? Si c'est le nom d'une feuille de calcul, as-tu essayé de le remplacer par Worksheets("Params") ?

    Petit détail : ton code pourrait être simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Fin As Long
    Fin = Sheets("Arepartir").Cells(Rows.Count, "A").End(xlUp).Row
    Sheets("Arepartir").Range("J2:J" & Fin).Formula = "=IF(G" & i & ">0," & Params.Range("T39") & "," & Params.Range("U39") & ")"

  3. #3
    Membre averti
    Homme Profil pro
    oki
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : oki
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut
    MERCI POUR TA Réponse l'erreur se produit sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("J" & i).Formula = "=IF(G" & i & ">0," & PWO(0) & "," & PWO(1) & ")"
    oui params est une feuille de calcul
    j'ai essayé avec Worksheets("Params") le problème n'est pas résolu

    peux tu m'expliquer ce que fait la ligne 2 de ton compte je suis débutant
    merci

  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 akh2017 Voir le message
    peux tu m'expliquer ce que fait la ligne 2 de ton code
    Elle recherche la dernière ligne contenant "quelque chose", en partant du bas (Rows.Count, c'est le dernier numéro de ligne possible) parce que si on part du haut, il suffit d'un seul "trou" pour que la recherche n'aille pas jusqu'en bas.
    https://msdn.microsoft.com/fr-fr/lib.../ff839539.aspx

    C'est, en quelque sorte, l'équivalent de ton While Sheets("Arepartir").Range("A" & i).Text <> "".
    A part qu'il n'est pas nécessaire de faire une boucle.

    Du coup, on peut mettre cette formule dans l'ensemble des cellule concernées d'un seul coup.
    C'est plus rapide et plus simple.

    Citation Envoyé par akh2017 Voir le message
    oui params est une feuille de calcul
    N'y aurait-il pas une erreur d'orthographe le nom "Arepartir" ?
    Cette feuille appartient-elle au même classeur que "Params" et celui qui contient la macro ?
    Quelle est la valeur de i quand la macro plante ?

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour Menhir
    N'y aurait-il pas une erreur d'orthographe le nom "Arepartir" ?
    C'est ce que je pensais également, mais :
    1) je ne vois aucune gestion d'erreur dans le code montré
    or
    2) il nous est rapporté que l'erreur est dénoncée en ligne 9 du code.
    Si la feuille "Arepartir" n'existait pas, l'erreur aurait déjà été dénoncée avant, en ligne 7 et le message aurait été différent (genre "l'indice n'appartient pas à la collection")

  6. #6
    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
    Plusieurs indices montrent que le code que tu as mis dans ce forum n'est pas copié/coller de l'éditeur VBA.
    Donc difficile de savoir...
    Et je renouvelle ma question à propos de i.
    As-tu testé le code que je t'ai fourni ?

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    A Menhir :
    Plusieurs indices montrent que le code que tu as mis dans ce forum n'est pas copié/coller de l'éditeur VBA.
    Je le pense également très fortement.
    Amitiés

  8. #8
    Membre averti
    Homme Profil pro
    oki
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : oki
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut
    bonjour
    merci pour vos réponses i=2 quand le code plante
    il n' y a pas d'erreur d'orthographe
    voici le code en entiier j'ai du le simplifié pour vous montrer l'erreur
    l'erreur apparaît à la ligne 162 et aux lignes 163 164 165 166
    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    Sub Qrepartir()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationAutomatic
    'Donne le jour surlequel on peut répartir un produit et le place grâce à la fonction allocQtion
    'Contrainte : Priorité Div et Répartition Techno WorkOrder, quota par division et quantité
    'Reste à ajouter : stock de silicium
    Dim NBa As Double
    Dim Division(10) As String
    Dim PWO(2), PQuota(2), PTechno(2), PQt(2), Pprio(2) As Double
    With Params
        PWO(0) = .Range("T39").Value
        PWO(1) = .Range("U39").Value
        PQuota(0) = .Range("T40").Value
        PQuota(1) = .Range("U40").Value
        PQuota(2) = .Range("V40").Value
        PTechno(0) = .Range("T41").Value
        PTechno(1) = .Range("U41").Value
        PTechno(2) = .Range("V41").Value
        PQt(0) = .Range("T42").Value
        PQt(1) = .Range("U42").Value
        Pprio(0) = .Range("T43").Value
        Pprio(1) = .Range("U43").Value
        Pprio(2) = .Range("V43").Value
        Quantitemaxparjour = .Range("V45").Value
    End With
    'On cherche quel jour doit être réparti
    feuille = ActiveSheet.Name
    jour = 0
    j = 1
    While jour = 0 And j <> 9
    If Sheets(feuille).Cells(10, 11 + j).Locked = False Then
        jour = j
    Else
        j = j + 1
    End If
    Wend
    jour = jour - 1
     
    Week = ActiveSheet.Range("H3").Value
    Sheets("Arepartir").Visible = xlSheetVisible
    Sheets("Arepartir").Cells.ClearContents
    If Week < 10 Then
        ToRecup = "DIV W" & "0" & Week
    Else
        ToRecup = "DIV W" & Week
    End If
     
    Application.Calculation = xlCalculationAutomatic
    Sheets(ToRecup).Activate
    i = 4
    While Range("E" & i).Text = ""
        i = i + 1
    Wend
    first = i
    While Range("E" & i).Text <> ""
        i = i + 1
    Wend
    'On récupère tout les produits à starter à partir de la feuille DIV de la semaine
    produit = ""
        Techno = ""
    Range("E" & first & ":G" & i).Copy
    Sheets("Arepartir").Activate
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Rows("1:1").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    i = 2
    Sheets("Arepartir").Range("A" & 1).FormulaR1C1 = "Produit"
    Sheets("Arepartir").Range("B" & 1).FormulaR1C1 = "Qtt a start"
    Sheets("Arepartir").Range("C" & 1).FormulaR1C1 = "Priorite"
    Sheets("Arepartir").Range("D" & 1).FormulaR1C1 = "Qtt to define"
    Sheets("Arepartir").Range("E" & 1).FormulaR1C1 = "PG"
    Sheets("Arepartir").Range("F" & 1).FormulaR1C1 = "Groupe PG"
    Sheets("Arepartir").Range("G" & 1).FormulaR1C1 = "WorkOrder"
    Sheets("Arepartir").Range("H" & 1).FormulaR1C1 = "Division"
    Sheets("Arepartir").Range("H" & 1).FormulaR1C1 = "Quota"
    Sheets("Arepartir").Range("I" & 1).FormulaR1C1 = "Groupe Div"
    Sheets("Arepartir").Range("J" & 1).FormulaR1C1 = "Point WO"
    Sheets("Arepartir").Range("K" & 1).FormulaR1C1 = "Point Priorité"
    Sheets("Arepartir").Range("L" & 1).FormulaR1C1 = "Point Techno"
    Sheets("Arepartir").Range("M" & 1).FormulaR1C1 = "Point Quota"
    Sheets("Arepartir").Range("N" & 1).FormulaR1C1 = "Point Quantité"
    Sheets("Arepartir").Range("R" & 1).FormulaR1C1 = "Points Totaux"
    'On ajoute la quantité à défirir la techno la division le groupe de techno et le groupe quota
    While Sheets("Arepartir").Range("A" & i).Text <> ""
        produit = Sheets("Arepartir").Range("A" & i).Text
        DIV = ""
        PG = ""
        k = 10
        While Sheets(feuille).Range("Y" & k).Text <> produit And Sheets(feuille).Range("Y" & k).Text <> ""
        k = k + 1
        Wend
        Sheets("Arepartir").Range("D" & i).FormulaR1C1 = Sheets(feuille).Range("U" & k).Text
     
        PG = Sheets(feuille).Range("C" & k).Text
        Sheets("Arepartir").Range("E" & i).FormulaR1C1 = PG
        Sheets("Arepartir").Range("G" & i).FormulaR1C1 = Sheets(feuille).Range("X" & k).Value
        DIV = Sheets(feuille).Range("B" & k).Text
     
        If DIV = "MMS" Then
            j = 16
            While Sheets("Informations_Repartition").Range("AD" & j).Text <> PG And Sheets("Informations_Repartition").Range("AD" & j).Text <> ""
                j = j + 1
            Wend
            DIV = Sheets("Informations_Repartition").Range("AE" & j).Text
        End If
        Sheets("Arepartir").Range("H" & i).FormulaR1C1 = DIV
        DIVQuota = 0
        Select Case DIV
        Case "APG": DIVQuota = 1
        Case "SMD": DIVQuota = 2
        Case "MCD": DIVQuota = 3
        Case "MMY": DIVQuota = 4
     
        End Select
        If DIVQuota <> 0 Then Sheets("Arepartir").Range("I" & i).FormulaR1C1 = DIVQuota
        l = 38
        Groupe = False
        While Params.Range("N" & l).Text <> "" And Groupe = False
        If Params.Range("N" & l).Text = PG Then
            Sheets("Arepartir").Range("F" & i).FormulaR1C1 = Params.Range("P" & l).Value
            Groupe = True
        Else
            l = l + 1
        End If
        Wend
        i = i + 1
    Wend
    'On fait un filtre pour toutes les quantités > 1
        Columns("A:G").Select
        ActiveSheet.Range("$A$1:$G$" & i).AutoFilter Field:=4, Criteria1:=">1", Operator:=xlFilterValues
     
        Range("A1:Z" & i).SpecialCells(xlCellTypeVisible).Copy
        Range("AA1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Range("A1:Z" & i).ClearContents
    ActiveWorkbook.Worksheets("Arepartir").Sort.SortFields.Clear
    Range("AA1:AZ" & i).Copy
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Range("AA1:AZ" & i).ClearContents
     
    i = 2
    Letcapa = Chr(96 + 5 + 2 * jour)
    Lettrestart = Chr(96 + 6 + 2 * jour)
    If jour <> 7 Then
        LetQuota = Chr(96 + 5 + 3 * jour)
        LetReel = Chr(96 + 6 + 3 * jour)
    Else
        LetQuota = "Z"
        LetReel = "AA"
    End If
    'On met les formules pour chaque produit qui calculent les points
    While Sheets("Arepartir").Range("A" & i).Text <> ""
        With Sheets("Arepartir")
        If .Range("C" & i).Text = "" Then
            .Range("K" & i).FormulaR1C1 = 0.15
        Else
            .Range("K" & i).FormulaR1C1Local = Pprio(.Range("C" & i).Value - 1)
        End If
        Sheets("Arepartir").Activate
        .Range("J" & i).Formula = "=IF(G" & i & ">0," & PWO(0) & "," & PWO(1) & ")"
        .Range("L" & i).Formula = "=IF(F" & i & "=0," & PTechno(1) & ",IF('Informations_Repartition'!" & Letcapa & 2 + .Range("F" & i).Value & ">'Informations_Repartition'!" & Lettrestart & 2 + .Range("F" & i).Value & "," & PTechno(0) & "," & PTechno(2) & "))"
        .Range("M" & i).Formula = "=IF(OR(H" & i & "=""APG"" ,H" & i & "=""MCD"",H" & i & "=""SMD"",H" & i & "=""MMY""),IF(ROUNDUP('Informations_Repartition'!" & LetQuota & 16 + .Range("I" & i).Value & ",0)*0.8>'Informations_Repartition'!" & LetReel & 16 + .Range("I" & i).Value & "," & PQuota(0) & ",IF(ROUNDUP('Informations_Repartition'!" & LetQuota & 16 + .Range("I" & i).Value & ",0)*1.005>'Informations_Repartition'!" & LetReel & 16 + .Range("I" & i).Value & "," & PQuota(1) & "," & PQuota(2) & "))," & PQuota(0) & ")"
        .Range("N" & i).Formula = "=IF(D" & i & " =0,0,(" & PQt(0) & "+" & .Range("D" & i).Value & "*" & PQt(1) & "))"
        .Range("R" & i).Formula = "=PRODUCT(J" & i & ":N" & i & ")"
        End With
     
        i = i + 1
    Wend
    pourquoi Range("J2:J" & Fin) et Range("J" & Fin) dans ton code

  9. #9
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    While Sheets("Arepartir").Range("A" & i).Text <> ""
        With Sheets("Arepartir")
        If .Range("C" & i).Text = "" Then
            .Range("K" & i).FormulaR1C1 = 0.15
        Else
            .Range("K" & i).FormulaR1C1Local = Pprio(.Range("C" & i).Value - 1)
        End If
        Sheets("Arepartir").Activate
        .Range("J" & i).Formula = "=IF(G" & i & ">0," & PWO(0) & "," & PWO(1) & ")"
    C'est étrange d'avoir mis un Activate sur une feuille à l'intérieur d'un With sur cette même feuille, tout en continuant après le Activate à se référer au With.
    Je ne comprends pas non plus pourquoi tu utilises FormulaR1C1 pour mettre une simple valeur dans la colonne K.

    Tu pourrais simplifier ça ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets("Arepartir").Activate
    While Range("A" & i).Text <> ""
        Range("K" & i).Value = IIf(Range("C" & i).Text = "", 0.15, Pprio(.Range("C" & i).Value - 1))
        Range("J" & i).Formula = "=IF(G" & i & ">0," & PWO(0) & "," & PWO(1) & ")"
    Si tu as toujours une erreur, ça permettra au moins de mettre hors de cause le With.

    Citation Envoyé par akh2017 Voir le message
    pourquoi Range("J2:J" & Fin) et Range("J" & Fin) dans ton code
    Le Range("J2:J" & Fin) permet d'appliquer la formule à l'ensemble de la zone : colonne J de la ligne 2 à la dernière ligne.
    Comme je te l'ai déjà expliqué, Fin contient le numéro de la dernière ligne utilisée en colonne A.

  10. #10
    Membre averti
    Homme Profil pro
    oki
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : oki
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Par défaut
    j'ai essayé les deux code les erreurs persiste

  11. #11
    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 akh2017 Voir le message
    j'ai essayé les deux code les erreurs persiste
    J'adore quand le problème est décrit avec autant de détails et de précision.

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Combien vaut i en mode debug ?
    Je ne vois d'ailleurs pas où tu as déclaré et typé i

    EDIT : et pendant qu'on y est :
    tu dis que la 1ère erreur intervient en ligne 162, où est écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("J" & i).Formula = "=IF(G" & i & ">0," & PWO(0) & "," & PWO(1) & ")"
    Bien. Dis-nous alors combien valent, en mode debug, les variables suivantes :
    i
    PWO(0)
    PWO(1)
    on y verra peut-être alors plus clair

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/06/2014, 15h55
  2. [XL-2010] Run time error 1004 Application defined or object defined
    Par AmbreM dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/09/2013, 18h00
  3. Application-defined or object-defined error
    Par Vivi127 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/09/2011, 12h42
  4. Réponses: 1
    Dernier message: 20/02/2010, 08h03
  5. [XL-2003] Error 1004 - Application-defined or object-defined
    Par DaRisK dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/05/2009, 19h49

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