Copier un fichier .txt sans décallage de cellules
Bonjour,
Je rencontre un problème avec le C/C d'un fichier .txt sur mon classeur excel.
Lorsque je colle le fichier .txt manuellement tout fonctionne correctement, mais lorsque je veux le faire via macro un énorme décalage se fait sur ma page.
J'ai l'impression que le fichier que je colle ne remplit pas les cases de ma feuille, mais en ajoute ce qui fait un décalage. Voici un exemple avec deux photos la 1ère correspond au collage manuel du fichier .txt, la seconde lorsque j'utilise ma macro :
Manuel : je colle mes données et l'interface à droite qui débute sur la colonne U n'est pas décalée
Avec ma macro : tout est décalé, la case qui était avant A1 (COLLER ICI LES DONNEES) se retrouve en N1
Voici la macro que j'utilise pour le copier/coller :
Sub essai()
Dim Fichier
Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Fichier <> False Then
Worksheets("Données brutes").QueryTables.Add("TEXT;" & Fichier, Destination:=Range("A1:M300")).Refresh
Else
MsgBox "Pour importer des données dans Excel, vous devez choisir un fichier texte !"
End If
End Sub
Les fichiers .txt collés vont toujours de A à M et peuvent faire maximum 300 lignes (~200/250 habituellement).
Auriez-vous une idée sur commun empêcher le décallage ?
Devery
J'ai l'impression que c'est le caractère utilisé pour décaler ton texte dans le .txt (tabulation je suppose) qui pose problème...
Je ne vois pas comment éviter ce problème... Mais par contre je vois comment le contourner. Je te prépare un bout de code et je re
Edit : Voila le bout de code qui te permettrait de rapatrier toutes tes données en A en supprimant les colonnes insérées... A améliorer peut-être pour que le chiffre 20 que j'ai mis en fixe devienne variable.
Sub MacroDevery()
'
' MacroDevery Macro
'
For Colonne = 2 To 20
CompteurSuppressions = 0
For Ligne = 1 To 300
'Rappatrie toutes les données de la colonne en cours en A
If Cells(Ligne, Colonne) <> "" Then
Cells(Ligne, 1) = Cells(Ligne, 1) & Cells(Ligne, Colonne)
CompteurSuppressions = CompteurSuppressions + 1
End If
Next Ligne
'Supprime la colonne en cours s'il y a eu des suppressions
If CompteurSuppressions <> 0 Then
Columns(Colonne).Delete
CompteurSuppressions = 0
End If
Next Colonne
'
End Sub
A tester,
Girodo,
Bonjour Girodo, merci pour ta réponse et ta solution !
J'ai testé ta solution, et elle semble fonctionner si j'adapte le nombre de colonne. J'ai également trouvé une solution alternative qui fonctionne :
Sub Bouton2_Cliquer()
Dim Fichier
Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Fichier <> False Then
' crée une requête sur le fichier texte et insère les champs
' dans la feuille "Feuil1" en partant de "A1"
Worksheets("Feuil1").QueryTables.Add("TEXT;" & Fichier, Destination:=Range("A1:M300")).Refresh
Else
MsgBox "Pour importer des données dans Excel, vous devez choisir un fichier texte !"
End If
Worksheets("Feuil1").Range("A1:M300").Copy
ActiveWorkbook.Worksheets("Données brutes").Range("A1").PasteSpecial Paste:=xlPasteValues, Transpose:=False
End Sub
J'ai juste copié mon fichier .txt sur une autre page pour ensuite coller le contenu sur ma page principale
Dans tous les cas je vais voir si je peux pas adapter ton programme à mon cas !
Merci pour ton aide et ton temps
Bonne journée,
Devery