Retour à la ligne dans macro excel
Fermé
rocky123
Messages postés
1
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
29 février 2008
-
29 févr. 2008 à 11:11
amigo - 5 mars 2008 à 20:14
amigo - 5 mars 2008 à 20:14
A voir également:
- Retour à la ligne dans macro excel
- Aller à la ligne excel - Guide
- Liste déroulante excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Formule excel - Guide
- Hors ligne instagram - Guide
20 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
3 mars 2008 à 10:34
3 mars 2008 à 10:34
bonjour
à mon avis pour que les les retours à la ligne fonctionnent avec un éditeur, utilise :
"vbCrLf" c'est le code implicite des fichiers textes.
à mon avis pour que les les retours à la ligne fonctionnent avec un éditeur, utilise :
"vbCrLf" c'est le code implicite des fichiers textes.
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 févr. 2008 à 13:31
29 févr. 2008 à 13:31
bonjour,
Ecrire ça :
Print #1, "FONCTION: " & Fonction & VbCr 'ou Chr(10)
;o)
polux
Ecrire ça :
Print #1, "FONCTION: " & Fonction & VbCr 'ou Chr(10)
;o)
polux
Merci de m'avoir répondu c'est très sympa, je ne suis pas sûr de l'avoir écrit au bon endroit: J'ai remplacé la ligne
Print #1, "FONCTION: " & Fonction par Print #1, "FONCTION: " & Fonction & VbCr et aussi Print #1, "FONCTION: " & Fonction & Chr(10) mais aucun retour à la ligne ne s'est effectué dans mon fichier .txt
Print #1, "FONCTION: " & Fonction par Print #1, "FONCTION: " & Fonction & VbCr et aussi Print #1, "FONCTION: " & Fonction & Chr(10) mais aucun retour à la ligne ne s'est effectué dans mon fichier .txt
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 09:42
3 mars 2008 à 09:42
bonjour,
Avec quoi ouvres tu ton fichier texte ? wordpad ou bloc-notes ?
Avec quoi ouvres tu ton fichier texte ? wordpad ou bloc-notes ?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 10:13
3 mars 2008 à 10:13
essaies avec wordpad ... je crois que c'est bloc-notes qui a un problème avec les retours à la ligne ... :os
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Essaie d'ecrire
Print #1, "FONCTION: " ; Fonction
Remplaces le signe (&) par le signe (;) et sans rien ajouter en fin de ligne.
ça devrait aller.
Salut.
Essaie d'ecrire
Print #1, "FONCTION: " ; Fonction
Remplaces le signe (&) par le signe (;) et sans rien ajouter en fin de ligne.
ça devrait aller.
Salut.
Autres variantes
Print #1, "FONCTION: " ; Fonction ; ""
sinon
Print #1, "FONCTION: " ; Fonction ;
print#1,""
Si ça ne marche toujours pas alors mystère.
Print #1, "FONCTION: " ; Fonction ; ""
sinon
Print #1, "FONCTION: " ; Fonction ;
print#1,""
Si ça ne marche toujours pas alors mystère.
Si tu n'as pas touvé l'erreur, dépose ton fichier sur ce site et colle le lien dans ton prochain post.
www.cijoint.fr/
A+
www.cijoint.fr/
A+
Quand je clic sur le lien il me met "fichier inaccessible". Verifie chez toi si ça marche, je re-ssayerai plus tard.
J'ai le fichier
j'ai juste modifié la declaration de tes variables.
voila un extrait de fichier qui est généré, dis moi si ça correspond a ce que tu veux.
::
::
ALARME N° 1001
--------------
ETAPE: X0.0 - Initialisation
FONCTION: Attente
CAUSES POSSIBLES:
- Défaut sur variateur ATV71 élévateur U401
- Porte coffret intermédiaire B720(I162) ouvertes
- Table n'est pas en arrière (B488)
::
ALARME N° 1002
--------------
ETAPE: X0.1 - Initialisation
FONCTION: M/D rail
CAUSES POSSIBLES:
- Défaut variateur ou carte d’axe
- Défaut carte d’axe
- Défaut détecteur pt0 du rail
etc...
A+
j'ai juste modifié la declaration de tes variables.
voila un extrait de fichier qui est généré, dis moi si ça correspond a ce que tu veux.
::
::
ALARME N° 1001
--------------
ETAPE: X0.0 - Initialisation
FONCTION: Attente
CAUSES POSSIBLES:
- Défaut sur variateur ATV71 élévateur U401
- Porte coffret intermédiaire B720(I162) ouvertes
- Table n'est pas en arrière (B488)
::
ALARME N° 1002
--------------
ETAPE: X0.1 - Initialisation
FONCTION: M/D rail
CAUSES POSSIBLES:
- Défaut variateur ou carte d’axe
- Défaut carte d’axe
- Défaut détecteur pt0 du rail
etc...
A+
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 17:33
3 mars 2008 à 17:33
j'ai obtenu la même chose sans rien modier ???
je ne vois pas où est le problème ?
je ne vois pas où est le problème ?
J'ai juste regroupé les instructions Dim qui trainaient au millieu du code, c'est plus propre.
Sinon pas de problème.
Sinon pas de problème.
En fait je transfère le fichier .txt dans un affichage industriel et je n'ai droit qu'à 77 caractères, si on dépasse ce nombre on ne voit la suite de la phrase. Si dans la colonne fonction j'écris une phrase plus longue (retour à la ligne auto dans excel), le retour à la ligne ne se fait pas dans .txt
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mars 2008 à 19:16
3 mars 2008 à 19:16
ah ok c'est un autre problème ça ... il faut dans ce cas tester la longueur de la chaine et si la longueur est supérieure à 77 alors on ajoute une ligne dans le fichier .txt ...
Ok j'ai compris, il ne faut pas que la longueur de la ligne excède 77 caractères.
J'ai ajouté ces variales:
Dim StrFonction As String
Dim LngFonction As Integer
Dim k As Integer
Const MAXLNG = 77
Si la longueur maxi est trop longue encore, ajuste la constante MAXLNG, par ex. Const MAXLNG = 70
Il se peut que la coupure se fasse au milieu d'un mot.
Voila ta macro en entier, tu as juste à copier coller . Renomme la macro originale Sub Generation_orig() en attendant.
Remets le nom du fichier original, le l'ai changé pour le test. NomFichier = .....
A+
J'ai ajouté ces variales:
Dim StrFonction As String
Dim LngFonction As Integer
Dim k As Integer
Const MAXLNG = 77
Si la longueur maxi est trop longue encore, ajuste la constante MAXLNG, par ex. Const MAXLNG = 70
Il se peut que la coupure se fasse au milieu d'un mot.
Voila ta macro en entier, tu as juste à copier coller . Renomme la macro originale Sub Generation_orig() en attendant.
Remets le nom du fichier original, le l'ai changé pour le test. NomFichier = .....
A+
Sub Generation() Dim Chemin As String Dim NomFichier As String Dim Num As String Dim Etape As String Dim Macro As String Dim Fonction As String Dim CausePossible As String Dim AlarmeFin As String Dim cpt As Integer Dim i As Integer Dim j As Integer Dim lgString As Integer Dim nbLigne As Integer Dim lgStringInterne As Integer Dim posString As Integer Dim Tableau(50) As String Dim StrFonction As String Dim LngFonction As Integer Dim k As Integer Const MAXLNG = 77 AlarmeFin = "1599" Range("a4").Select NomFichier = "d:\perso\temp\essai.txt" Open NomFichier For Output As #1 Print #1, "::" Do If ActiveCell.Text = "" Then Selection.Offset(1, 0).Range("a1").Select GoTo fin End If Num = ActiveCell.Text Selection.Offset(0, 1).Range("a1").Select Etape = ActiveCell.Text Selection.Offset(0, 1).Range("a1").Select Macro = ActiveCell.Text Selection.Offset(0, 1).Range("a1").Select Fonction = ActiveCell.Text Selection.Offset(0, 1).Range("a1").Select CausePossible = ActiveCell.Text Selection.Offset(1, -4).Range("a1").Select nbLigne = 0 posString = 1 CausePossible = CausePossible + Chr(10) lgString = Len(CausePossible) For i = 1 To lgString If Mid(CausePossible, i, 1) = Chr(10) Then lgStringInterne = i - posString Tableau(nbLigne) = Mid(CausePossible, posString, lgStringInterne) nbLigne = nbLigne + 1 posString = i + 1 End If Next Print #1, "::" Print #1, "ALARME N° " & Num Print #1, "--------------" Print #1, "ETAPE: " & Etape & " - " & Macro LngFonction = Len(Fonction) Print #1, "FONCTION: " & Left(Fonction, MAXLNG) If LngFonction > 77 Then For k = 78 To LngFonction Step MAXLNG StrFonction = Mid(Fonction, i, MAXLNG) Print #1, StrFonction Next k End If Print #1, "" Print #1, "CAUSES POSSIBLES:" If Tableau(0) <> "" Then For j = 0 To (nbLigne - 1) Print #1, "- " + Tableau(j) Next End If fin: cpt = cpt + 1 Loop Until ActiveCell = AlarmeFin Or cpt > 610 Close #1 Range("a4").Select End Sub
Oups, petite erreur,
remplaces
StrFonction = Mid(Fonction, i, MAXLNG)
par
StrFonction = Mid(Fonction, k, MAXLNG)
et
If LngFonction > 77 Then
par
If LngFonction > MAXLNG Then
et
For k = 78 To LngFonction Step MAXLNG
par
For k = MAXLNG+1 To LngFonction Step MAXLNG
remplaces
StrFonction = Mid(Fonction, i, MAXLNG)
par
StrFonction = Mid(Fonction, k, MAXLNG)
et
If LngFonction > 77 Then
par
If LngFonction > MAXLNG Then
et
For k = 78 To LngFonction Step MAXLNG
par
For k = MAXLNG+1 To LngFonction Step MAXLNG
LngFonction = Len(Fonction) Print #1, "FONCTION: " & Left(Fonction, MAXLNG) If LngFonction > MAXLNG Then For k = MAXLNG+1 To LngFonction Step MAXLNG StrFonction = Mid(Fonction, k, MAXLNG) Print #1, StrFonction Next k End If
Salut Amigo, franchement merci beaucoup pour ton aide heureusement qu'il y a des gens comme toi dans ce monde, ça fonctionne très bien mais comme tu l'as dis les mots sont coupés, parfois on passe à la ligne et la première lettre est séparée, même avec l'ajustement de la variable j'aurai toujours des mots séparés à n'importe quel endroit. Est-il possible de choisir la longueur de ma cellule excel en fonction de mon écran (retour à la ligne auto) et que dans mon fichier .txt il y aie les même retour à la ligne?
Bonjour,
Je ne crois pas qu'on puisse fixer une longueur de ligne de texte dans une cellule avec retour à la ligne auto.
On peut supprimer cette option et forcer les retours à la ligne manuellement evec Alt+Entrer et faire un traitement en recherchant le Chr(10) qui est inséré a chaque retour à la ligne. Je crois que tu as déja utilé cette technique un peu plus haut dans ta macro.
On peut aussi laisser le retour à la ligne automatique et faire un traitement de la chaine de texte de manière à chercher le caractère Espace juste àpres la coupure, en limitant la longueur maxi à 65 caractères pour pouvoir ajouter une dizaine de caractères sans dépasser la longueur maxi imposé par ton système.
Si tu as besoin de conseils pour programmer ça , fais moi signe.
A+
Je ne crois pas qu'on puisse fixer une longueur de ligne de texte dans une cellule avec retour à la ligne auto.
On peut supprimer cette option et forcer les retours à la ligne manuellement evec Alt+Entrer et faire un traitement en recherchant le Chr(10) qui est inséré a chaque retour à la ligne. Je crois que tu as déja utilé cette technique un peu plus haut dans ta macro.
On peut aussi laisser le retour à la ligne automatique et faire un traitement de la chaine de texte de manière à chercher le caractère Espace juste àpres la coupure, en limitant la longueur maxi à 65 caractères pour pouvoir ajouter une dizaine de caractères sans dépasser la longueur maxi imposé par ton système.
Si tu as besoin de conseils pour programmer ça , fais moi signe.
A+
Bonjour,
J'ai modifié le code de manière à ce que la coupure se fasse au niveau d'un espace compris enter le 65ème et le 77ème caractère: (Const MAXLNG = 65 et Const ABSLNG = 77)
Modifie les noms des fichiers.
J'ai remarqué aussi qu'entre FONCTION: et CAUSES POSSIBLES: il y avait un saut de ligne
Si c'est pas necéssaire il faut supprimer cette ligne:
Voici la macro complète modifiée
Salut.
J'ai modifié le code de manière à ce que la coupure se fasse au niveau d'un espace compris enter le 65ème et le 77ème caractère: (Const MAXLNG = 65 et Const ABSLNG = 77)
Modifie les noms des fichiers.
J'ai remarqué aussi qu'entre FONCTION: et CAUSES POSSIBLES: il y avait un saut de ligne
Si c'est pas necéssaire il faut supprimer cette ligne:
Print #1, "" Print #1, "CAUSES POSSIBLES:"
Voici la macro complète modifiée
Salut.
Sub Generation() Dim Chemin As String Dim NomFichier As String Dim Num As String Dim Etape As String Dim Macro As String Dim Fonction As String Dim CausePossible As String Dim AlarmeFin As String Dim cpt As Integer Dim i As Integer Dim j As Integer Dim lgString As Integer Dim nbLigne As Integer Dim lgStringInterne As Integer Dim posString As Integer Dim Tableau(50) As String Dim StrFonction As String Dim LngFonction As Integer Dim k As Integer Dim po, pf As Integer Const MAXLNG = 65 Const ABSLNG = 77 AlarmeFin = "1599" Range("a4").Select NomFichier = "d:\perso\temp\essai.txt" Open NomFichier For Output As #1 Print #1, "::" Do If ActiveCell.Text = "" Then Selection.Offset(1, 0).Range("a1").Select GoTo fin End If Num = ActiveCell.Text Selection.Offset(0, 1).Range("a1").Select Etape = ActiveCell.Text Selection.Offset(0, 1).Range("a1").Select Macro = ActiveCell.Text Selection.Offset(0, 1).Range("a1").Select Fonction = ActiveCell.Text Selection.Offset(0, 1).Range("a1").Select CausePossible = ActiveCell.Text Selection.Offset(1, -4).Range("a1").Select nbLigne = 0 posString = 1 CausePossible = CausePossible + Chr(10) lgString = Len(CausePossible) For i = 1 To lgString If Mid(CausePossible, i, 1) = Chr(10) Then lgStringInterne = i - posString Tableau(nbLigne) = Mid(CausePossible, posString, lgStringInterne) nbLigne = nbLigne + 1 posString = i + 1 End If Next Print #1, "::" Print #1, "ALARME N° " & Num Print #1, "--------------" Print #1, "ETAPE: " & Etape & " - " & Macro Fonction = "FONCTION: " + Trim(Fonction) LngFonction = Len(Fonction) For k = 1 To LngFonction If Asc(Mid(Fonction, k, 1)) < 32 Then Mid(Fonction, k, 1) = " " Next If LngFonction <= MAXLNG Then Print #1, Fonction Else po = 1 While po < LngFonction pf = po + MAXLNG If pf < LngFonction Then cf = Asc(Mid(Fonction, pf, 1)) If cf > 32 Then pf = InStr(pf, Fonction, " ") If ((pf = 0) Or (pf > po + ABSLNG)) Then pf = po + ABSLNG End If StrFonction = Mid(Fonction, po, pf - po + 1) If StrFonction <> "" Then Print #1, StrFonction po = pf + 1 Wend End If Print #1, "" Print #1, "CAUSES POSSIBLES:" If Tableau(0) <> "" Then For j = 0 To (nbLigne - 1) Print #1, "- " + Tableau(j) Next End If fin: cpt = cpt + 1 Loop Until ActiveCell = AlarmeFin Or cpt > 610 Close #1 Range("a4").Select End Sub
Quel logiciel est ce que tu prends tour ouvrir tes fichiers TXT?
J'ai essayé avec Word, BlocNote, WordPad et un simple editeur de texte que j'ai téléchagé et je ne vois rien.
A+
J'ai essayé avec Word, BlocNote, WordPad et un simple editeur de texte que j'ai téléchagé et je ne vois rien.
A+
J'y pense, c'est peut etre la police de caractère qui fait ça. Sur quelle ligne de texte tu vois des carrés?
ALARME
ETAPE:
FONCTION:
CAUSES POSSIBLES:
ALARME
ETAPE:
FONCTION:
CAUSES POSSIBLES:
OK, j'ai vu
Ce sont des retour à la ligne manuels que tu as entrés avec Alt Enter.
ALARME 1044 : X3.15 et X3.16 dans la meme cellule -->2 retour ligne -->2 carrés blancs
ALARME 1152 : X0.14 X0.17 X0.22 X0.24 -> -->3 retour ligne -->3 carrés blancs
etc...
Si tu veux, on peut remplacer le petit carré blanc par un point (.), ou tout autre caractère
Tu remplaces
par
Salut.
Ce sont des retour à la ligne manuels que tu as entrés avec Alt Enter.
ALARME 1044 : X3.15 et X3.16 dans la meme cellule -->2 retour ligne -->2 carrés blancs
ALARME 1152 : X0.14 X0.17 X0.22 X0.24 -> -->3 retour ligne -->3 carrés blancs
etc...
Si tu veux, on peut remplacer le petit carré blanc par un point (.), ou tout autre caractère
Tu remplaces
Print #1, "--------------" Print #1, "ETAPE: " & Etape & " - " & Macro
par
Print #1, "--------------" lgString = Len(Etape) For i = 1 To lgString If Mid(Etape, i, 1) = Chr(10) Then Mid(Etape, i, 1) = "." '<---------Mets le caractère que tu veux entre les guillemets End If Next lgString = Len(Macro) For i = 1 To lgString If Mid(Macro, i, 1) = Chr(10) Then Mid(Macro, i, 1) = "." '<---------Mets le caractère que tu veux entre les guillemets End If Next Print #1, "ETAPE: " & Etape & " - " & Macro
Salut.