Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Conversion csv en xlsm et filtre automatique dernière ligne non vide

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

simsinaty

XLDnaute Nouveau
Bonjour à tous chère communauté.

Voici ma problématique :

1) je souhaite importer le fichier csv dans mon fichier xlsm mais je dois cliquer en cours de traitement pour que la boucle s'arrête. Quel code pour arrêter la boucle ?
2) j'ai mis dans mes filtres un code allant de la ligne 2 à la ligne 2000 par facilité. De ce fait, j'ai des "00000" qui se créent en première colonne une fois la macro lancée. Comment réduire les filtres à la dernière ligne non vide ? je mets le csv en zip car le format csv ne passe pas
3) J'ai mis dans le code des formules n'y faites pas attention

MErci à vous. Ci-joint les fichiers.
 

Pièces jointes

Solution
Re,
En partant de la V4. Avec

VB:
    Columns("J:BF").Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  ' Convertit chaines en nombres
    Columns("A:A").NumberFormat = "@"                                                       ' Colonne A en texte
    Columns("BP:BP").NumberFormat = "@"                                                     ' Colonne BP en texte

Edit : Bonjour Hasco.
Bonsoir Simsinaty,
Sans plonger dans votre code, juste modifié pour répondre à la question.
La dernière ligne non vide est donnée par :
VB:
DL = Range("A65500").End(xlUp).Row
Puis ensuite les plages sont définies par :
Code:
Set Plage = Range("$A$1:$BQ$" & DL)
ou encore directement avec :
Code:
Range("BR2:BR" & DL).Select
On peut accélérer le processus en figeant l'écran au début :
Code:
Application.ScreenUpdating = False
 

Pièces jointes

Bonjour Sylvanu, et merci pour votre retour rapide.
C'est presque ça, mais à la fin du traitement, il me reste les deux dernières lignes avec des matricules à 00000 et un total général. Comment les supprimer ?

MErci infiniment !
 
Re,
Une V3 un peu plus optimisée, sans les innombrables .select qui ralentissent.

Par contre je n'ai pas compris la subtilité des deux lignes qui se suivent :
VB:
Range("BR2").FormulaR1C1 = "=TEXT(RC[-69],""00000"")"
puis on colle les valeurs, avant de faire :
Range("BR2").FormulaR1C1 = "=IFERROR(IF(RC[-2]="""","""",TEXT(RC[-2],""00000"")),"""")"
La première formule n'est elle pas inutile ?
 

Pièces jointes

Bien vu sylvanu ! Alors effectivement la première ligne est une boulette. En revanche sur l'import csv, le problème est que il me faut convertir les ";" en changement de cellule sinon je n'ai qu'une seule conlonne et j'ai un bug sur la ligne Rows("2:" & DL).SpecialCells(xlCellTypeVisible).Delete qui se met en jaune : "erreur d'exécution 1004 pas de cellule correspondantes....
Une idée ?

MErci encore !
 
Bonsoir,
En revanche sur l'import csv, le problème est que il me faut convertir les ";" en changement de cellule sinon je n'ai qu'une seule conlonne
Vous avez testé ma PJ, évidemment que les données sont séparées par cellule.
Pour le second point chez moi ça passe sans souci. Essayez cette V4 j'ai séparé le select du delet, mais ça ne devrait rien changé.
 

Pièces jointes

Bonjour,
Si la PJ précédente pose problème, alors peut être y a t-il incompatibilité entre XL2007 et XL2019 sur le traitement d'un fichier csv, car s'il y a erreur sur DL peut être que la colonne A est vide, et donc que l'import csv n'a pas eu lieu.
Ce qui m'étonnerait beaucoup. Mais bon ....
En PJ V5, je reprends votre lecture du csv ligne par ligne mais travaille en array non dans la feuille, ce qui accélère beaucoup le processus.
Bon courage.
 

Pièces jointes

Sylvanu, merci ! On y est presque, mais....

1) les chiffres contenant des "," sont convertis sous forme de texte or il faut qu'ils soient en chiffres
2) LEs matricules colonne A et BP sont en chiffres or mes formules sont censées les convertir en texte mais cela ne marche pas

Pour tout le reste on est bons !

MErci encore !
 
Bonjour,

Voici une requête power query qui importe, filtre et type les données.
Les champs numériques sont types en double (number) , on peut les typer en Currency pour certains et laisser en double pour le reste.

Le fichier .csv doit être dans le même répertoire.

Cordialement
 

Pièces jointes

Re,
En partant de la V4. Avec

VB:
    Columns("J:BF").Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  ' Convertit chaines en nombres
    Columns("A:A").NumberFormat = "@"                                                       ' Colonne A en texte
    Columns("BP:BP").NumberFormat = "@"                                                     ' Colonne BP en texte

Edit : Bonjour Hasco.
 

Pièces jointes

Précisez au moins de quelle PJ vous parlez !
De la V4 avec conversion directe du csv, ou de la V5 avec votre approche de conversion ?
Un contributeur n'est pas un distributeur de solutions, mais seulement quelqu'un qui essaie d'aider.
Alors vous pourriez répondre aux questions.
Y compris pourquoi "Vous avez testé ma PJ, évidemment que les données sont séparées par cellule."
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…