VBA Excel - Formatage auto des cellules

Fermé
gizmo037 - 18 nov. 2009 à 17:29
 gizmo037 - 19 nov. 2009 à 15:11
Bonjour,

J'écris une macro VBA sous excel destinée à ouvrir un fichier au format cvs, copier certaines colonnes dans un nouveau fichier puis enregistrer ce nouveau fichier au format cvs.

Mon problème est que lorsque j'ai une ligne du type :

0036,ABCD,0002

L'ouverture du fichier dans excel reconnait 0036 et 0002 comme étant numériques et supprime les 0 non significatifs. J'ai essayé de modifier le format des cellules mais cela ne pourra se faire qu'après l'ouverture du fichier et donc après la suppression des zéros.

De plus, mes champs n'ont pas systématiquement la même taille mais il est impératif de conserver les 0. Je voudrais simplement retranscrire le contenu de mes champs du fichier csv, en champs au format texte dans excel.

Merci pour votre aide
A voir également:

11 réponses

Personne ?
0
C'est urgent svp !!!!!!!!!!!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
19 nov. 2009 à 11:53
Salut,
t'affoles pas ça va viendre!!!
Peux tu nous montrer la partie de ton code qui "stocke" ces fameux nombres?
0
Salut,

Le stockage des valeurs se fait à l'ouverture du fichier csv de la manière suivante :

'Sélection du fuchier
Nom_Fic_Dep = Application.GetOpenFilename("Csv Files (*.csv), *.csv", , "Sélection du fichier carburant")

'Ouverture du fichier sélectionné
Set Fic_dep = Workbooks.Open(Filename:=Nom_Fic_Dep)

Si je met un point d'arrêt juste après l'ouverture du fichier je constate que Excel a reconnu les valeurs chiffrées comme des champs numériques et à supprimé les zéros.

Je me demande s'il n'y a pas une façon de désactiver la reconnaissance des formats des cellules pour tout afficher au format texte...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
19 nov. 2009 à 12:50
En cherchant bien, j'ai trouvé ceci Un superbe fichier de Lermite222.
Je me suis permis d'en "construire" un exemple pour moi. Je pense que tu auras là toutes tes réponses...
Je te file le lien ci dessus, étudie ce code attentivement, il est très bien fait. Si tu veux perfectionner ce que tu es en train de faire, analyse la méthode utilisée dans ce code.
Sinon, voici le fichier tout fait si tu n'as pas le courage de le refaire ici
A +
0
Merci pour ta réponse mais je rencontre toujours le même problème. J'avais déja essayé :

.Cells.NumberFormat = "@"

J'obtiens bien des champs texte mais les zéros à gauche des valeurs ne sont pas conservés. En fait je recherche quelque chose du genre :

.Cells.NumberFormat = "00000"

mais avec une taille de champ non fixe car je peux avoir des valeurs de longueurs différentes avec des zéros au début.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
19 nov. 2009 à 13:59
Je vais peut être dire une bêtise car je ne sais pas comment il est mais ne faudrait-il pas formater dans le fichier csv?
0
Voici 3 lignes de mon csv :

1,0000001481,9542 ,9542 , 20,16/09/2009,15:53:00, 20.94, 20.94, 1,04,0000510922,0000000320, ,0000000000,0000000000,0000000000,0000000000, ,4457,00000001.0000

1,0000001482,0441 ,0441 , 21,16/09/2009,16:00:00, 42.84, 42.84, 1,04,0000255603,0067772150, ,0000000000,0000000000,0000000000,0000000000, ,4457,00000001.0000

1,0000001483,9703 ,9703 , 2,16/09/2009,16:40:00, 4.30, 4.30, 1,04,0000605448,0067772150, ,0000000000,0000000000,0000000000,0000000000, ,4457,00000001.0000

Par exemple le champ 0441 est toujours transformé en 441. Ce que je voudrais est conserver les champs tels quels
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
19 nov. 2009 à 14:18
Peux tu joindre ton fichier csv (efface des données et ne laisse que ces 3 lignes si tu le souhaites) en utilisant https://www.cjoint.com/ par exemple
0
voici un extrait du fichier :

https://www.cjoint.com/?ltowVEQNA3
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
19 nov. 2009 à 14:42
J'ai trouvé une piste, je ne sais pas si cela va t'aider... J'ai ouvert ton fichier csv, ajouté une " devant la deuxième ligne, comme ceci :
"1,0000001482,0441 ,0441 , 21,16/09/2009,16:00:00, 42.84, 42.84, 1,04,0000255603,0067772150, ,0000000000,0000000000,0000000000,0000000000, ,4457,00000001.0000

Après enregistrement et fermeture, j'ai lancé la conversion par la macro de Lermitte222 et j'ai obtenu le résultat escompté.
0
Merci !

Je vais pouvoir utiliser cette solution pour résoudre mon problème en modifiant mon cvs avant l'ouverture.
0