(Résolu) Ouvrir un fichier texte, sélectionner le texte et le copier en mémoire

  • Initiateur de la discussion Initiateur de la discussion LBi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

LBi

XLDnaute Junior
Bonjour,
Je voudrais automatiser une étape de saisie avec une macro pour ouvrir un fichier txt grâce à l'explorateur Windows, puis sélectionner tout le texte du fichier le copier pour pouvoir l'intégrer dans ma macro1.
Pour l'instant, j'ouvre manuellement un fichier txt puis je sélectionne tout (CtrlA) je le copie (CtrlC) et j'appuie sur le bouton "Saisie" qui lance la macro1, puis je vais sur la ligne 4 Hémoglobine et je "colle les valeurs" en F4 pour le premier tableau.
Un autre souhait si cela est possible serait de pouvoir coller automatiquement le résultat dans la cellule de la ligne 4 de la première colonne vide F,J,N,R....
Merci
Je joins le fichier texte exemple et le tableau biologique
 

Pièces jointes

Dernière édition:
Bonsoir le fil, le forum

Une première esquisse (pour ce qui est de l'ouverture du fichier TXT)
VB:
Sub OuvrirFichierTXT()
Dim Chemin$, NomFichier$
With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Sélectionner votre fichier, svp": .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "Fichiers TXT", "*.txt", 1: .FilterIndex = 1
    .InitialView = msoFileDialogViewProperties
        If .Show = -1 Then
        Chemin = .SelectedItems(1)
        'NomFichier = Dir(.SelectedItems(1))
        Workbooks.OpenText Chemin, StartRow:=6, DataType:=xlDelimited, Other:=True, OtherChar:="|"
        Else
        MsgBox "Vous n'avez pas sélectionné de fichier!", vbCritical, "ERREUR"
    End If
End With
End Sub
 
Bon comment vous dire ... Je voudrais que la macro, copie le texte du fichier txt ( super la boite de dialogue pour sélectionner le bon fichier ) en mémoire ( sans créer un fichier excel ) pour que la macro 1 puisse la traiter.
J’espère avoir été assez clair
Merci
 
Re

Je te laisse tester et me redire si cela te convient mieux ? 😉
VB:
Sub OuvrirFichierEtUnPeuPlus()
Dim Chemin$, NomFichier$
ThisWorkbook.Sheets("Entrée").Cells.Clear
With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Sélectionner votre fichier, svp": .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "Fichiers TXT", "*.txt", 1: .FilterIndex = 1
    .InitialView = msoFileDialogViewProperties
        If .Show = -1 Then
        Chemin = .SelectedItems(1)
        'NomFichier = Dir(.SelectedItems(1))
        Application.ScreenUpdating = False
        Workbooks.OpenText Chemin, StartRow:=6, DataType:=xlDelimited, Other:=True, OtherChar:="|"
        ActiveWorkbook.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("Entrée").Range("A1")
        Application.CutCopyMode = False
        ThisWorkbook.Sheets("Entrée").Columns("A:B").Delete
        ActiveWorkbook.Close False
        Else
        MsgBox "Vous n'avez pas sélectionné de fichier!", vbCritical, "ERREUR"
    End If
End With
End Sub
 
Bonjour ,
Quand j’exécute la macro, les formules dans "Nouvelle" indiquent !#REF! c'est je crois, le fait de supprimer les 2 premières colonnes dans "Entrée"
Je suis passé par "Feuil1" pour y remédier et ça fonctionne.
Je pense qu'il doit y avoir une solution sans passer par "Feuil1"

Pour mon second problème : coller automatiquement le résultat dans la cellule de la ligne 4 de la première colonne vide F,J,N,R....
Il faudrait peut être pouvoir tester la première cellule fusionnée vide ( Date d'examen ligne 3 colonnes FGHI )
Merci de vos contributions à ce projet qui va alléger grandement la saisie de données biologiques que l'on faisait jusque là manuellement.


Sub Macro1()
Dim Chemin$, NomFichier$
ThisWorkbook.Sheets("Entrée").Cells.Clear
ThisWorkbook.Sheets("Feuil1").Cells.Clear
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Sélectionner votre fichier, svp": .AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Fichiers TXT", "*.txt", 1: .FilterIndex = 1
.InitialView = msoFileDialogViewProperties
If .Show = -1 Then
Chemin = .SelectedItems(1)
'NomFichier = Dir(.SelectedItems(1))
Application.ScreenUpdating = False
Workbooks.OpenText Chemin, StartRow:=6, DataType:=xlDelimited, Other:=True, OtherChar:="|"
ActiveWorkbook.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("Feuil1").Range("A1")
Application.CutCopyMode = False
ThisWorkbook.Sheets("Feuil1").Columns("A:B").Delete
ActiveWorkbook.Close False
Else
MsgBox "Vous n'avez pas sélectionné de fichier!", vbCritical, "ERREUR"
End If
End With
Sheets("Feuil1").Select
Columns("A:O").Select
Selection.Copy
Sheets("Entrée").Select
Columns("A:A").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Nouvelle").Select
Range("F1:I120").Select
Selection.Copy
Sheets("T1").Select
End Sub
 
Dernière édition:
Bonsoir le fil, le forum

@LBi
Apparemment tu n'as compris que la macro du message#5 fait aussi ce que faisait ta macro1
(à savoir copier les données du fichier TXT dans la feuille Entrée)
Donc évidemment, il ne fallait pas ensuite ajouter le code de ta macro1 dans le mien.

Refais le test, lances ma macro* du message#5 et ensuite va voir le résultat en feuille Entrée.
(*telle que je l'ai postée)
 
Bonsoir le fil, le forum

@LBi
Pas besoin de la feuille " Feuil1" 🙄
(Ni de tous ces "affreux" Select 😉 )
VB:
Sub OuvrirFichierEtUnPeuPlusEtSansPasserParLaFeuille1()
Dim Chemin$, NomFichier$, t
t = Array(Array(1, 9), Array(2, 9), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1))
ThisWorkbook.Sheets("Entrée").Cells.Clear
With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Sélectionner votre fichier, svp": .AllowMultiSelect = False: .Filters.Clear: .Filters.Add "Fichiers TXT", "*.txt", 1
    .FilterIndex = 1: .InitialView = msoFileDialogViewProperties
        If .Show = -1 Then
        Chemin = .SelectedItems(1): Application.ScreenUpdating = False
        Workbooks.OpenText Chemin, StartRow:=6, DataType:=xlDelimited, Other:=True, OtherChar:="|", FieldInfo:=t
        ActiveWorkbook.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("Entrée").Range("A1")
        Application.CutCopyMode = False: ActiveWorkbook.Close False
        Else
        MsgBox "Vous n'avez pas sélectionné de fichier!", vbCritical, "ERREUR"
    End If
End With
End Sub
 
Merci
j'ai juste rajouté un peu de code pour pouvoir coller le résultat dans la feuille "T1"
Et pour mon second problème : coller automatiquement le résultat dans la cellule de la ligne 4 de la première colonne vide F,J,N,R....
Il faudrait peut être pouvoir tester la première cellule fusionnée vide ( Date d'examen ligne 3 colonnes FGHI ) ?
merci encore de votre contribution🙂


Sub Macro1()

Dim Chemin$, NomFichier$, t
t = Array(Array(1, 9), Array(2, 9), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1))
ThisWorkbook.Sheets("Entrée").Cells.Clear
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Sélectionner votre fichier, svp": .AllowMultiSelect = False: .Filters.Clear: .Filters.Add "Fichiers TXT", "*.txt", 1
.FilterIndex = 1: .InitialView = msoFileDialogViewProperties
If .Show = -1 Then
Chemin = .SelectedItems(1): Application.ScreenUpdating = False
Workbooks.OpenText Chemin, StartRow:=6, DataType:=xlDelimited, Other:=True, OtherChar:="|", FieldInfo:=t
ActiveWorkbook.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets("Entrée").Range("A1")
Application.CutCopyMode = False: ActiveWorkbook.Close False
Sheets("Nouvelle").Select
Range("F1:I120").Select
Selection.Copy
Sheets("T1").Select

Else
MsgBox "Vous n'avez pas sélectionné de fichier!", vbCritical, "ERREUR"
End If
End With
End Sub
 
Re

Bis répétita...
On peut se passer des Select (qui ralentisse l’exécution du code) 🙄
Sheets("Nouvelle").Select
Range("F1:I120").Select
Selection.Copy
Sheets("T1").Select
peut simplement s'écrire
Sheets("Nouvelle").Range("F1:I120").Copy
Sheets("T1").Range("F4").PasteSpecial xlValues
 
Re

@LBi
Qu'à cela ne tienne !...😉
Il suffit de parcourir les archives du forum pour trouver des discussions où l'on cause du moyen de déterminer la première cellule non vide d'une colonne.
(Souvent on y évoquera de commencer la recherche vers le bas, on pourra lire ce genre de code: DerLig As Long
ou bien encore: DerLig=Cells(Rows.Count,1).End...)
Pour consulter les archives, il suffit de cliquer ici
 
Re

@LBi
Si jamais après tes recherches, tu ne trouvais pas chaussures à ton pied, je repasserai dans ton fil pour un autre bout de code 😉
Rectification:
C'est plutôt les discussions où l'on cherche à déterminer la première cellule* non vide sur une ligne donnée en partant de la droite vers la gauche
(*: son numéro de colonne)
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour