Microsoft 365 Annuler le saut à la ligne automatique

tolga7

XLDnaute Nouveau
Bonjour,

J'ai un petit problème avec VBA, j'ai trouvé un code qui extrait les donnés d'un fichier texte dans excel pour ensuite les envoyer par mail.
Le problème c'est que quand j'extrait le texte du .txt a chaque virgule j'ai un saut a la ligne et le reste du teste se retrouve dans la cellule du dessous alors que je veux seulement représenter une virgule.
En gros je veux tout mettre dans une cellule au lieu qu'a chaque virgule je passe a la cellule du dessous.
Je vous met mon code ci dessous.
Merci d'avance,

Tolga

VB:
Sub Profile1()

Dim Nom_Fichier As String, Texte As Variant
Dim NumFile As Integer, Compteur As Integer
Dim Send_Email As Worksheet

If ActiveSheet.Range("I4") = "" Then
   MsgBox "Fill Profile Name !", vbCritical + vbOKOnly, "Attention..."
   Exit Sub
End If

Nom_Fichier = "C:\Users\" & ActiveSheet.Range("I4") & ".txt"
Compteur = 1

If Dir(Nom_Fichier) = "" Then
   MsgBox " Wrong name !", vbCritical + vbOKOnly, "Attention..."
   Exit Sub
Else
   ActiveSheet.Select
   NumFile = FreeFile
   Open Nom_Fichier For Input As NumFile ' ouverture du fichier
   Do While Not EOF(NumFile)
      Input #NumFile, Texte
      Sheets("Send_Email").Range("Z" & Compteur).Select
      Sheets("Send_Email").Range("Z" & Compteur).Value = Texte
      Compteur = Compteur + 1
      
   Loop

End If

ActiveSheet.Range("A1").Select
Close NumFile

End Sub
 

Dranreb

XLDnaute Barbatruc
Peut être qu'un tableau de string ne lui convient pas …
Mais vous aviez dit que vous vouliez tout dans une cellule ?
Alors mettez simplement le comme valeur de cette cellule le Texte récupéré du Line Input, non ?
 

tolga7

XLDnaute Nouveau
Peut être qu'un tableau de string ne lui convient pas …
Mais vous aviez dit que vous vouliez tout dans une cellule ?
Alors mettez simplement le comme valeur de cette cellule le Texte récupéré du Line Input, non ?

Non je ne veux pas tout spécialement dans une cellule, pour le moment j'ai mes lignes de texte dans chaque ligne dans excel comme je le voulais, sauf que quand il y a une virgule, j'ai un saut a la ligne je ne sais pour quelle raison.

Regardez la différence entre les captures 1 et 2, la capture 1 est le résultat que j'ai et la deuxième capture est mon fichier texte. On peut voir sur la première capture qu'il y a plus les virgules et qu'il y a des saut de cellules a la place.
Je ne sais pas si il y a un text delimiter automatique ou comment l'annuler.
Merci beaucoup
 

Pièces jointes

  • Capture1.JPG
    Capture1.JPG
    33.2 KB · Affichages: 2
  • Capture2.JPG
    Capture2.JPG
    34.9 KB · Affichages: 2

tolga7

XLDnaute Nouveau
Mais moi je sais pourquoi: c'est parce que l'instruction Input #N ne convient pas. Elle est faite pour ne lire qu'une seule des zones de la ligne séparées justement par des virgules. Pour lire toute la ligne jusqu'au CrLf avfec les virgules il faut: Line Input #N

Putain merci ça marche merci beaucoup !!!!!! :):):):):)
Je me prend la tete dessus depuis plus d'une semaine...

Je ne suis pas trop expert en VBA donc je galère un peu...
J'avais une autre question si ça te dérange pas, j'essaye de sélectionner le contenu d'une colonne jusqu’à la première cellule vide exclue donc en fait sélectionner seulement les cellules ou il y a un contenu.
Mais j'arrive pas pour le moment je sélectionne cellules par cellules mais je pense qu'il y a moyen avoir un seul code.
Merci beaucoup de ton aide encore.
 

Dranreb

XLDnaute Barbatruc
Couramment on fait Set Rng = Range(Cells(2, "A"), Cells(Rows.Count, "A").End(xlUp))
Moi je préfère Set Rng = Cells(2, "A").Resize(Cells(Rows.Count, "A").End(xlUp).Row - 1)
Mais je préfère encore plus Set Rng = ListObjects(1).ListColumns(1).DatabodyRange
qui n'est possible que si la plage a fait l'objet d'une mise sous forme de tableau Excel.
 

tolga7

XLDnaute Nouveau
Couramment on fait Set Rng = Range(Cells(2, "A"), Cells(Rows.Count, "A").End(xlUp))
Moi je préfère Set Rng = Cells(2, "A").Resize(Cells(Rows.Count, "A").End(xlUp).Row - 1)
Mais je préfère encore plus Set Rng = ListObjects(1).ListColumns(1).DatabodyRange
qui n'est possible que si la plage a fait l'objet d'une mise sous forme de tableau Excel.

D'accord mais je sais pas comment l’intégrer dans mon code.

J'ai un truc de ce style, et je vois bien que c'est trop compliqué mais je sais pas comment faire autrement...

VB:
MonContenu = MonContenu & "<br>" & "<br> <b>" & Range("Z1") & "</b> <br>" & Range("Z2") & "<br>" & Range("Z3") & "<br>" & Range("Z4") & "<br>" & Range("Z5") & "<br>" & Range("Z6") & "<br>" & Range("Z7") & "<br>" & Range("Z8") & "<br>" & Range("Z9") & "<br>" & Range("Z10") & "<br>" & Range("Z11") & "<br>" & Range("Z12") & "<br>"
 

tolga7

XLDnaute Nouveau
Évitez d'utiliser Activate, Select et Selection dans les macros, ça ne sert à rien et ça perturbe l'affichage. Utilisez plutôt des variables objets WorkBook, Worksheet et Range initialisées par des Set.

Je te joins le fichier, quand tu cliques sur send mail outlook s'ouvre et le texte dans le mail s'affiche
 

Pièces jointes

  • Push_automation_test.xls
    63 KB · Affichages: 2
Haut Bas