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

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

  • fichier test.xlsm
    875.6 KB · Affichages: 5
  • 01_22.zip
    43.4 KB · Affichages: 3
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.

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • fichier test.xlsm
    878.4 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • fichier test V3.xlsm
    878.5 KB · Affichages: 4

simsinaty

XLDnaute Nouveau
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 !
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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é.
20220722_225010.gif
 

Pièces jointes

  • fichier test V4.xlsm
    878.6 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • fichier test V5.xlsm
    879 KB · Affichages: 3

simsinaty

XLDnaute Nouveau
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 !
 

Hasco

XLDnaute Barbatruc
Repose en paix
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

  • PQ-import-csv.xlsm
    299.4 KB · Affichages: 0

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • fichier test V6.xlsm
    880.8 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
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."
 

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 160
Membres
103 147
dernier inscrit
tubaman