Excel VBA extraire toutes cellules non vide par ligne en txt

Bonjour à tous,

Je suis nouveau dans ce forum et débutant VBA.

J'ai besoin de votre aide pour faire le code suivant qui me semble compliqué.

d'avance merci pour vos réponses et votre indulgence.

Je vous joins un fichier d'exemple avec des copies écran des 2 txt dans 2 onglets distincts (je n'arrive pas à mettre en pièce jointe les .txt)

Voila mon problème:

A partir d'un fichier excel au format toujours identique (fichier de départ.xls), j'ai besoin d'extraire 2 fichiers .txt dans un format spécifique (crédit.txt et débit.txt). ils ne doivent pas reprendre les cellules vide ni les cellules alphanumérique. il doit y avoir une ligne par montant.

Chaque fichier doit reprendre dans l'ordre : le N° de sté, le N° de sous compte sur 5 positions, l'année et le montant sur 12 positions ainsi que 3 décimales.

C'est à dire que à chaque cellule non vide et non alpha, une ligne est créé dans ce format précisé ci-dessus et cette ligne va dans le .txt crédit ou débit en fonction de la cellule D ou C.

J'espère avoir été assez clair et précis. N'hésitez pas à me demander des précisions si nécessaire.

D'avance merci à vous tous.

Salut et bienvenue sur le Forum,

Il est tout à fait possible de joindre des fichiers .txt avec les outils du Forum selon mon essai ci-joint ; peut-être que tes fichiers étaient trop gros (auquel cas tu aurais reçu un message dans ce sens).

Fournis-nous si possible tes deux fichiers .txt, mais uniquement avec 4, 5 lignes représentatives chacun, y compris des lignes alphanumériques à ignorer et crée un ‘Fichier de départ’ sur la base des données de ces fichiers .txt, de manière à ce que l’on comprenne ton souhait.

Cordialement.

22essai-2.txt (29.00 Octets)

Bonjour Yvouille,

Merci pour l'interet porté à mon problème.

Vous avez raison mes fichiers devaient être trop gros.

C'est sur base du fichier xls que sont crée les fichiers txt. Si la colonne est D, les données partent dans le fichier débit.txt. Si la colonne est C, les données partent dans le fichier crédit.txt.

Si dans les cellules en dessous de D ou C, il y a des cellules alphanumériques ou du texte, la création des fichiers txt s'arrete et un message d'erreur doit apparaitre. Il faut absolument que quand j'utilise la macro, je m'assure qu'il n'y a aucune lettre ou texte dans ces cellules. Il ne doit y avoir que des montants donc du numérique.

Le nombres de lignes ou de colonnes n'est jamais le même, il faut donc à chaque fois prendre en compte la dernière ligne et colonne des D et C.

J'espère que ce sera plus clair. N'hésitez pas à me demander des précisions si nécessaire.

En tout cas, un grand merci de votre implication dans mon problème.

Cordialement.

14credit.txt (648.00 Octets)
15debit.txt (432.00 Octets)

Désolé, une lecture un peu trop rapide de ta première demande m’a fait penser que tu voulais exporter des données depuis les fichiers .txt au fichier Excel.

apprentixls a écrit :

.... j'ai besoin d'extraire 2 fichiers .txt dans un format spécifique (crédit.txt et débit.txt)....

Je dois dire à ma décharge que ta phrase ci-dessus prête à confusion.

Je n’ai pas le temps de voir ça immédiatement, mais je m’en occupe d’ici demain.

Cordialement.

Re,

J’ai considéré que tes fichiers de base avaient toujours 3 lignes de titres et que les données à traiter commençaient à la ligne 4. J’ai également supposé qu’il y avait toujours 6 colonnes à traiter aux colonnes E à J, que seul le nombre de lignes à traiter pouvait varier et que les colonnes K et suivantes étaient libres (je les utilise pour ma macro et les efface tout à la fin, tout ça de manière invisible).

