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 :

code d'erreur: erreur définie par l'application ou par l'objet [XL-2016]


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
    acheteur
    Inscrit en
    Avril 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : acheteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 15
    Par défaut code d'erreur: erreur définie par l'application ou par l'objet
    Bonjour,

    je suis débutant en macros vba Excel alors stp, même si ma structure est probablement très déficiente, j'aurais besoin d'aide pour une macro.

    J'ai créé la macro suivante et elle fonctionne jusqu'à la fin. Le seul problème, c'est que quand elle se termine et rempli les cases qu'elle doit remplir automatiquement parfaitement, il y a ce message d'erreur:

    erreur définie par l'application ou par l'objet. Ce qui fait que je ne peux pas exécuter la suite du programme automatiquement sans avoir à créer un autre bouton.

    Voici la macro, et l'erreur est à cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil7.Cells(LigneGroup, ColonneGroup + 2) = Feuil8.Cells(LigneCodProd, ColonneCodProd + 1)
    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
    Sub Bouton3_Cliquer()
     
     
    Dim LigneGroup As Integer
    Dim ColonneGroup As Double
    Dim LigneCodeProd As Double
    Dim ColonneCodProd As Double
    Dim A As Double
    Dim B As Double
     
    ColonneGroup = 3
    LigneCodProd = 3
    ColonneCodProd = 2
    LigneGroup = 4
    A = 4
    B = 15
    Debut:
    LigneCodProd = 3
    ColonneCodProd = 2
     
     
    For LigneGroup = A To B
     
    If Feuil7.Cells(LigneGroup, ColonneGroup) = Feuil8.Cells(LigneCodProd, ColonneCodProd) Then
    Feuil7.Cells(LigneGroup, ColonneGroup + 2) = Feuil8.Cells(LigneCodProd, ColonneCodProd + 1)
    LigneCodProd = 3
     
     
    ElseIf Feuil7.Cells(LigneGroup, ColonneGroup) <> Feuil8.Cells(LigneCodProd, ColonneCodProd) Then
    LigneCodProd = LigneCodProd + 1
    LigneGroup = LigneGroup - 1
     
    If IsEmpty(LigneCodProd) Then GoTo Cerv
     
     
    End If
    Cerv:
    Next
     
    ColonneGroup = ColonneGroup + 6
    LigneGroup = A
    GoTo Debut
     
     
    If IsEmpty(ColonneGroup) Then GoTo Cerveau
     
    Cerveau:
     End Sub
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 20
    Par défaut
    • Les Dim xxx as double doivent être remplacés par Dim xxx as Long.
    • Le test
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      If Feuil7.Cells(LigneGroup, ColonneGroup) = Feuil8.Cells(LigneCodProd, ColonneCodProd) Then ...
      suivi de:
      ElseIf Feuil7.Cells(LigneGroup, ColonneGroup) <> Feuil8.Cells(LigneCodProd, ColonneCodProd) Then
      est redondant. Un simple Else suffirait
    • Tu modifies la variable LigneGroup a l'intérieur d'une boucle For LigneGroup = A to
    [*]On ne comprend rient à la logique d'une boucle for imbriquée dans la boucle goto Début

    Si tu joignais ton classeur, on pourrait essayer de débugger tout ça.

    HTH,
    --
    AP

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour, Ardus Petus,
    Citation Envoyé par Ardus Petus Voir le message
    Si tu joignais ton classeur, on pourrait essayer de débugger tout ça.
    C'est pas la politique de ce forum, à lire : Fichier joint dans vos discussions

    Bonjour Madro183,

    Quand tu publies du code il faut le baliser avec le bouton # :
    http://club.developpez.com/aidenouve...es/Balises.gif
    Merci de corriger ton premier post.

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Re,

    Aujourd'hui, on n'utilises plus les Goto (ça c'était il y a 40 ans) pour effectuer des boucles ou des sorties de boucle : utilises une boucle Do ... Loop avec While ou Until.
    Ceci d'autant plus que dans ton code tu fait un Goto Debut et qu'entre Debut et ce Goto, il n'y a aucune sortie de boucle.
    Par contre tu utilises 2 Goto parfaitement inutiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    '...
          If IsEmpty(LigneCodProd) Then GoTo Cerv
        End If
    Cerv:
    '...
      If IsEmpty(ColonneGroup) Then GoTo Cerveau
    Cerveau:
    Dans les 2 cas l'étiquette (Cerv ou Cerveau) se trouve immédiatement après sans aucune autre instruction entre le Goto et l'étiquette.

    Je te conseille de lire la pages 46 à 49 concernant les boucles dans cet excellent cours VBA gratuit : Cours complet VBA Excel

  5. #5
    Membre averti
    Homme Profil pro
    acheteur
    Inscrit en
    Avril 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : acheteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 15
    Par défaut re
    Bonjour,

    Concernant les balises à mettre, j'ai bien compris grâce au petit vidéo.

    Pour les autres commentaires, j'ai encore beaucoup à apprendre sur vba excel. Je connais très bien les boucles while, for, etc.. dans d'autres logiciels de programmation. Mais quand je l'ai essayé
    dans VBA Excel, ça n'allait pas aussi bien mettons.. Comme le code est complexe pour moi pour un début dans VBA, j'ai utilisé les GoTo en étant très bien conscient que je faisais du 'patching' vu
    que je ne maîtrise pas bien l'utilisation du while ici.

    Mais, je vais re-modifier ce code en lisant le tutoriel proposé. Il fallait bien que ça me rattrape à la fin ! Merci pour les autres 'hints'

    Bonne journée!

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

Discussions similaires

  1. [XL-2016] Erreur d'excécution 1004 - Erreur définie par l'objet ou l'application
    Par Eddie69003 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/12/2016, 11h26
  2. Réponses: 2
    Dernier message: 20/10/2009, 16h59
  3. Réponses: 2
    Dernier message: 28/10/2008, 09h30
  4. [VBA-E]erreur définie par l'application ou par l'objet
    Par vivelesgnous dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2006, 14h51

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