Macro pour suprimer les lignes à 0

Macro pour suprimer les lignes à 0 - VB/VBA/VBS - Programmation

Marsh Posté le 05-04-2013 à 14:28:42    

Bonjour,
 
Afin de Facilité le travail des comptables, j'ai créer un journal d'écriture automatique.
 
J'ai employé une macro qui dit que si il n'y a pas de montant au débit =0 les lignes doivent être cachée. (visible que la ligne qui doit être entrée)
 
Pour la colonne D6 jusqu'à la ligne D1000
 
cette macro (que j'ai pris sur le web) ne marche plus et je n'ai pas un niveau assez élevé pour la corriger.
 
Auriez-vous un peu de temps pour m'aider ?
 
Je ne sais pas si c'est possible de vous envoyer le fichier excel ?
 
Salutations

Message cité 2 fois
Message édité par anti-spam le 05-04-2013 à 15:48:47
Reply

Marsh Posté le 05-04-2013 à 14:28:42   

Reply

Marsh Posté le 05-04-2013 à 19:48:57    

colle ta macro garçon (ou fille d'ailleurs)


Message édité par boomy29 le 05-04-2013 à 19:49:05

---------------
[Ach] Just dance + cam PS4
Reply

Marsh Posté le 05-04-2013 à 22:22:20    

Elle est partiel, il y en avait deux, une pour montrer les lignes et l'autres pour les cacher
 
voici ce qu'il reste  
 
Option Explicit
 
Sub bb()
Dim DerLig As Integer
 
Application.ScreenUpdating = False
 
DerLig = Range("E1048576" ).End(xlUp).Row
Rows("4:" & DerLig).EntireRow.Hidden = False
End Sub

Reply

Marsh Posté le 06-04-2013 à 08:22:02    

Ca devrait fonctionner...
 

Option Explicit
 
Sub bb()
Dim DerLig As Long
Dim i As Long
 
    'Gèle l'affichage pendant que la macro tourne
    Application.ScreenUpdating = False
     
    'Recherche du n° de ligne de la dernière case remplie dans la colonne E
    'J'utilise Excel 2003, la dernière ligne est 65536
    'Avec les versions plus récentes, c'est peut être plus...
    'DerLig = Range("E1048576" ).End(xlUp).Row
    DerLig = Range("E65536" ).End(xlUp).Row
     
    'On remonte les lignes jusqu'à la ligne 6
    For i = DerLig To 6 Step -1
        'Si la valeur dans la colonne D à la ligne i est égale à 0, alors masquer la ligne
        If Cells(i, 4) = 0 Then Cells(i, 4).EntireRow.Hidden = True
    Next i
     
    'Fin de la macro, on dégèle l'affichage
    Application.ScreenUpdating = True
End Sub


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 06-04-2013 à 08:24:07    

A noter qu'en utilisant les filtres automatiques, on peut parvenir à ce résultat sans faire une macro ;)
 
Ou alors, faire une macro pour automatiser la création du filtre et le filtrage...

Sub cc()
    'Je considère que la ligne 5 contient les entêtes des colonnes
    'Sélection de la ligne 5
    Rows("5:5" ).Select
    'Application du filtre automatique sur la ligne sélectionnée
    Selection.AutoFilter
    'Ajout d'un critère de filtrage : afficher toutes les cellules de la colonne D (Field:=4)
    'qui sont différentes de 0 (Criteria1:="<>0" )
    Selection.AutoFilter Field:=4, Criteria1:="<>0", Operator:=xlAnd
End Sub


Message édité par otobox le 06-04-2013 à 08:53:23

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 06-04-2013 à 10:23:44    

Merci de votre aide, pour la première macro donné, je l'ai modifiée car c'est en colonne E. (erreur de ma part) par contre j'ai 'indication :
Compile error : Only comments may appear after end sub, end fonction, or end. Property
 
La deuxième qui me parait bien plus simple pour mon petit niveau, je voie bien la ligne de filtre qui s'affiche, mais cela ne marche pas également.
Il faut savoir que pour obtenir le numéro de compte ou autre, il y a une formule =+IF('For accounting'!$W3=0,"0",'For accounting'!R3) et non pas du chiffre brut.
 
Pourriez m'aider pour adapter les deux boutons que j'avais, avant j'avais deux boutons qui lançaient les macros.
1 remise à zéro (montrer toutes les lignes) et 2 Créer le journal (cacher les lignes)
 
Edit, j'ai réussi a assigner le bouton 2 à la macro donné plus haut, par contre, je n'arrive pas a créer une macro pour montrer toutes les lignes, je bouton créer la macro et grisé.
 
 :bounce:  j'adors ses macros

Message cité 1 fois
Message édité par anti-spam le 06-04-2013 à 11:38:12
Reply

Marsh Posté le 06-04-2013 à 12:20:26    

il faut peut être déclarer ta macro en public pour pouvoir l'affecter au bouton


---------------
[Ach] Just dance + cam PS4
Reply

Marsh Posté le 06-04-2013 à 13:42:11    

anti-spam a écrit :

cette macro (que j'ai pris sur le web) ne marche plus et je n'ai pas un niveau assez élevé pour la corriger.

anti-spam a écrit :

Elle est partiel, il y en avait deux, une pour montrer les lignes et l'autres pour les cacher
 
voici ce qu'il reste

anti-spam a écrit :

Pourriez m'aider pour adapter les deux boutons que j'avais, avant j'avais deux boutons qui lançaient les macros.

            Et les sauvegardes, cela existe, non ?   :sarcastic:   Sachant que le code est exportable …
 
            Franchement j'ai un doute que ce soit du "bourrage de mou" car le code ne disparaissant pas tout seul,
            ce soit simplement une demande déguisée de la résolution d'un exercice …
 

Reply

Marsh Posté le 06-04-2013 à 13:52:58    

J'ai le fichier du mois dernier, mais la macro ne marche plus, j'ai du rajouter une vingtaine de ligne (nouvelle probabilité) et j'ai le script qui bug, run-time error 13:type mismatch
 
voici les deux macros :
 
Option Explicit
 
Sub aa()
Dim DerLig As Integer, i As Integer
 
Application.ScreenUpdating = False
 
Call bb
 
DerLig = Range("E1048576" ).End(xlUp).Row
 
For i = 4 To DerLig
    If Cells(i, 1) <> "" And Cells(i, 5) = 0 Then Rows(i).EntireRow.Hidden = True
Next
 
End Sub
 
Sub bb()
Dim DerLig As Integer
 
Application.ScreenUpdating = False
 
DerLig = Range("E1048576" ).End(xlUp).Row
Rows("4:" & DerLig).EntireRow.Hidden = False
End Sub
 
et la deuxième  
Option Explicit
 
Sub aa()
Dim DerLig As Integer, i As Integer
 
Application.ScreenUpdating = False
 
Call bb
 
DerLig = Range("E1048576" ).End(xlUp).Row
 
For i = 4 To DerLig
    If Cells(i, 1) <> "" And Cells(i, 5) = 0 Then Rows(i).EntireRow.Hidden = True
Next
 
End Sub
 
Sub bb()
Dim DerLig As Integer
 
Application.ScreenUpdating = False
 
DerLig = Range("E1048576" ).End(xlUp).Row
Rows("4:" & DerLig).EntireRow.Hidden = False
End Sub
 
Sur le fichier de ce mois, je me suis taper toutes les modifications, j'ai essayer de les appliquer sur le nouveau, mais j'ai le même message d'erreur.
 
Je veux bien vous envoyer le fichier excel si cela peu vous éviter de mettre en doute...

Reply

Marsh Posté le 06-04-2013 à 14:18:03    

 
           Ce serait bien d'éditer le dernier post afin d'utiliser l'icône pour mettre le code en forme (icône C après Fixe)
           puis de nous indiquer de quel numéro de ligne l'erreur provient …
 
           Ensuite un code qui fonctionne ne décide pas tout d'un coup de déclencher une erreur !
           Donc il y a eu une modification quelque part, et nous en informer serait un pas de plus vers la solution,
           au minimum un gain de temps non négligeable …
 
           Edit :  les deux macros sont identiques ‼  Non ?


Message édité par Marc L le 06-04-2013 à 14:28:30
Reply

Marsh Posté le 06-04-2013 à 14:18:03   

Reply

Marsh Posté le 06-04-2013 à 16:17:19    

Je suis désolé Marc, comme je l'ai dit depuis le début, la base de la macro est un fichier excel que j'ai pris sur le net, tout était dedans et je l'ai adapté a ma sauce sans m'y connaître en Macro.
Il est difficile d'expliquer quelques choses que l'ont ne connais pas.
Je vais m'arrêter là, c'est vraiment pas agréable de se faire traiter de menteur, ou d'y mettre plein de doute.
Vous pouvez effacer le topic, je ne fais pas partie de l'élite.

Reply

Marsh Posté le 06-04-2013 à 16:33:09    

anti-spam a écrit :

cette macro (que j'ai pris sur le web) ne marche plus et je n'ai pas un niveau assez élevé pour la corriger.

            Cette macro en l'état n'a jamais pu fonctionner, même le mois dernier !
            Et si c'est vraiment le cas, ce dont je doute fort, il serait bien de se poser la question sur ce qui a changé !
            Ce n'est même pas un problème de niveau mais juste une question d'investissement personnel vis à vis du problème rencontré !
 
            Selon le message d'erreur pourtant explicite (surtout si on demande l'aide en français) et par rapport à la ligne déclenchant l'erreur,
            la solution apparaît comme sur le bout du nez rien qu'en consultant l'aide de la propriété  Row  !
            A quoi bon définir explicitement des variables si c'est pour ne pas respecter le type attendu ??
 
            Sinon je n'ai jamais vu un copier / coller du web fonctionner, il faut réfléchir et adapter le code.
 
            Ma conviction est ainsi faite et mon intervention prend donc fin ici …
 

Reply

Marsh Posté le 06-04-2013 à 16:36:37    

anti-spam a écrit :

J'ai le fichier du mois dernier, mais la macro ne marche plus, j'ai du rajouter une vingtaine de ligne (nouvelle probabilité) et j'ai le script qui bug, run-time error 13:type mismatch.

 
anti-spam a écrit :

Je suis désolé Marc, comme je l'ai dit depuis le début, la base de la macro est un fichier excel que j'ai pris sur le net, tout était dedans et je l'ai adapté a ma sauce sans m'y connaître en Macro.
Il est difficile d'expliquer quelques choses que l'ont ne connais pas.
Je vais m'arrêter là, c'est vraiment pas agréable de se faire traiter de menteur, ou d'y mettre plein de doute.
Vous pouvez effacer le topic, je ne fais pas partie de l'élite.

 

Pas la peine de le prendre comme ça.

 

Type mismatch erreur, je pense que si ça ne fonctionne plus, c'est que tu es au delà du nombre de lignes autorisées dans ton fichier. Tu déclare i et Derlig comme variables de type integer, je pense qu'il faut la déclarer comme long :

 

Option Explicit
 
Sub aa()
Dim DerLig As Long, i As Long
 
Application.ScreenUpdating = False
 
Call bb
 
DerLig = Range("E1048576" ).End(xlUp).Row
 
For i = 4 To DerLig
    If Cells(i, 1) <> "" And Cells(i, 5) = 0 Then Rows(i).EntireRow.Hidden = True
Next
 
End Sub
 
Sub bb()
Dim DerLig As Long
 
Application.ScreenUpdating = False
 
DerLig = Range("E1048576" ).End(xlUp).Row
Rows("4:" & DerLig).EntireRow.Hidden = False
End Sub

 

Sinon, pour le message Only comments etc. c'est parce que tu as une ou des lignes de code qui ne sont pas entre sub...end sub ou function... end function.


Message édité par otobox le 06-04-2013 à 16:37:17

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 06-04-2013 à 21:30:02    

Merci otobox, j’apprécie ton aide.
En effet, je dois avoir un problème de longueur de ligne, car ma première ligne ou j'ai quelques choses et la ligne 12, si je lance ta macro, j'ai toujours un message d'erreur mismatch mais si je fais end, il cache les lignes 6 à 11 mais pas les autres.
Si je fais debug, j'ai une partie en jaune :
If Cells(i, 1) <> "" And Cells(i, 5) = 0 Then
 
La réponse est là ? : Sinon, pour le message Only comments etc. c'est parce que tu as une ou des lignes de code qui ne sont pas entre sub...end sub ou function... end function. je ne comprends pas.
 
Merci en tout cas de ton aide

Reply

Marsh Posté le 06-04-2013 à 21:49:59    

Marc L a écrit :

            Cette macro en l'état n'a jamais pu fonctionner, même le mois dernier !
            Et si c'est vraiment le cas, ce dont je doute fort, il serait bien de se poser la question sur ce qui a changé !
            Ce n'est même pas un problème de niveau mais juste une question d'investissement personnel vis à vis du problème rencontré !
 
            Selon le message d'erreur pourtant explicite (surtout si on demande l'aide en français) et par rapport à la ligne déclenchant l'erreur,
            la solution apparaît comme sur le bout du nez rien qu'en consultant l'aide de la propriété  Row  !
            A quoi bon définir explicitement des variables si c'est pour ne pas respecter le type attendu ??
 
            Sinon je n'ai jamais vu un copier / coller du web fonctionner, il faut réfléchir et adapter le code.
 
            Ma conviction est ainsi faite et mon intervention prend donc fin ici …
 


 
Comme quoi c'est possible... j'ai retrouver la macro que j'avais trouvé sur le net...
http://forum.excel-pratique.com/do [...] fa010f4212
Signé le mytho  :)  
 

Reply

Marsh Posté le 07-04-2013 à 11:04:49    

anti-spam a écrit :

Merci otobox, j’apprécie ton aide.
En effet, je dois avoir un problème de longueur de ligne, car ma première ligne ou j'ai quelques choses et la ligne 12, si je lance ta macro, j'ai toujours un message d'erreur mismatch mais si je fais end, il cache les lignes 6 à 11 mais pas les autres.
Si je fais debug, j'ai une partie en jaune :
If Cells(i, 1) <> "" And Cells(i, 5) = 0 Then


OK, alors je crois voir ce que c'est. Sur la ligne 12, une des deux cellules testée ne serait pas vide ? Regarde bien le contenu de ces deux cellules.
Une erreur mismatch c'est une erreur d'incompatibilité de variables. Par exemple, le programme attend une variable de type nombre et il reçoit une chaine de caractères -> il n'aime pas.
Quand tu es en mode debug (avec la ligne qui se met en faune), tu peux regarder quelles sont les valeurs des variables et cellules en laissant, sans cliquer, le curseur sur le nom de la variable : une infobulle te dira ce qu'il y a dedans.

 

En toute logique, si tu n'as pas changé le code et qu'il fonctionnait avant, c'est donc que tu as changé la nature de tes données. Il faudrait que tu jettes un coup d’œil aussi de ce coté là ;)

 
anti-spam a écrit :

Sinon, pour le message Only comments etc. c'est parce que tu as une ou des lignes de code qui ne sont pas entre sub...end sub ou function... end function. je ne comprends pas.

 

Merci en tout cas de ton aide


Citation :

Compile error : Only comments may appear after end sub, end fonction, or end. Property


Erreur de compilation. Seulement les commentaires peuvent apparaitre après end sub, end fonction ou en property.

 

Ca veut dire que tu as des lignes de codes en dehors des lignes Sub NomMacro()  End Sub ou Function NomFonction()  End Function.
Dans l'éditeur, chaque macro est séparée par une ligne continue. Si tu as quelque chose d'écrit entre end sub et la ligne ou end function et la ligne, c'est pas bon (sauf si c'est un commentaire, c'est à dire une ligne qui commence par un ' et qui est colorée en vert). Il faut effacer.
De toutes façons, quand tu lances la macro, ça doit bondir en te sélectionnant le texte qui n'est pas placé au bon endroit dans le module.


Message édité par otobox le 07-04-2013 à 11:06:54

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 07-04-2013 à 15:43:03    

Effectivement, j'ai un #N/A dans la colonne 12 mais même si j'efface manuellement la ligne 6 à 14 par exemple et que je lance la macro, ben les lignes restent ouverte.
 
L'erreur qui s'affiche est : Cells(I,1) = error2042 et Cells(I,5) = "66200"
I1 correspond a quoi, la colonne A ? là j'ai une date, elle a effectivement changé.  
et si I5 correspond à la colonne E, la effectivement, j'ai bien le numéro de compte 66200, mais je ne vois pas ou se trouve le problème, j'ai toujours eu ce numéro de compte.
 
Je dois changer quoi comme format, c'est la macro qui est fausse.
Pour info, en colonne 307, juste après la dernière. j'ai écrit 99999 mais en blanc pour qu'il n'apparaisse pas visuellement, cela me permet de fermer toutes les colonnes vierge entre 6 et 306.
Pas évident de s'exprimer comme cela, il n'y a pas de moyen de partager le fichier ? (j'effacerais les noms de la société)

Reply

Marsh Posté le 07-04-2013 à 15:59:46    

Outbox, j'ai repris ta macro plus haut et j'ai juste corriger la colonne 4 par la 5 soit de :
If Cells(i, 4) = 0 Then Cells(i, 4)
If Cells(i, 5) = 0 Then Cells(i, 5)
C'est la colonne ou j'ai mes numéros de comptes et j'ai ajouter la fin de macro que j'avais.
 
Cela marche parfaitement, j'ai plus de bug, voici ce que cela donne :
 
Option Explicit
 
Sub aa()
Dim DerLig As Long
Dim i As Long
 
    'Gèle l'affichage pendant que la macro tourne
    Application.ScreenUpdating = False
     
    'Recherche du n° de ligne de la dernière case remplie dans la colonne E
    'J'utilise Excel 2003, la dernière ligne est 65536
    'Avec les versions plus récentes, c'est peut être plus...
    'DerLig = Range("E1048576" ).End(xlUp).Row
    DerLig = Range("E65536" ).End(xlUp).Row
     
    'On remonte les lignes jusqu'à la ligne 6
    For i = DerLig To 6 Step -1
        'Si la valeur dans la colonne D à la ligne i est égale à 0, alors masquer la ligne
        If Cells(i, 5) = 0 Then Cells(i, 5).EntireRow.Hidden = True
    Next i
     
    'Fin de la macro, on dégèle l'affichage
    Application.ScreenUpdating = True
End Sub
 
Sub bb()
Dim DerLig As Long
 
Application.ScreenUpdating = False
 
DerLig = Range("E1048576" ).End(xlUp).Row
Rows("5:" & DerLig).EntireRow.Hidden = False
End Sub
 
Je ne comprends encore pas tout, notamment ce que signifie le I, mais je suis ravis de découvrir les macros, cela me donne l'envie d'en apprendre plus et de me facilité la vie dans mon travail.
 
Merci à tous pour votre aide.

Reply

Marsh Posté le 07-04-2013 à 17:33:56    

anti-spam a écrit :

Effectivement, j'ai un #N/A dans la colonne 12 mais même si j'efface manuellement la ligne 6 à 14 par exemple et que je lance la macro, ben les lignes restent ouverte.
 
L'erreur qui s'affiche est : Cells(I,1) = error2042 et Cells(I,5) = "66200"
I1 correspond a quoi, la colonne A ? là j'ai une date, elle a effectivement changé.  
et si I5 correspond à la colonne E, la effectivement, j'ai bien le numéro de compte 66200, mais je ne vois pas ou se trouve le problème, j'ai toujours eu ce numéro de compte.
 
Je dois changer quoi comme format, c'est la macro qui est fausse.
Pour info, en colonne 307, juste après la dernière. j'ai écrit 99999 mais en blanc pour qu'il n'apparaisse pas visuellement, cela me permet de fermer toutes les colonnes vierge entre 6 et 306.
Pas évident de s'exprimer comme cela, il n'y a pas de moyen de partager le fichier ? (j'effacerais les noms de la société)


C'est la cellule I,1 qui pose problème.
I étant le numéro de ligne testée
1 étant la première colonne ("A" )
L'erreur 2042 correspond à une erreur #N/A c'est donc bien la valeur de la cellule qui fait planter le programme puisque la cellule s'attend à une chaine de caractère et elle reçoit une erreur.
A toi de mettre les bonnes valeurs et bonnes formules dans tes cellules pour ne pas avoir d'erreurs, c'est pas normal d'avoir un classeur avec des #N/A ! ;)
 
Sinon, tu la joues bourrin en remplaçant par une chaine vide les erreurs N/A. Juste avant la ligne If Cells(i, 1) <> "" And Cells(i, 5) = 0 Then tu insères cette ligne :

If Cells(i, 1) = err.Number then Cells(i, 1) = ""


Ca remplacera la formule dans la case posant problème par une chaine vide et ça ne fera pas planter la ligne suivante. Mais ça risque de fausser toute ta feuille et les calculs.


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 07-04-2013 à 18:04:27    

anti-spam a écrit :


Je ne comprends encore pas tout, notamment ce que signifie le I, mais je suis ravis de découvrir les macros, cela me donne l'envie d'en apprendre plus et de me facilité la vie dans mon travail.


J'ai appris le vba avec ce livre : http://www.amazon.fr/VBA-pour-nuls [...] 2844279716
Mais aujourd'hui, sur le net on trouve gratuitement des tutoriels bien faits : http://bidou.developpez.com/article/VBA/


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 12-04-2013 à 15:16:49    

Merci, je vais m'acheter le livre.
Excellent week-end

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed