Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2011, 11h19   #1
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : mai 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 15
Points : 10
Points : 10
Par défaut Empécher l'interprétation en date

Bonjour,

Après de nombreuses recherches infructueuses, je me tourne vers vous.
Je vous explique mon problème :
Depuis le code vba j'ouvre un fichier texte plus ou moins important de type :
txt;txt;1-2-3;txt;1-2;txt
2-5;txt;txt;txt;3-4-5;txt;txt
txt;txt,txt;txt;txt
...

pour cela j'utilise un OpenText(), le problème c'est que excel me converti automatiquement les 1-2-3 en date...

J'ai essayé tout un tas de truc comme les mettre entre " " ou ' ', en mettant tous les paramètres qui vont bien à l'opentext mais rien à faire toujours converti en date.
J'ai essayé un range.numberformat qui n'a rien donné non plus car déjà interprété en date avant de prendre en compte le numberformat texte.

Voilà, donc savez vous comment résoudre ça, svp?
(j'espère que je n'ai rien loupé en faisant mais recherche)
Asyoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h37   #2
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Si c'est compatible avec ton code tu peux forcer la chose comme ça:

Code :
1
2
ActiveCell.NumberFormat = "@"
ActiveCell.Value = "1-2-3"
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h43   #3
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : mai 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 15
Points : 10
Points : 10
Merci pour ta réponse mais ça ne peu pas aller dans le sens ou ce 1-2-3 n'est pas une valeur fixe, ces chiffres correspondent à des numéros de réponses donc je peux avoir du 1-2; 2-3; 1-3; 1-2-5; 3-4-5; etc
De plus le format de mon fichier n'est pas fixe au niveau du nombre de lignes et selon les cas pas forcément le même nombre de colonnes d'un fichier à un autre :/
Asyoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h49   #4
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Ce n'était qu'un exemple pour te montrer qu'en changeant le format de la cellule avant de rentrer la valeur, ça ne fait pas la conversion automatique en date.

Donc pour ton cas, si tu sais qu'une colonne va contenir des donnés du type 1-2-3, formate-là en texte juste avant et ça fonctionnera:

Code :
Columns(num_colonne).NumberFormat = "@"
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h55   #5
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

Il te faut forcer le format avant d'entrer la valeur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
Sub ForcerFormatTexte()
 
    Dim Tbl
    Dim Ligne As String
    Dim I As Integer
    Dim J As Integer
 
        'adapter le chemin et nom du fichier
        Open "D:\Test.txt" For Input As #1
 
        Do While Not EOF(1)
 
            Line Input #1, Ligne
 
                'splite dans un tableau
                Tbl = Split(Ligne, ";")
 
                'inscrit les valeurs dans les cellules
                 J = J + 1
 
               For I = 0 To UBound(Tbl)
 
                    Cells(J, I + 1).NumberFormat = "@"
                    Cells(J, I + 1) = Tbl(I)
 
                Next I
 
        Loop
 
        Close #1
 
    Erase Tbl
 
End Sub
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 13h57   #6
Candidat au titre de Membre du Club
 
Homme
Étudiant
Inscription : mai 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 15
Points : 10
Points : 10
Ok merci pour vos réponses.
Et merci Hervé, mais le problème avec ta solution c'est que c'est du cellule par cellule et ça prendra beaucoup trop de temps :-/

Mais je vais voir ce que je peux faire, au pire il faudra que je prenne mon mal en patiente et voir pour bon gros fieldinfo dans le opentext

Ya vraiment rien à faire au niveau du fichier texte pour que ça ne soit pas interprété et qui ne modifierai pas les données (qui seront réutilisées par la suite), donc pas d'espace ou de " ' " devant ma chaine 1-2-3

Ou même dans les paramètres d'excel une option à supprimer pour pas qu'il calcul ?
Asyoshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 17h06   #7
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
J'avais pas fait attention dans ton premier post que tu utilisais la fonction intégrée d'Excel pour importer tes données...du coup je vois 2 issues distinctes à ton problème:

1°/ Si tes fichiers ont un nombre fixe de colonnes, tu peux te servir de l'argument FieldInfo (à moins qu'il soit possible de définir un tableau fieldinfo dont la première dimension est plus grande que le nombre de colonnes de ton fichier, auquel cas il suffit de voir grand...).
Cf. ce que dit l'aide à ce propos:
Citation:
FieldInfo Argument xlColumnDataType facultatif. Tableau contenant des informations de distribution pour des colonnes de données individuelles. L'interprétation dépend de la valeur de DataType. Lorsque les données sont séparées, cet argument est un tableau de tableaux à deux éléments, qui indiquent les options de conversion pour une colonne particulière. Le premier élément est le numéro de la colonne (base 1) et le deuxième élément est l'une des constantes XlColumnDataType indiquant comment la colonne est distribuée.
En déclrant que XlColumnDataType vaut xlTextFormat pour toutes les colonnes, ça devrait fonctionner. Revers de la médaille, tu ne pourrais pas faire d'opérations directement sur tes colonnes sans en changer le 'NumberFormat'.


2°/ Tu codes l'import de tes données cellule par cellule en utilisant des objets TextStream pour lire ton fichier de données. C'est plus long à faire mais au moins tu pourras paramétrer le comportement comme tu l'entends.


A mon avis, le plus adapté serait de faire un mélange des deux: lire la première ligne de ton fichier en utilisant un TextStream pour déterminer le type de chaque colonne, et définir derrière ton tableau de FieldInfo en forçant les colonnes du style 1-2-3 au format 'xlTextFormat'.
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h08.


 
 
 
 
Partenaires

Hébergement Web