Error 1004 VBA avec GEF acomba

Résolu
christ.lenoir Messages postés 39 Statut Membre -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je fais une macro pour masquer des lignes. Ma macro marche super bien dans un fichier indépendant. Toutefois, lorsque je tente de le faire dans mon fichier excel GEF, cela me fait error 1004 erreur définie par l'application ou par l'objet. Je ne comprends pas pourquoi ...

Voici ma macro :
Sub Macro1()
' pour afficher les lignes
Cells.Select
Selection.EntireRow.Hidden = False

' Pour masquer les lignes

Dim ligne As Integer

For ligne = 10 To 370
If Cells(ligne, 9) = "M" Then
Rows(ligne & ":" & ligne).EntireRow.Hidden = True
End If
Next

End Sub

Le "M" représente une fonction si pour laquelle chaque M, on doit masquer la ligne
Je travail sur Excel 2010

Merci beaucoup d'avance

7 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,
    Ouvrez le VBA
    Ouvrez le module ou il y a le code
    Pour mettre un point d'arret, mettez le curseur souris sur la gauche de la fenetre du code et faite un clic gauche souris. pour l'enlever, clic dessus le point

    1
    1. christ.lenoir Messages postés 39 Statut Membre
       
      C'est comme-ci l'erreur était à chacune des lignes... pourtant dans mon notre excel chacune des lignes fonctionnent très bien .. c'est frustrant !!
      0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,
    Y a une ligne visible en erreur?
    0
    1. christ.lenoir Messages postés 39 Statut Membre
       
      non aucune ...
      0
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > christ.lenoir Messages postés 39 Statut Membre
         
        Re,
        Mettez des points d'arret a toutes les lgnes et lancez. Quand ca s'arrete sans erreur, vous appuyez sur F5 et ainsi de suite
        0
    2. christ.lenoir Messages postés 39 Statut Membre
       
      Je comprends l'idée, mais comment faire pour mettre des points d'arrêt, je ne connais pas ça.
      Merci de m'aider
      0
  3. gérard
     
    Je te propose ce code VBA, qui est plus simple :

    
    Sub Macro1()
      Dim lig As Integer: Application.ScreenUpdating = False
      ' affiche toutes les lignes
      Rows("1:" & Rows.Count).Hidden = False
      ' des lignes 10 à 370, masque les lignes où il y a
      ' un "M" en colonne I
      For lig = 10 To 370
        If Cells(lig, 9) = "M" Then Rows(lig).Hidden = True
      Next lig
    End Sub
    
    

    Ça devrait mieux marcher pour ton fichier excel GEF ;
    et tu devrais l'utiliser aussi pour ton fichier excel
    indépendant.

    ⚠  Si une ligne > 32 767, mettre Dim lig As Long
    au lieu de Dim lig As Integer
     
    0
    1. christ.lenoir Messages postés 39 Statut Membre
       
      Ça marche super bien dans mon excel indépendant, mais encore une fois dans mon excel GEF, l'erreur 1004 apparait...
      j'ai essayé Dim lig as Long aussi et les deux ne fonctionnent pas.

      Merci quand même, il doit y avoir une incompatibilité quelconque avec le GEF où je ne sais pas ...
      Merci encore
      0
    2. gérard > christ.lenoir Messages postés 39 Statut Membre
       
       
      Pour la 1ère étape, as-tu réellement besoin d'afficher toutes les lignes du
      classeur (donc de 1 à 1 048 576) ? si oui, inutile de lire la suite ; sinon :

      En supposant que pour la 1ère étape d'affichage des lignes tu peux te
      contenter de la seule plage des lignes 10 à 370, cette étape peut être
      scindée avec la seconde étape de masquage des lignes 10 à 370 qui
      contiennent "M" en colonne I ; ce qui donne ce nouveau code VBA :

      
      Sub Macro1()
        Dim lig As Integer: Application.ScreenUpdating = False
        ' pour les lignes 10 à 370, masque celles où il y a
        ' un "M" en colonne I et affiche les autres
        For lig = 10 To 370
          Rows(lig).Hidden = Cells(lig, 9) = "M"
        Next lig
      End Sub
      
      

      En faisant ainsi, peut-être que ton erreur 1004 ne se produira plus,
      du fait que l'affichage des lignes est réalisé pour la seule plage des
      lignes 10 à 370 ? (peut-être que les autres lignes ont un contenu
      particulier qui provoque cette erreur 1004 ?)

      Sinon, tu devrais chercher et indiquer ici à quoi correspond cette
      erreur 1004 dans ton GEF excel acomba : libellé exact de l'erreur
      et pour quel(s) cas cette erreur se produit.
       
      0
    3. christ.lenoir Messages postés 39 Statut Membre
       
      Merci gérard.
      Malheureusement, j'ai encore mon error 1004 erreur définie par l'application ou par l'objet, qui se produit et je ne peux savoir ce que c'est puisque je dois faire ctrl + alt + delete pour fermer le excel complètement...

      C'était bien pensé puisqu'effectivement, je n'avais pas besoin d'afficher tous les lignes.
      Je continue à essayer toute sorte de chose et peut-être nous y arriverons !!
      Merci encore.
      0
    4. gérard > christ.lenoir Messages postés 39 Statut Membre
       
       
      Je ne connais pas GEF Excel acomba, mais je viens de penser que l'instruction
      Application.ScreenUpdating = False doit être une instruction spécifique d'Excel,
      donc elle ne doit pas être comprise par GEF Excel ! si oui, ce serait donc elle
      qui provoque l'erreur 1004 ; or tu peux la supprimer sans problème, et je crois
      que ça pourra marcher ainsi :

      
      Sub Macro1()
        Dim lig As Integer
        ' pour les lignes 10 à 370, masque celles où il y a
        ' un "M" en colonne I et affiche les autres
        For lig = 10 To 370
          Rows(lig).Hidden = Cells(lig, 9) = "M"
        Next lig
      End Sub
      
      

      En fait, dans Excel, Application.ScreenUpdating = False sert seulement
      à geler la mise à jour de l'écran pendant l'exécution de la macro, ce qui
      en accélère l'exécution ; et Application est l'objet Excel lui-même, alors
      que ton application est GEF acomba (Générateur d'États Financiers).
       
      0
    5. christ.lenoir Messages postés 39 Statut Membre
       
      Non, ça ne marche pas :( mais lorsque je garde mon entrer enfoncé, je peux voir les lignes ce masquer malgré le message d'erreur, toutefois il va ensuite effacer le nom du compte dans la colonne B ce qui ne faut pas ...
      0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    mettre un simple filtre auto pour masquer tes "M" n'est pas suffisant ?
    C'est prévu pour...
    eric

    En essayant continuellement, on finit par réussir. 
    Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour a tous,

      Son probleme n'est pas avec du VBA Excel mais avec du VBA via GEF Acomba qui apparemment est un peu capricieux, mais je ne connais pas alors....
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour f894009,

      Ah, je pensais que ça se contentait de fournir des données mais qu'on était dans de l'excel pur.
      Je ne connais pas non plus :-)
      eric
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour à tous,

    Je ne connais non plus ton excel GEF mais je pense que la macro ne sais pas où elle se trouve. Vba excel fonctionne a priori par défaut sur la feuille active mais il me semble que tu pourrais essayer de le préciser ainsi avec la macro de gérard.
    Sub Macro1()
      Dim lig As Integer: Application.ScreenUpdating = False
      With ActiveSheet
        ' affiche toutes les lignes
        .Rows("1:" & .Rows.Count).Hidden = False
        ' des lignes 10 à 370, masque les lignes où il y a
        ' un "M" en colonne I
        For lig = 10 To 370
          If .Cells(lig, 9) = "M" Then .Rows(lig).Hidden = True
        Next lig
      End With
    End Sub
    
    0
    1. christ.lenoir Messages postés 39 Statut Membre
       
      Malheureusement, ce n'est pas la raison de l'erreur 1004 ...
      J'y avait déjà également pensé, mais en réessayant ce n'est toujours pas la raison..
      0
    2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonjour christ.lenoir,

      l'autre pour masquer les lignes et ça marche super bien.
      Si ta macro fonctionne sur autre onglet et pas sur le premier, cela vient sans doute de ta façon de l'appeler qui doit être différente car tu es sur le même classeur et l'erreur 1004 est dûe à l'impossibilité de positionnement sur une plage.
      0
  7. christ.lenoir Messages postés 39 Statut Membre
     
    J'essaie maintenant la simple macro de masquer des lignes sans même les afficher et ça ne fonctionne pas. Par contre, lorsque je garde mon entrer enfoncé jusqu'à ce que le message d'erreur s'en va, j'arrive à mes fins...
    Sub Masquer_lignes()
    '

    ' Pour masquer les lignes

    Dim ligne As Integer

    For ligne = 33 To 70
    If Cells(ligne, 9) = "M" Then
    Rows(ligne & ":" & ligne).EntireRow.Hidden = True
    End If
    Next

    End Sub

    L'erreur ce trouve donc la dedans, mais dans un excel indépendant, ça marche super bien ...
    0
  8. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Pas une solution à ton pb mais peut-être le message d'erreur à valider une fois ou deux seulement :
    Sub Macro1()
        Dim lig As Long, pl As Range
        For lig = 10 To 370
            If Cells(lig, 9) = "M" Then
                If pl Is Nothing Then
                    Set pl = Cells(lig, 9)
                Else
                    Set pl = Union(pl, Cells(lig, 9))
                End If
            End If
        Next lig
        ' affiche toutes les lignes
        Rows.Hidden = False
        ' des lignes 10 à 370, masque les lignes où il y a
        ' un "M" en colonne I
        If Not pl Is Nothing Then pl.EntireRow.Hidden = True
    End Sub

    en attendant de trouver la cause réelle...
    eric
    0
    1. christ.lenoir Messages postés 39 Statut Membre
       
      Malheureusement non, toujours ce foutu message d'erreur ...
      merci quand même
      0