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 1004 Non aléatoire mais pas systématique


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Biologiste
    Inscrit en
    Novembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Novembre 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Erreur 1004 Non aléatoire mais pas systématique
    Bonjour à tous, et merci pour ce chouette forum qui m'a déjà permis de faire tellement de chouette choses.

    Je m'arrache les cheveux sur une erreur 1004 qui survient de manière inconstante. J'essaye de faire un formulaire pour des collègues, avec plusieurs macro.

    Une macro qui sert à afficher ou cacher des images (contenant des messages d'aide) en cliquer sur une image (bouton "aide")

    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
    Sub AggrandirImage()
     
     
    Application.ScreenUpdating = False
     
    Col = ThisWorkbook.Worksheets(2).Cells(1, 1).Value
     
    With ThisWorkbook.Worksheets(1)
        AC = .Application.Caller
        G = .Shapes(.Application.Caller).TopLeftCell.Row
     
        ThisWorkbook.Worksheets(1).Activate
     
        For Each Img In ThisWorkbook.Worksheets(1).Shapes
            'Co = Co + 1
            If Img.TopLeftCell.Address = "$" & Col & "$" & G Then
            Set ImgG = Img
            End If
     
        Next Img
     
        If ImgG.Visible = True Then
            ImgG.Visible = False
            Else: ImgG.Visible = True
        End If
     
    End With
     
    End Sub
    Qui fonctionne de prime abord, mais qui génère une erreur 1004 si je veux l'utiliser après avoir déclenché cette macro là qui se déclenche en choisissant un résultat dans un menu déroulant.
    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
    Sub Worksheet_Change(ByVal Target As Range)
     
     
     
       '------ MACRO TYPE DE RESULTATS
    G = Target.Row
     
    If ThisWorkbook.Worksheets(1).Range("AL" & G).Value = "MACRORES" Then
     
    'If Target.Address = "$E$47" Then
     
            DebN = ThisWorkbook.Worksheets(1).Range("AG47").Value
            FinN = ThisWorkbook.Worksheets(1).Range("AH47").Value
            DebT = ThisWorkbook.Worksheets(1).Range("AI47").Value
            FinT = ThisWorkbook.Worksheets(1).Range("AJ47").Value
     
         If Target.Value = "Numérique" Then
            Rows(DebN & ":" & FinN).EntireRow.Hidden = False
            Rows(DebT & ":" & FinT).EntireRow.Hidden = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = True
     
         ElseIf Target.Value = "Codes alpha" Or Target.Value = "Type libre" Then '
            Rows(DebT & ":" & FinT).EntireRow.Hidden = False
            Rows(DebN & ":" & FinN).EntireRow.Hidden = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = False
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = False
         Else
            Rows(DebT & ":" & FinT).EntireRow.Hidden = True
            Rows(DebN & ":" & FinN).EntireRow.Hidden = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = False
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = False
         End If
     
    End If
     
    End Sub
    Si je ferme et que je ré-ouvre le fichier Excel la 1ere macro fonctionne (9/10). J'ai même l'impression qu'elle se remet à fonctionner après un certain temps (sans que je puisse savoir si c'est lié à une quelconque action de ma part ou c'est juste un timer..)
    J'ai ajouté un petit compteur dans la 1ere macro qui monte à 87 (le nombre de shape du fichier) donc la macro balaye les images sans s’arrêter et le message 1004 apparait une fois toute les shapes balayées. J'ai mis un msgbox qui m'affiche l'adresse du coin gauche de toute les shape balayées, et je vois passer celle qui devrait satisfaire la condition sans que ça ne fonctionne... (j'ai rajouté la ligne activate, suite à certains message du forum sans succès).

    Si quelqu'un a une idée lumineuse (ayant "appris" sur le tas, j'ai le pressentiment de faire quelque chose "d'interdit" en jonglant entre ces deux macro)

    Derniere chose : la 1ere macro est dans un module, la seconde est tapée au niveau de Feuil1 (j'y ai accédé en faisant un clic droit + voir le code)

    Cordialement

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Commences tes modules par :
    Option Explicit.


    Autrement dit : avec VBA il n'est pas inutile de typer toutes les variables !

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Biologiste
    Inscrit en
    Novembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Novembre 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour la réponse.

    J'ai essayé et le problème reste identique

    Cordialement

    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
    Option Explicit
    Sub AggrandirImage()
     
     
    Dim Col As String
    Dim AC As Variant
    Dim G As Long
    Dim img As Shape
    Dim ImgG As Shape
     
     
     
    Application.ScreenUpdating = False
     
    Col = ThisWorkbook.Worksheets(2).Cells(1, 1).Value
     
    With ThisWorkbook.Worksheets(1)
        AC = .Application.Caller
        G = .Shapes(.Application.Caller).TopLeftCell.Row
     
        ThisWorkbook.Worksheets(1).Activate
     
        For Each img In ThisWorkbook.Worksheets(1).Shapes
            'Co = Co + 1
            If img.TopLeftCell.Address = "$" & Col & "$" & G Then
            Set ImgG = img
            End If
     
        Next img
     
        If ImgG.Visible = True Then
            ImgG.Visible = False
            Else: ImgG.Visible = True
        End If
     
    End With
     
    End Sub

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Points : 378
    Points
    378
    Par défaut
    Bonjour le fil,

    cette erreur 1004 elle arrive sur quelle ligne ?

    A+

    édit : bon après relecture du code il y a un truc qui me chiffonne

    si l'evenement Worksheet_Change est dans le code de la feuille 1 faut pas t'etonner d'avoir ce type probleme !

    En effet tout ce qui vas ce passer dans cette partie du 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
    If Target.Value = "Numérique" Then
            Rows(DebN & ":" & FinN).EntireRow.Hidden = False
            Rows(DebT & ":" & FinT).EntireRow.Hidden = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = True
     
         ElseIf Target.Value = "Codes alpha" Or Target.Value = "Type libre" Then '
            Rows(DebT & ":" & FinT).EntireRow.Hidden = False
            Rows(DebN & ":" & FinN).EntireRow.Hidden = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = False
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = False
         Else
            Rows(DebT & ":" & FinT).EntireRow.Hidden = True
            Rows(DebN & ":" & FinN).EntireRow.Hidden = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = False
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = False
         End If
    vas produire un changement dans la feuille 1 qui te ramènera sur l'evenement worksheet_Change de la feuil 1 etc etc ... donc au bout d'un moment tu te retrouve avec de l'instabilité !!!

    Pour vérifier on va faire un truc pas très académique mais qui fonctionne. L'objectif est de différencier le premier passage par l’événement worksheet_Change des autres passages

    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
    Dim MacroEncours As Boolean 'cette déclaration de variable doit être placés hors procédure en haut du module
     
    Sub Worksheet_Change(ByVal Target As Range)
     
    If MacroEncours = False Then
         MacroEncours = True  'il est important que cette ligne soit la première du if macroencours
           '------ MACRO TYPE DE RESULTATS
        G = Target.Row
     
        If ThisWorkbook.Worksheets(1).Range("AL" & G).Value = "MACRORES" Then
     
        'If Target.Address = "$E$47" Then
     
                DebN = ThisWorkbook.Worksheets(1).Range("AG47").Value
                FinN = ThisWorkbook.Worksheets(1).Range("AH47").Value
                DebT = ThisWorkbook.Worksheets(1).Range("AI47").Value
                FinT = ThisWorkbook.Worksheets(1).Range("AJ47").Value
     
             If Target.Value = "Numérique" Then
                Rows(DebN & ":" & FinN).EntireRow.Hidden = False
                Rows(DebT & ":" & FinT).EntireRow.Hidden = True
                ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = True
                ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = True
     
             ElseIf Target.Value = "Codes alpha" Or Target.Value = "Type libre" Then '
                Rows(DebT & ":" & FinT).EntireRow.Hidden = False
                Rows(DebN & ":" & FinN).EntireRow.Hidden = True
                ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = False
                ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = False
             Else
                Rows(DebT & ":" & FinT).EntireRow.Hidden = True
                Rows(DebN & ":" & FinN).EntireRow.Hidden = True
                ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = False
                ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = False
             End If
        End if
    End If
     
    End sub

  5. #5
    Membre émérite Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 492
    Points : 2 276
    Points
    2 276
    Par défaut
    Bonjour,
    les ElseIf sont pas simple à gérer en cas de modification du 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
    Select Case Target.Value
        Case "Numérique"
            Rows(DebN & ":" & FinN).EntireRow.Hidden = False
            Rows(DebT & ":" & FinT).EntireRow.Hidden = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = True
        Case "Codes alpha" , "Type libre"   '
            Rows(DebT & ":" & FinT).EntireRow.Hidden = False
            Rows(DebN & ":" & FinN).EntireRow.Hidden = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = False
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = False
        Case Else
            Rows(DebT & ":" & FinT).EntireRow.Hidden = True
            Rows(DebN & ":" & FinN).EntireRow.Hidden = True
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 54").Visible = False
            ThisWorkbook.Worksheets(1).Shapes("case à cocher 55").Visible = False
    End Select

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonjour …

    Pour un changement dans la feuille où est écrite la macro, contenant les 2 Cases à Cocher et la liste de validation, sans If … ElseIf ... End If ni Case… Select, à tester :

    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 Worksheet_Change(ByVal R As Range)
          Dim DN, FN, DT, FT
          Dim B As Boolean
          If R.Address = [AG1].Address Then   'cellule avec liste de validation Numérique; …; …
            If Cells(R.Row, "AL").Value = "MACRORES" Then
              DN = [AG47]: FN = [AH47]
              DT = [AI47]: FT = [AJ47]
      'cas général
              Rows(DT & ":" & FT).EntireRow.Hidden = 1
              Rows(DN & ":" & FN).EntireRow.Hidden = 0
              Me.Shapes("case à cocher 54").Visible = 0
              Me.Shapes("case à cocher 55").Visible = 0
      'cas Numérique
              B = R = "Numérique"
              Rows(DN & ":" & FN).EntireRow.Hidden = Not B
              Rows(DT & ":" & FT).EntireRow.Hidden = B
              Me.Shapes("case à cocher 54").Visible = B
              Me.Shapes("case à cocher 55").Visible = B
      'cas Code alpha" ou "Type libre"
              B = (R <> "Codes alpha" And R <> "Type libre")
              Rows(DT & ":" & FT).EntireRow.Hidden = B
              Rows(DN & ":" & FN).EntireRow.Hidden = Not B
              Me.Shapes("case à cocher 54").Visible = B
              Me.Shapes("case à cocher 55").Visible = B
            End If
        End If
      End Sub

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Biologiste
    Inscrit en
    Novembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Novembre 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci à tous,

    @ Phil free
    J'ai intégré la variable macro en cours. Comme prévu (j'imagine) ça fonctionne la 1ere fois et pas les autres (puisque Macro en cours reste vrai). La seconde macro renvoie toujours le message d'erreur 1004.

    La ligne qui renvoie l'erreur est la ligne 16
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Co = Co + 1
            If Img.TopLeftCell.Address = "$" & Col & "$" & G Then
    Le compteur Co monte à 87 avant que l'erreur se produise

    @ Thumb down
    Merci pour le case select, je ne connaissais pas et c'est plus simple ! La macro fonctionne, mais l'erreur est toujours là

    @Or Donc
    Je ne suis pas familier du tout avec le variable boolean. Je pense avoir compris le principe, mais en l'etat la macro ne fonctionne plus, j'ai enlevé le 1er bloc conditionnel (parce que je comprennais pas a quoi il servait) et ça refonctionne, mais l'erreur est là
    bloc supprimé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If R.Address = [AG1].Address Then   'cellule avec liste de validation Numérique; …; …

    @ Tous....

    J'ai postulé par erreur que la macro plantait parce qu'il n'y avait plus de shapes.. Mais ce n'est pas logique (ça m'a heurté en répondant à Phil free) j'ai rajouté un msgbox pour avoir le nom de la shape quand le compteur était à 87. Et j'ai une shape qui s'appelle dropdown57
    qui fait planter le Img.TopLeftCell.Address...

    La macro vient de se remettre à fonctionner... J'ai relancé la macro de Phil free et la booléenne etait redevenue "fausse"... Ca s'est ré-initialisé ?

    J'y comprends rien

    Cordialement

    Edit : je continue à bidouiller et le nom de la shape s'incremente... dropdown 59 maintenant. le compteur reste à 87... c'est quoi ce dropdown ?

    Edit2 : c'est un menu déroulant... la valeur "numérique" ou "code alpha" était proposée via un menu déroulant (je ne l'ai jamais précisé). J'ai viré la liste déroulante (via la validation de donnée) et je n'ai plus d'erreur....
    Quelqu'un saurait comment faire cohabiter mes macro et ce menu déroulant ?

Discussions similaires

  1. [PDO] PDO.sqlite : update non effectué, mais pas d'erreur
    Par Yosko dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/04/2012, 16h55
  2. [JpGraph] erreur 404 en ligne mais pas en local
    Par Lert Sarin dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/07/2009, 10h45
  3. Réponses: 2
    Dernier message: 27/08/2008, 11h46
  4. mail non envoyé mais pas d'erreur
    Par leam69 dans le forum Linux
    Réponses: 2
    Dernier message: 25/10/2007, 12h12
  5. Erreur sur un poste mais pas sur un autre
    Par hawk² dans le forum Framework .NET
    Réponses: 10
    Dernier message: 27/08/2007, 09h33

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