Afin que ça fonctionne bien, tu devrais enregistrer mon fichier dans un dossier quelconque puis tu lances la macro par l’intermédiaire du bouton en place dans la colonne K. Il a alors deux fichiers .txt qui sont créés dans le même dossier que celui où tu as placé le fichier de base. L’un sera nommé ‘Crédit’ avec en plus la date du jour, l’autre ‘Débit’ avec la date du jour.

Ces deux fichiers .txt sont refermés en fin de macro. S’il fallait les laisser ouverts, il faudrait modifier le code en conséquence.

Si tu lances une deuxième fois ce code le même jour, les premiers fichiers en place sont effacés irrémédiablement sans avertissement. Si tu devais enregistrer plusieurs fois par jour tes fichiers .txt – ou si tu désirais leur donner un autre titre – il faudrait également adapter le code.

Amicalement.

Bonjour Yvouille,

Je suis vraiment impressionné. Déjà un très grand merci. La solution commence à prendre forme.

Sur les 3 derniers paragraphes, tous me convient parfaitement.

En revanche, je reviens sur le 1er paragraphe :

  • Il y a bien toujours 3 lignes de titre
  • Les données à traiter commence bien à la ligne 4
  • Le nombre ligne peut varié mais les colonnes aussi (maxi 50)

Mais la dernière difficulté est que l’emplacement des colonnes débit et crédit (C) est aléatoire.

Il est vraiment important que soit pris en compte la présence d’un D ou un C dans la ligne 4.

Et que, en fonction du D ou C, le montant aille dans le fichier crédit.txt ou débit.txt.

Excusez-moi de n’avoir pas été assez claire sur cette condition.

Je vous rejoins les fichiers adaptés pour illustrer mon propos.

Encore un grand merci pour votre aide.

Amicalement.

11credit.txt (648.00 Octets)
10debit.txt (432.00 Octets)

Ce n’est pas un gros problème, mais tu aurais effectivement pu me fournir un fichier plus représentatif et des explications plus claires dès le départ

Je regarde ça d’ici demain.

Bonnes salutations.

Bonjour Yvouille,

Je me permets de revenir vers vous pour savoir si vous avez pu avancer concernant la nouvelle condition.

Je me demande également s'il été possible d'afficher un message d'erreur (msgbox) si une cellule des colonnes C ou D serait alpha.

Ce message peut-il indiquer qu'elles sont les cellules avec des lettres ou au moins la 1ère rencontré.

Encore MERCI.

Amicalement.

Salut,

Désolé, je t’ai complètement oublié ce qui ne m’arrive pas souvent.

Bon, c’est quand même un peu la faute aux autres membres qui ne jouent pas le jeu d’indiquer leur sujet comme ‘Résolu’, ce qui me permettrait facilement de repérer dans la liste des messages que je suis lesquels attendent encore une réponse.

A nouveau je dois te demander un délai de 1 à 2 jours car ton problème demande plus que quelques minutes pour le résoudre et là, dans l'immédiat, je n'ai pas le temps.

Merci de patienter encore

Voici ma nouvelle proposition. Tu remarqueras que pour rattraper le retard, je bosse la nuit

Bonjour Yvouille,

Encore un trés grand merci pour votre implication "NOCTURNE" .

C'est juste, à mes yeux, formidable.

Une toute dernière chose, si je peux me permettre, pensez-vous qu'il soit possible d'avoir une msgbox qui indique le nombre de C et de D extrait. Ou 2 msgbox, une qui indique d'abord les C extrait et ensuite une autre qui indique les D extrait ou vice versa (l'ordre n'est pas important).

Si vous pensez que ce n'est pas possible, dites le moi et je mettrai cette discussion en résolu.

En tout cas, un trés trés grand merci.

Trés Amicalement.

apprentixls a écrit :

