Création macro pour un fichier Excel de 600p et 13000 lignes - VB/VBA/VBS - Programmation
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)
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
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éé ?
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)
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 !
Marsh Posté le 26-03-2009 à 22:38:48
Oui la derniere colonne, c'est cool...
Mais quelle colonne...??
C'est pas la meme a chaque fois ? elle est a calculer ?
Marsh Posté le 27-03-2009 à 03:57:54
SuppotDeSaTante a écrit : Oui la derniere colonne, c'est cool... |
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 ;-)
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é)
Marsh Posté le 27-03-2009 à 12:21:38
ReplyMarsh 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... |
Bonjour à tous,
Oui oui ! Pardon !
Les lignes comportent toutes le même nombre de colonnes.
Navré d'être un boulet
Marsh Posté le 27-03-2009 à 15:55:34
On va y arriver...! Ne desesperons pas ... !
Parcontre, question a 1000€, QUELLE EST CETTE COLONNE ?
Marsh Posté le 28-03-2009 à 00:24:53
SuppotDeSaTante a écrit : On va y arriver...! Ne desesperons pas ... ! |
Tu attends quelle type de réponse ? La reférence exacte de la colonne ?
Marsh Posté le 29-03-2009 à 15:54:24
dje69r te pose une question, t'y réponds pas !
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 !
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 ? ), ça devrait te suffir :
Code :
|
Commenté :
Code :
|
Marsh Posté le 29-03-2009 à 20:38:46
Bonjour
yannjoss a écrit : |
Bah oui forcément.........
Bref Ctplm a répondu a ta question.
Cordialement
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
Marsh Posté le 30-03-2009 à 10:07:43
Dans ton titre tu dis "600p et 13000lignes"..
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
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.
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
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 !
Marsh Posté le 30-03-2009 à 22:04:29
Aaaah, on a enfin la solution à l'énigme 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).
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.
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.)
Marsh Posté le 30-03-2009 à 23:24:39
Version courte encore car c'est l'heure de dormir
Code :
|
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 :
|
Cordialement
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)
Marsh Posté le 31-03-2009 à 19:32:41
Bonsoir,
je ne vois pas où vous passez "onglet" à suppressionlignes.
cordialement
Marsh Posté le 31-03-2009 à 21:41:15
Bonjour,
Je n'ai pas compris la question
Marsh Posté le 31-03-2009 à 22:33:22
Hello seniorpapou
seniorpapou a écrit : Bonsoir, |
Par une variable externe aux sub. Moi aussi j'ai tiqué au debut...
Ctplm a écrit :
|
Cordialement
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 : |
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
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
==================================================================================================
Marsh Posté le 01-04-2009 à 09:25:35
Bonjour,
yannjoss a écrit : |
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 [...]
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 ?
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 !
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.
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