Macro pour suprimer les lignes à 0 - VB/VBA/VBS - Programmation
Marsh Posté le 05-04-2013 à 19:48:57
colle ta macro garçon (ou fille d'ailleurs)
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
Marsh Posté le 06-04-2013 à 08:22:02
Ca devrait fonctionner...
Option Explicit |
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() |
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é.
j'adors ses macros
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
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 |
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 ? 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 …
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...
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 ?
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.
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 …
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. |
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 |
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.
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
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 ! |
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
Marsh Posté le 07-04-2013 à 11:04:49
anti-spam a écrit : Merci otobox, j’apprécie ton aide. |
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.
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é)
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.
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. |
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.
Marsh Posté le 07-04-2013 à 18:04:27
anti-spam a écrit : |
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/
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 édité par anti-spam le 05-04-2013 à 15:48:47