Une toute dernière chose, si je peux me permettre, pensez-vous qu'il soit possible d'avoir une msgbox qui indique le nombre de C et de D extrait. Ou 2 msgbox, une qui indique d'abord les C extrait et ensuite une autre qui indique les D extrait ou vice versa (l'ordre n'est pas important).

Que veux-tu dire au juste ? Tu voudrais en fait connaitre le nombre de lignes que contiennent les deux fichiers .txt créés, non ?

A te relire.

C'est exactement ca.

C'est vrai que "parfois" je ne suis pas clair

Merci.

Salut,

Dans le fichier ci-joint je ne montre trois manières d’afficher le(s) message(s) voulu(s).

Personnellement je trouve que deux messages l’un après l’autre sera vite énervant

Il existe bien entendu encore 36 autres variantes.

Amicalement.

Bonjour Yvouille,

Vous etes encore trés matinal.

Super, merci pour la msgbox.

Je croyais que, grâce à vous, nous avions atteint le but, ce qui est pratiquement le cas, mais il reste toujours un petit détail .

Quand on lançe la macro avec du texte dans la plage. elle se met en erreur (ce qui était souhaitez). La feuille "wwwww" reste active pour qu'on puisse voir ou se situe l'erreur (super trés bien).

Mais quand on revient sur la feuille "fichiers de départs" et que l'on rectifie l'erreur (enlever le texte), si on relance la macro, elle se remet en erreur car la feuille "wwwww" existe encore.

Je me doute qu'il suffit de la supprimer pour que la relance de la macro passe sans erreur.

