Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1504 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

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

n°1865546
yannjoss
Posté le 25-03-2009 à 04:21:41  profilanswer
 

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
mood
Publicité
Posté le 25-03-2009 à 04:21:41  profilanswer
 

n°1865576
Ptit loup
Quand c'est flou, y'a un loup
Posté le 25-03-2009 à 10:01:21  profilanswer
 

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)

n°1865619
SuppotDeSa​Tante
Aka dje69r
Posté le 25-03-2009 à 11:26:07  profilanswer
 

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 !
n°1865822
yannjoss
Posté le 25-03-2009 à 17:30:55  profilanswer
 

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
n°1866173
SuppotDeSa​Tante
Aka dje69r
Posté le 26-03-2009 à 13:53:09  profilanswer
 

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 !
n°1866320
yannjoss
Posté le 26-03-2009 à 17:03:27  profilanswer
 

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
n°1866433
SuppotDeSa​Tante
Aka dje69r
Posté le 26-03-2009 à 22:38:48  profilanswer
 

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 !
n°1866461
yannjoss
Posté le 27-03-2009 à 03:57:54  profilanswer
 

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
n°1866612
Ptit loup
Quand c'est flou, y'a un loup
Posté le 27-03-2009 à 12:10:59  profilanswer
 

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é)

n°1866616
SuppotDeSa​Tante
Aka dje69r
Posté le 27-03-2009 à 12:21:38  profilanswer
 

:lol: Merci Ptit loup ;)


---------------
Soyez malin, louez entre voisins !
mood
Publicité
Posté le 27-03-2009 à 12:21:38  profilanswer
 

n°1866737
yannjoss
Posté le 27-03-2009 à 15:36:23  profilanswer
 

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
n°1866751
SuppotDeSa​Tante
Aka dje69r
Posté le 27-03-2009 à 15:55:34  profilanswer
 

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


---------------
Soyez malin, louez entre voisins !
n°1866872
yannjoss
Posté le 28-03-2009 à 00:24:53  profilanswer
 

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
n°1867015
yannjoss
Posté le 28-03-2009 à 19:36:22  profilanswer
 

Un petit up ?


---------------
yann
n°1867114
otobox
Maison fondée en 2005
Posté le 29-03-2009 à 15:54:24  profilanswer
 

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
n°1867161
yannjoss
Posté le 29-03-2009 à 18:05:47  profilanswer
 

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
n°1867163
Ctplm
Posté le 29-03-2009 à 18:13:57  profilanswer
 


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

n°1867193
SuppotDeSa​Tante
Aka dje69r
Posté le 29-03-2009 à 20:38:46  profilanswer
 

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 !
n°1867255
yannjoss
Posté le 30-03-2009 à 05:38:34  profilanswer
 

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
n°1867293
Ctplm
Posté le 30-03-2009 à 10:07:43  profilanswer
 


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


---------------
"That kind of information doesn't just grow on trees."
n°1867308
SuppotDeSa​Tante
Aka dje69r
Posté le 30-03-2009 à 10:42:07  profilanswer
 

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 !
n°1867431
yannjoss
Posté le 30-03-2009 à 15:07:03  profilanswer
 

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
n°1867646
otobox
Maison fondée en 2005
Posté le 30-03-2009 à 20:35:46  profilanswer
 

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
n°1867681
yannjoss
Posté le 30-03-2009 à 21:56:21  profilanswer
 

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
n°1867683
Ctplm
Posté le 30-03-2009 à 22:04:29  profilanswer
 


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."
n°1867689
yannjoss
Posté le 30-03-2009 à 22:13:43  profilanswer
 

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
n°1867699
Ctplm
Posté le 30-03-2009 à 22:33:13  profilanswer
 


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."
n°1867730
Ctplm
Posté le 30-03-2009 à 23:24:39  profilanswer
 

 
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."
n°1867773
SuppotDeSa​Tante
Aka dje69r
Posté le 31-03-2009 à 09:31:14  profilanswer
 

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 !
n°1867945
Ptit loup
Quand c'est flou, y'a un loup
Posté le 31-03-2009 à 17:37:08  profilanswer
 

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

n°1867980
seniorpapo​u
Posté le 31-03-2009 à 19:32:41  profilanswer
 

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

n°1868010
Ctplm
Posté le 31-03-2009 à 21:41:15  profilanswer
 


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


---------------
"That kind of information doesn't just grow on trees."
n°1868027
SuppotDeSa​Tante
Aka dje69r
Posté le 31-03-2009 à 22:33:22  profilanswer
 

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 !
n°1868028
SuppotDeSa​Tante
Aka dje69r
Posté le 31-03-2009 à 22:38:27  profilanswer
 

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 !
n°1868045
yannjoss
Posté le 01-04-2009 à 00:38:04  profilanswer
 

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
n°1868050
seniorpapo​u
Posté le 01-04-2009 à 07:08:16  profilanswer
 

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

n°1868095
Rondoudoud​ou
Posté le 01-04-2009 à 09:25:35  profilanswer
 


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 [...]

n°1868329
Ptit loup
Quand c'est flou, y'a un loup
Posté le 01-04-2009 à 15:07:19  profilanswer
 

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 ?

n°1868440
yannjoss
Posté le 01-04-2009 à 18:31:31  profilanswer
 

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
n°1868654
Ptit loup
Quand c'est flou, y'a un loup
Posté le 02-04-2009 à 11:50:54  profilanswer
 

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.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
fonction en PHP4 vèrifiant la validitè d'un fichier XML selon DTD[BATCH] automatiser changement de nom de fichier
API en PHP4 qui crée un fichier XML respectant un DTD donnéeVB Sauvegarder fichier avec droits admin
[Excel & Access] Optimiser la communication entre les deuxPiloter port parallèle avec Excel VBA
Lire et convertir un fichier .luwpb lors creation d'une classe generic en java pour type primitif
[résolu] Création de dossier 
Plus de sujets relatifs à : Création macro pour un fichier Excel de 600p et 13000 lignes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR