Format cellules personnalisé avant import fichier texte

sophievba

XLDnaute Junior
Bonsoir à tous,

Nouvelle dans l'utilisation des macros et sur ce site, je m'adresse à vous car j'ai besoin d'aide dans un projet VBA.

Je ne suis pas super calée et je m'en excuse par avance.

Mon problème est le suivant.
Je souhaite importer un fichier texte dans excel à l'aide d'une macro, mais en ayant au préalable ouvert une feuille de calcul excel pour lui dire que toutes les cellules sont du texte.

La raison à celà est du au fait que si les cellules ne sont pas au préalable en texte toutes celles qui contiennent des nombres restes en nombre et non pas en texte.

Je ne sais pas si cela est réalisable et encore moins si mon "premier" post est bien compréhensible.

N'hésitez pas à me le faire savoir si je ne m'exprime pas bien :)

Merci à l'avance pour votre aide.

PS : J'ai fait une recherche depuis le moteur de ce site et sur google mais je n'ai rien trouvé qui correspond à ma demande.

Merci encore et bonne soirée à tous.
 

sophievba

XLDnaute Junior
Re : Format cellules personnalisé avant import fichier texte

Bonsoir Mercant 76,

Merci pour ta réponse.

J'ai aussi pensé à cette solution mais ça ne résout pas mon problème.

Dans ma macro j'ai mis (ca ne fonctionne pas)

Code:
Columns("A").SpecialCells(xlCellTypeConstants, 23).NumberFormat = "@"

Mais le souci c'est qu'il me m'affiche plus les nombres dans la cellule (ex ; si tu ouvres excel et que tu tapes dans une cellule 123456789123456789 et qu'avant tu n'as pas mis ta cellule au format texte il te met dans la cellule 1,23457E+17 et si tu cliques sur cette cellule dans la barre d'adresse il ne te met pas les chiffres que tu as saisi car il rajoute des 0).

Or le but après avoir modifier mon fichier texte et de le sauvegarder de nouveau en texte et là j'aurais ces deux résultats non-désirés.

Merci beaucoup.
 

Pierrot93

XLDnaute Barbatruc
Re : Format cellules personnalisé avant import fichier texte

Bonjour Sophie et bienvenue parmi nous, re Mercant

Je ne comprends pas trop ton souci, quelle méthode / code utilises-tu pour importer tes données ? un import de données externe ou bien par l'ouverture de fichier texte ? En principe lors de ces 2 méthodes, tu peux convertir tes données dans un format standard "lisible" par excel...

Mets peut être un petit fichier en pièce jointe sans données confidentielles, cela nous aidera à t'aider...

bonne soirée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Format cellules personnalisé avant import fichier texte

Re

pour convertir la colonne A, par exemple
Code:
Range("A:A").TextToColumns Destination:=Range("A1"), DecimalSeparator:=","

dans cet exemple, le séparateur de décimale est une virgule dans ton fichier texte.

@+
 

sophievba

XLDnaute Junior
Re : Format cellules personnalisé avant import fichier texte

Bonsoir Pierrot 93,

Merci pour ton accueil.

Je vous joins un fichier simple que je viens de créer au format texte dans lequel j'ai mis un séparateur espace.
La première cellule, je n'ai pas mis volontairement un grand nombre et dans la seconde cellule un plus long.

Si tu ouvres ce fichier texte (clic droit ouvrir avec excel) tu verra en colonne A le premier nombre (correct car court) de mon fichier texte et en colonne B 1,2346E+17.
Or par le biais d'une macro je souhaite que mon nombre s'affiche entièrement dans la cellule et non pas 1,2346E+17.

Sans même utiliser de macro j'ai vu que mon nombre reste présent seulement quand le format texte et utilisé avant l'import des données de mon fichier texte, or je ne sais pas comment cela s'adapte dans une macro.

Je suis vraiment désolée d'être un peu brouillon.

Merci beaucoup.
 

Pièces jointes

  • TEST.zip
    131 bytes · Affichages: 57
  • TEST.zip
    131 bytes · Affichages: 59
  • TEST.zip
    131 bytes · Affichages: 60

sophievba

XLDnaute Junior
Re : Format cellules personnalisé avant import fichier texte

Pierrot93,

Je parviens à importer mon fichier texte avec une macro dans excel mais mes nombres apparaissent comme ça 1,2346E+17 et non pas en nombre tels qui sont dans mon fichier texte d'origine qui en fait est écrit comme ça 123456789123456789

Pour importer mon fichier texte ça fonctionne avec :

Code:
With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\test.txt", Destination:=Range("A1"))

Je suis vraiment désolée de ne pas m'exprimer correctement.

Merci encore pour votre patience.
 

Cousinhub

XLDnaute Barbatruc
Re : Format cellules personnalisé avant import fichier texte

Bonsoir,

une procédure de Denis Michon :

Code:
Sub Test()
Dim Chemin As String
Dim Fichier As String
Dim Texte As String
Dim Sep As String
Dim X As Long
Dim Sh As Worksheet
Dim A As Long, B As Integer

'-------Variable à définir-------
'où est situé ton fichier
[COLOR="Red"]Chemin = "F:\LeChemin\TEST\"[/COLOR]
'nom de ton fichier texte
Fichier = "Test.txt"
' le séparateur employé dans ton fichier texte
Sep = vbTab
'Le nom de la feuille du classeur où seront copiées les données
Set Sh = ThisWorkbook.Worksheets("Feuil1")
'---------------------------------
B = NombreColonnes(Chemin & Fichier, vbTab)
Sh.Range("A1:B" & B).EntireColumn.NumberFormat = "@"
X = FreeFile
If Dir(Chemin & Fichier) <> "" Then
    Open Chemin & Fichier For Input As #X
    Do While Not EOF(X)
        Input #X, Texte
        If Texte <> "" Then
            t = Split(Texte, Sep)
            A = A + 1
            Sh.Range("A" & A).Resize(, UBound(t, 1) + 1) = t
         End If
    Loop
    Close #X
End If
derlig = Sh.Range("A" & Cells.Rows.Count).End(xlUp)(2).Row
Sh.Range("A" & derlig, "A" & Cells.Rows.Count).EntireRow.Delete
End Sub
'---------------------------------
Function NombreColonnes(Fichier As String, Sep As String)

Dim A As String, B As Integer
Open Fichier For Input As 1
Do While Not EOF(1)
    Input #1, A
    If A <> "" Then
        Exit Do
    End If
Loop
Close
NombreColonnes = _
    Len(A) - Len(WorksheetFunction.Substitute(A, Sep, "")) + 1
End Function

Mets le bon répertoire (ligne en rouge)
 

Pierrot93

XLDnaute Barbatruc
Re : Format cellules personnalisé avant import fichier texte

Re

essaye ainsi :

Code:
Sub test()
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\MesDocs\TEST.txt", Destination:=Range("A1"))
    .TextFilePlatform = xlWindows
    .TextFileParseType = xlFixedWidth
        .TextFileColumnDataTypes = Array(2)
        .Refresh BackgroundQuery:=False
    .Delete
End With
End Sub

fonctionne chez moi...

@+

Edition bonsoir bhbh
 

Cousinhub

XLDnaute Barbatruc
Re : Format cellules personnalisé avant import fichier texte

Re-,

bonsoir, Pierrot :)

Effectivement, cela fonctionne, mais tout est dans une cellule....

Et quand tu fais Données/Convertir, tu retombes sur ces :mad::mad: de E+17...

Pas simple, pour mettre dans des colonnes différentes....

Bonne soirée
 

sophievba

XLDnaute Junior
Re : Format cellules personnalisé avant import fichier texte

Bonsoir BHBH,

J'ai suivi tes consignes, mais quand j'execute la macro il me met une erreur sur cette ligne

Code:
Function NombreColonnes(Fichier As String, Sep As String)

Le message d'erreur est :
erreur de compilation, seuls des commentaires peuvent apparaitre après un End sub, End function ou End property !!!

Qu'est ce que j'ai mal fait ?

Merci.
 

Cousinhub

XLDnaute Barbatruc
Re : Format cellules personnalisé avant import fichier texte

Re-,

Euh, il n'y a pas cette ligne, dans le code proposé....

Tu fais Insertion/Module, et tu colles le code dans ce nouveau module

En ayant pris soin de bien définir le Chemin...
 

sophievba

XLDnaute Junior
Re : Format cellules personnalisé avant import fichier texte

Re,

Alors je suis partie d'un classeur vierge auquel j'ai copié le code fournit, sans mes tests de bout de code :)
Je n'ai plus le message précédent, par contre il me met en jaune la ligne

Code:
NombreColonnes = _
    Len(A) - Len(WorksheetFunction.Substitute(A, Sep, "")) + 1


Qu'elle est le role de cette ligne, svp (afin de comprendre en même temps ce qui ne va pas)?

Merci.
 

Pierrot93

XLDnaute Barbatruc
Re : Format cellules personnalisé avant import fichier texte

Re

dans 2 colonnes, délimiteur latabulation... :

Code:
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\MesDocs\TEST.txt", Destination:=Range("A1"))
        .TextFilePlatform = xlWindows
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTabDelimiter = True
        .TextFileColumnDataTypes = Array(2, 2)
        .Refresh BackgroundQuery:=False
        .Delete
    End With

@+
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 020
dernier inscrit
Mzghal