Mais est ce qu'il est possible de l'inclure cette action dans la macro (le souci est d'automatisé au maximum )?

N'oubliez pas de dormir

Trés Amicalement.

Salut,

Apparemment j’ai fait une erreur et je n’ai pas enregistré les dernières modifications de mon dernier fichier. Ainsi, au lieu d’avoir les 3 variantes que je t’avais préparées et dont je faisais mention dans mon texte, il n’y avait qu’une seule possibilité de message (par MsgBox)

Comme tu n’en dis rien dans ta réponse, soit tu n’as pas lu mon précédent texte, soit tu n’as pas osé m’en parler, soit tu n’es pas intéressé.

Dans le fichier ci-joint, j’ai remis les 3 variantes proposées.

apprentixls a écrit :

Quand on lançe la macro avec du texte dans la plage. elle se met en erreur (ce qui était souhaitez).

Je suis un peu surpris que tu me dises que c’était souhaité, puisque l’on n’en a jamais parlé

apprentixls a écrit :

La feuille "wwwww" reste active pour qu'on puisse voir ou se situe l'erreur (super trés bien).

C’est vraiment par le plus grand des hasards.

apprentixls a écrit :

Mais quand on revient sur la feuille "fichiers de départs" et que l'on rectifie l'erreur (enlever le texte), si on relance la macro, elle se remet en erreur car la feuille "wwwww" existe encore.

C’est normal que ça se ‘mette en erreur’ puisque je n’ai absolument rien prévu dans un tel cas.

apprentixls a écrit :

Je me doute qu'il suffit de la supprimer pour que la relance de la macro passe sans erreur.

Comme tu as apparemment peur de me fournir ton vrai fichier, il vaudrait mieux que tu me fournisses un fichier vraiment représentatif de ton fichier réel (avec toutes ces possibilités pouvant créer problème) et me dire comment tu voudrais résoudre les problèmes qui en découlent.

apprentixls a écrit :

Mais est ce qu'il est possible de l'inclure cette action dans la macro ….?

Quelle action veux-tu inclure à la macro ????

A te relire.

Bonjour Yvouille,

Bon vous avez raison cela devient confus. Je reprends tout.

Très régulièrement, je dois saisir, dans un logiciel de compta, des données comptable concernant diverses sociétés. Le fichier que je vous ai envoyé est vraiment représentatif du réel si ce n’est que au lieu des années (à partir de la cellule E1, ceux ne sont pas des années mais des noms ou numéros de sociétés) donc pour ces cellules, il faut juste les reprendre comme elles sont.

Je me suis aperçu qu’il est possible d’injecter dans ce logiciel des fichiers .txt au format que je vous ai envoyé. Cela permettrait de gagner en temps et réduire les erreurs de saisies.

Je vais essayer de vous fournir une liste exhaustives des problèmes que je pourrais rencontrer mais, pour info, ce que vous m’avez déjà fourni est vraiment bien.

Voici ce que doit contenir chaque ligne dans les fichiers .txt :

  • Le code société en 7 positions et toujours numérique (à partir de la colonne A et ligne 4)
  • Le sous-compte en 5 positions et toujours numérique (à partir de la colonne C et ligne 4)
  • Le nom ou numéro de la sté représenté dans ce tableau par des années (à partir de la colonne E et ligne 1)
  • Le montant, au millième et sans virgule, de la colonne C (pour le fichier crédit.txt) ou le montant de la colonne D (pour le fichier débit.txt) sur 12 positions (à partir de la colonne E et ligne 4).
Ex : 6000500;00005;2012;000123520330;+;

Les colonnes C et D sont placées de façon aléatoire. ATTENTION, le fichier se présente toujours avec des colonnes C et D mais il peut arriver qu’un fichier n’est que des montants en crédit et aucun en débit ou vice versa. Ces cellules peuvent être à 0 ou vide. Dans ce cas, il ne faut créer qu’un seul .txt (crédit ou débit).

Voila pour le format.

Concernant les problèmes rencontrés :

  • Le nombre de colonnes et de lignes peuvent variés. (problème résolu)
  • Un message doit afficher le nombre de ligne débit ou crédit. L’option d’un seul message est la meilleur. (je l’avez validé dans le message précédent)
  • La plage des montants doit toujours être numérique. Si ce n’est pas le cas, un feuille de rapport d’erreur doit s’ouvrir pour afficher la ligne d’erreur. Apparemment, le hasard a fait que c’est déjà le cas avec la feuille wwwww. C’est parfait.

Maintenant, ce qui pose encore problème :

  • Après avoir corrigé l’erreur, il faut pouvoir relancer la macro. Ce n’est pas possible, pour l’instant, car la feuille wwwww est existante. Donc quand on relance la macro, elle met ce message : « impossible de renommer une feuille comme une autre feuille ».
  • Pour l’instant, s’il n’y a aucun montant dans les colonnes C ou D, il se met en erreur. Cela peut être des cellules à 0 ou vide. Il faudrait que dans ce cas, il ne crée qu’un seul fichier .txt, crédit ou débit. Et la msgbox afficherait 0 ligne en débit ou crédit.

Falcultatif :

- Il peut arriver que le nom de l’onglet ne soit pas toujours le même. Peut on s’assurer, par un contrôle, que l’opérateur a bien appelé sa feuille « fichiers de départs.xls » S’il ne l’a pas fait, une msgbox l’invite à le faire et arrête la macro pour qu’il puisse mettre le bon nom de feuille et ensuite il relance la macro.

Bon voila, je ne vois rien d’autre.

Merci pour votre acharnement.

Salut,

Yvouille a écrit :

Comme tu as apparemment peur de me fournir ton vrai fichier, il vaudrait mieux que tu me fournisses un fichier vraiment représentatif de ton fichier réel (avec toutes ces possibilités pouvant créer problème) et me dire comment tu voudrais résoudre les problèmes qui en découlent.

J’ai lu ton texte qu’en ‘super-diagonale’. Soit tu me fourni le fichier demandé, soit je ne vais pas trop me soucier de ton problème.

Amicalement.

Bonjour Yvouille,

Est ce que je peux vous les envoyer en mail privé ?

Amicalement.

Pourquoi pas

Rechercher des sujets similaires à "vba extraire toutes vide ligne txt"