Création macro pour un fichier Excel de 600p et 13000 lignes

Création macro pour un fichier Excel de 600p et 13000 lignes - VB/VBA/VBS - Programmation

Marsh Posté le 25-03-2009 à 04:21:41    

Bonjour,
 
Je recherche une macro qui permettrait de supprimer une ligne entière dans Excel sous conditions :
Je m'explique :
 
Un fichier excel relativement imposant : 600p environs et plus de 13000 lignes.
 
C'est un fichier comptable.
le but est de supprimer les lignes dont le total est égal à zéro !
 
J'ai cherché, googeleé, essayer de la creer mais là c'est vraiment pas de mes compétences.
 
Aussi si vous vous avez une idée pour creer cette macro je vous en serai vraiment reconnaissant.
 
Evidemment si besoin de détail pas de souci ...
 
Bien à vous,
 


---------------
yann
Reply

Marsh Posté le 25-03-2009 à 04:21:41   

Reply

Marsh Posté le 25-03-2009 à 10:01:21    

600p => le p ? c'est pour quoi ? colonne ?? pages ?
 
Solution 1 :
tu fais un filtre, et tu n'affiches que les lignes en "zéro", ensuite tu les supprimes... rien de très complexe là dessus, ça se fait même manuellement.
 
Solution 2:
une macro balaie toutes les lignes, et si elle voit une ligne avec "zéro" là où toi tu veux... tu supprimes la ligne.
 
Non ??... ça me paraît être plutôt basique (la taille du fichier n'y change rien)

Reply

Marsh Posté le 25-03-2009 à 11:26:07    

Bonjour
 
+1 pour Ptit loup.
 
La méthode est la meme que pour 2 lignes sur 2 onglets. Seule la durée du traitement va changer.
 
Fais une recherche dans le forum, il me semble que Ptit loup et/ou moi avons deja repondu a une question similaire sur la suppression de ligne en fonction du contenu de la cellule.
 
Cordialement


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 25-03-2009 à 17:30:55    

Bonjour à vous deux,
 
Déjà merci de m'avoir répondu !
 
Le but du jeux est une macro qui évite d'intervenir manuellement au vu du nombre de ligne.
 
J'ai cherché sur le forum , avant de poster même ;-)
Puis avec vos mots clé : suppression de ligne en fonction du contenu de la cellule
(pas plus de 6 mots)
 
Comme je le disais je ne code pas et il est vrai que je cherchais un code de macro "tout fait"
 
C'est une demande exagéréé ?


Message édité par yannjoss le 25-03-2009 à 17:32:14

---------------
yann
Reply

Marsh Posté le 26-03-2009 à 13:53:09    

Non ce n'est pas une demande exageree. C'est juste que réinventer la poudre n'a pas trop "d'interet".
Dans quelle colonne se situe le 0 ? (Valeur qui fera que la ligne est supprimée ou non)
 
Autre question, est-ce que toutes les cellules de ta premiere colonne contiennent une information ? (pour compter c'est plus facile)


Message édité par SuppotDeSaTante le 26-03-2009 à 13:54:30

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 26-03-2009 à 17:03:27    

Bonjour,
 
Le zéro est dans la dernière colonne et c'est la valeur qui fait que la ligne sera supprimée.
 
Les cellules de la première colonne contiennent toutes une information !
 
Merci que dis je , un grand merci !


---------------
yann
Reply

Marsh Posté le 26-03-2009 à 22:38:48    

Oui la derniere colonne, c'est cool... :lol:
Mais quelle colonne...??
C'est pas la meme a chaque fois ? elle est a calculer ?

Message cité 1 fois
Message édité par SuppotDeSaTante le 26-03-2009 à 22:39:09

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-03-2009 à 03:57:54    

SuppotDeSaTante a écrit :

Oui la derniere colonne, c'est cool... :lol:
Mais quelle colonne...??
C'est pas la meme a chaque fois ? elle est a calculer ?


 
Et bien c'est la derniere cellule de la ligne qui contient le résultat
Je vais essayer de t'obtenir l'exemple pour que cela soit + clair
 
merci de me suivre ;-)


---------------
yann
Reply

Marsh Posté le 27-03-2009 à 12:10:59    

la question que se pose dje... c'est est-ce que tes lignes comportent toutes le même nombre de colonnes ou pas...
(parce que sinon... ben un peu bizarre la façon dont excel est utilisé)

Reply

Marsh Posté le 27-03-2009 à 12:21:38    

:lol: Merci Ptit loup ;)


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-03-2009 à 12:21:38   

Reply

Marsh Posté le 27-03-2009 à 15:36:23    

Ptit loup a écrit :

la question que se pose dje... c'est est-ce que tes lignes comportent toutes le même nombre de colonnes ou pas...
(parce que sinon... ben un peu bizarre la façon dont excel est utilisé)


 
Bonjour à tous,
 
Oui oui ! Pardon !
Les lignes comportent toutes le même nombre de colonnes.
 
Navré d'être un boulet  :cry:


---------------
yann
Reply

Marsh Posté le 27-03-2009 à 15:55:34    

On va y arriver...! Ne desesperons pas ... ! :lol:
 
Parcontre, question a 1000€, QUELLE EST CETTE COLONNE ? :d


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 28-03-2009 à 00:24:53    

SuppotDeSaTante a écrit :

On va y arriver...! Ne desesperons pas ... ! :lol:
 
Parcontre, question a 1000€, QUELLE EST CETTE COLONNE ? :d


 
 
Tu attends quelle type de réponse ? La reférence exacte de la colonne ?


---------------
yann
Reply

Marsh Posté le 28-03-2009 à 19:36:22    

Un petit up ?


---------------
yann
Reply

Marsh Posté le 29-03-2009 à 15:54:24    

dje69r te pose une question, t'y réponds pas !


---------------
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 29-03-2009 à 18:05:47    

Ah non pas de ça ! Je réponds à toute ses questions  !
Et si je ne les comprends je lui demande de me les expliquer !


---------------
yann
Reply

Marsh Posté le 29-03-2009 à 18:13:57    


Si j'ai bien compris (c'est quoi p ? c'est quoi la dernière colonne ?  :D ), ça devrait te suffir :
 

Code :
  1. Dim NbLignes, Ligne As Integer
  2. Sub SuppressionLignes()
  3. NbLignes = Range("A65536" ).End(xlUp).Row
  4. For Ligne = 1 To NbLignes
  5. Feuil1.Range("AA" & Ligne).End(xlToLeft).Columns.Select
  6. If Selection.Value = "0" Then
  7.       Feuil1.Range("A" & Ligne).EntireRow.Delete
  8.       Ligne = Ligne - 1
  9.      
  10. End If
  11. Next Ligne
  12. End Sub


 
Commenté :  
 

Code :
  1. Dim NbLignes, Ligne As Integer
  2. Sub SuppressionLignes()
  3. 'Définit le nombre de lignes contenues dans la feuille (la colonne mise en argument doit faire partie du tableau)
  4. NbLignes = Range("A65536" ).End(xlUp).Row
  5. 'On parcourt toutes les lignes du tableau
  6. For Ligne = 1 To NbLignes
  7. 'On sélectionne la dernière colonne remplie de la ligne
  8. 'Adapter la colonne argument ("AA" ) en fonction de la taille du tableau
  9. Feuil1.Range("AA" & Ligne).End(xlToLeft).Columns.Select
  10. 'On trie
  11. If Selection.Value = "0" Then
  12.       Feuil1.Range("A" & Ligne).EntireRow.Delete
  13.       Ligne = Ligne - 1
  14.      
  15. End If
  16. Next Ligne
  17. End Sub

Reply

Marsh Posté le 29-03-2009 à 20:38:46    

Bonjour
 

yannjoss a écrit :


 
 
Tu attends quelle type de réponse ? La reférence exacte de la colonne ?


 
Bah oui forcément.........
 
Bref Ctplm a répondu a ta question.
 
Cordialement


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-03-2009 à 05:38:34    

hello,
 
Merci à tous ! Merci Ctplm !
Je vais tester la macro, je reviens vous dire.
(j'ai pas encore compris la question (p? ) bon ce n'est pas grave


---------------
yann
Reply

Marsh Posté le 30-03-2009 à 10:07:43    


Dans ton titre tu dis "600p et 13000lignes"..


---------------
"That kind of information doesn't just grow on trees."
Reply

Marsh Posté le 30-03-2009 à 10:42:07    

Je pense plus au nombre d'onglets (pages), car la notion de colonne a l'air floue pour lui :p


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-03-2009 à 15:07:03    

Bonjour à tous,
 
Colonne : je visualise !
Ligne : je visualise également !
Onglet : également
 
je reconnais que vous n'avez pas eu une description terrible.
c'est un doc comptable ceci explique cela, plus de news ce soir ou demain matin.
Bien à vous,
Y.


---------------
yann
Reply

Marsh Posté le 30-03-2009 à 20:35:46    

On ne saura pas à quoi correspond le terme : 600p
yannjoss n'ayant pas compris la question :pt1cable:


Message édité par otobox le 30-03-2009 à 20:36:11

---------------
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 30-03-2009 à 21:56:21    

Bonsoir,
 
A y est j'ai compris! Toutes mes excuses ! 600p = 600 feuillets/onglets.
Dans mon esprit 600p = 600 pages.(mais vous l'aviez compris)
 
Sinon je vais pouvoir vous mettre en ligne une partie du document. Et vous donnez les explications nécessaires de chaque colonne et de chaque ligne. Ce n'est pas si aisé pour un béotien tel que moi de savoir ce qu'il faut vous fournir.
@Ctplm
Le code va être testé demain matin.
Donc à demain !  
Et merci encore une fois, à vous tous !


---------------
yann
Reply

Marsh Posté le 30-03-2009 à 22:04:29    


Aaaah, on a enfin la solution à l'énigme  :D C'est-à-dire que c'était un peu étonnant car 600 pages c'est quand même beaucoup pour une utilisation "normale", mais bon.  
Le code est bien sûr à adapter à ton document, là il ne fonctionne que pour un onglet (feuil1).


---------------
"That kind of information doesn't just grow on trees."
Reply

Marsh Posté le 30-03-2009 à 22:13:43    

Aaargh !  
Adapter à mon doc ! C'est bien ce qui m'effrayait !
Je pense qu'avec le doc les choses seront plus claires.
Plus de nouvelles demain vers 14h.


---------------
yann
Reply

Marsh Posté le 30-03-2009 à 22:33:13    


Je pense pas que ça serve à grand chose d'avoir le document, le code tel qu'il est calcule lui-même le nombre de lignes et trouve lui-même l'emplacement de la dernière colonne utilisée.  
L'adaptation n'est pas méchante, il suffit de rajouter une procédure avec un for et un call, une variable Onglet = Feuil & "i" (i € [1, NbOnglets]), et de mélanger un peu tout ça... (version courte car c'est l'heure de manger pour Ctplm.)


---------------
"That kind of information doesn't just grow on trees."
Reply

Marsh Posté le 30-03-2009 à 23:24:39    

 
Version courte encore car c'est l'heure de dormir  :sleep:  
 

Code :
  1. Dim NbLignes, Ligne, i, NbOnglets As Integer
  2. Dim Onglet As String
  3. Sub ParcourtOnglets()
  4. 'A modifier en fonction du nombre d'onglets à parcourir.
  5. 'L'idéal étant de créer un userform permettant de choisir le premier et le dernier onglet souhaités.
  6. NbOnglets = 3
  7. 'On parcourt le classeur
  8. For i = 1 To NbOnglets
  9. Onglet = "Feuil" & i
  10. Call SuppressionLignes
  11. Next i
  12. End Sub
  13. Sub SuppressionLignes()
  14. Sheets(Onglet).Select
  15. NbLignes = Range("A65536" ).End(xlUp).Row
  16. For Ligne = 1 To NbLignes
  17. Sheets(Onglet).Range("AA" & Ligne).End(xlToLeft).Columns.Select
  18. If Selection.Value = "0" Then
  19.       Sheets(Onglet).Range("A" & Ligne).EntireRow.Delete
  20.       Ligne = Ligne - 1
  21.    
  22. End If
  23. Next Ligne
  24. End Sub


---------------
"That kind of information doesn't just grow on trees."
Reply

Marsh Posté le 31-03-2009 à 09:31:14    

Bonjour
 
Plutot que d'utiliser le nom directement, on ne sait pas quel nom il a donné a ses 600 onglets, je tablerais plutot sur un truc de ce genre :
 

Code :
  1. For Each Feuille In Sheets
  2.     Onglet = Feuille.name
  3.     call SuppressionLignes
  4. Next


 
Cordialement


Message édité par SuppotDeSaTante le 31-03-2009 à 09:31:49

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 31-03-2009 à 17:37:08    

et d'ailleurs, on peut aussi se passer du nom, en entrant le "numéro" de l'onglet/feuille de mémoire :
sheets(n)

Reply

Marsh Posté le 31-03-2009 à 19:32:41    

Bonsoir,
je ne vois pas où vous passez   "onglet" à suppressionlignes.
cordialement

Reply

Marsh Posté le 31-03-2009 à 21:41:15    


Bonjour,
 
Je n'ai pas compris la question  :??:


---------------
"That kind of information doesn't just grow on trees."
Reply

Marsh Posté le 31-03-2009 à 22:33:22    

Hello seniorpapou
 

seniorpapou a écrit :

Bonsoir,
je ne vois pas où vous passez   "onglet" à suppressionlignes.
cordialement


 
Par une variable externe aux sub. Moi aussi j'ai tiqué au debut...

Ctplm a écrit :

Code :
  1. Dim NbLignes, Ligne, i, NbOnglets As Integer
  2. Dim Onglet As String
  3. Sub ParcourtOnglets()
  4. [...]



 
Cordialement


Message édité par SuppotDeSaTante le 31-03-2009 à 22:36:33

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 31-03-2009 à 22:38:27    

Hello Ptit loup
 

Ptit loup a écrit :

et d'ailleurs, on peut aussi se passer du nom, en entrant le "numéro" de l'onglet/feuille de mémoire :
sheets(n)


Il me semble que si une feuille est supprimée, le numéro d'index de la feuille suivante le reprend pas, ce qui induit une gestion d'erreur.
 
Cordialement


Message édité par SuppotDeSaTante le 31-03-2009 à 22:38:48

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 01-04-2009 à 00:38:04    

Bonsoir à tous,
 
Excusez moi d'écrire si tard mais je suis rentrer il y a une demi heure à peine.
En premier des nouvelles de la macro, celle de Ctplm  celle ci fut utilisée :
(vous m'apprendrez plus tard comment afficher le code à votre manière par un double clic))
 
Ce fut une réussite !!!
Dés que le solde étude a figuré sur la dernière colonne, la macro a bien fonctionné ramenant le fichier de 13255 à 1198 lignes en un temps record.
 
Pour avoir un document exploitable, il faudrait également supprimer les lignes comportant un solde à -0,01 et -0,02 (arrondis euros).
 
Cela se passe t'il ici ??
 
If Selection.Value = "0" Then
      Feuil1.Range("A" & Ligne).EntireRow.Delete

 
Mais là j'ai deux conditions ! -0,01 et -0,02  
 
Comment l'écriveriez vous ? SVP !
 
En tout cas je ne me serais jamais attendu à tant de collaboration de votre part.
Très sincèrement merci encore.
 
 
==================================================================================================
Code :
 
   1. Dim NbLignes, Ligne As Integer
   2.
   3. Sub SuppressionLignes()Ctplm
   4.
   5.
   6. 'Définit le nombre de lignes contenues dans la feuille (la colonne mise en argument doit faire partie du tableau)
   7. NbLignes = Range("A65536" ).End(xlUp).Row
   8.
   9. 'On parcourt toutes les lignes du tableau
  10. For Ligne = 1 To NbLignes
  11.
  12. 'On sélectionne la dernière colonne remplie de la ligne
  13. 'Adapter la colonne argument ("AA" ) en fonction de la taille du tableau
  14. Feuil1.Range("AA" & Ligne).End(xlToLeft).Columns.Select
  15.
  16. 'On trie
  17. If Selection.Value = "0" Then
  18.
  19.       Feuil1.Range("A" & Ligne).EntireRow.Delete
  20.       Ligne = Ligne - 1
  21.      
  22. End If
  23.
  24. Next Ligne
  25. End Sub
    ======================Puis double clic =  
     
    Code :
Dim NbLignes, Ligne As Integer
Sub SuppressionLignes()
'Définit le nombre de lignes contenues dans la feuille (la colonne mise en argument doit faire partie du tableau)
NbLignes = Range("A65536" ).End(xlUp).Row
'On parcourt toutes les lignes du tableau
For Ligne = 1 To NbLignes
'On sélectionne la dernière colonne remplie de la ligne
'Adapter la colonne argument ("AA" ) en fonction de la taille du tableau
Feuil1.Range("AA" & Ligne).End(xlToLeft).Columns.Select
'On trie
If Selection.Value = "0" Then
      Feuil1.Range("A" & Ligne).EntireRow.Delete
      Ligne = Ligne - 1
     
End If
Next Ligne
End Sub
 
==================================================================================================

Message cité 1 fois
Message édité par yannjoss le 01-04-2009 à 00:38:51

---------------
yann
Reply

Marsh Posté le 01-04-2009 à 07:08:16    

Bonjour,
merci dje69r, je n'l'avions pas vu là.

Reply

Marsh Posté le 01-04-2009 à 09:25:35    


Bonjour,
 

yannjoss a écrit :


Cela se passe t'il ici ??
 
If Selection.Value = "0" Then
      Feuil1.Range("A" & Ligne).EntireRow.Delete

 
Mais là j'ai deux conditions ! -0,01 et -0,02  


 
C'est bien là, il suffit de rajouter les conditions dans le if, à savoir If Selection.Value = "0" Or Selection.Value = "-0
01" Or Selection.Value = "-0.02" Then [...]

Reply

Marsh Posté le 01-04-2009 à 15:07:19    

Je suis très étonné de toutes ces suppressions de lignes pour un document comptable...
Déjà que la suppression des lignes à 0, pas sûr que ça soit légal pour un document comptable... mais alors supprimer les lignes à 1 ou 2 centimes, là on est clairement pas dans le vrai... non ?

Reply

Marsh Posté le 01-04-2009 à 18:31:31    

Et bien qu'est ce qui pourrait te faire croire l'inverse ? Rien ?
Si ?
Ah au fait je précise que c'est un logiciel de comptabilité qui édite un fichier Excel à un moment "t" Et c'est sur ce fichier donc que la macro est appliquée. Le document comptable lui "continue d'exister"
Je suis hyper vexé ! C'est peut être normal de se poser des questions je ne sais pas , mais en tout cas tout est dit dans mon premier post également de ne pas hésiter si vous aviez besoin de détails !
Alors avant que cela soit posé, non je ne touche pas d'argent pour cela !
Du coup, j'en oublie de te remercier >Rondoudoudou !


---------------
yann
Reply

Marsh Posté le 02-04-2009 à 11:50:54    

Ce qui peut me faire croire l'inverse... eh bien c'est que j'ai déjà eu a travailler sur des bilans comptables (d'un point de vue informatique / base de données)... et tout doit être tracé... même les erreurs, et même les lignes à 0... donc voilou.
 
OK, globalement, tu as la solution à ton pb en tout cas.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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