Retour à la ligne dans macro excel
rocky123
Messages postés
1
Statut
Membre
-
amigo -
amigo -
Bonjour,
A l'aide de la macro ci-dessous je converti mon fichier .xls en .txt, le fichier .xls contient 5 colonnes (N°, Etapes, Macro, Fonction et Causes possibles). Dans Fonction et Causes possibles il y a un retour à la ligne auto, mais dans le fichier .txt le retour à la ligne ne se fait que dans Causes possibles.
Est-ce que quelqu'un pourrait me dire pourquoi le retour à la ligne ne se fait pas pour la colonne Fonction dans le fichier .txt. Je n'ai aucune notion de VisualBasic
Ma macro:
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
AlarmeFin = "1599"
Range("a4").Select
NomFichier = "C:\Program Files\Schneider Electric\Vijeo-Designer\Vijeo-Frame\Vijeo-Manager\Alarme_G39.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
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
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
Print #1, "FONCTION: " & Fonction
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
A l'aide de la macro ci-dessous je converti mon fichier .xls en .txt, le fichier .xls contient 5 colonnes (N°, Etapes, Macro, Fonction et Causes possibles). Dans Fonction et Causes possibles il y a un retour à la ligne auto, mais dans le fichier .txt le retour à la ligne ne se fait que dans Causes possibles.
Est-ce que quelqu'un pourrait me dire pourquoi le retour à la ligne ne se fait pas pour la colonne Fonction dans le fichier .txt. Je n'ai aucune notion de VisualBasic
Ma macro:
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
AlarmeFin = "1599"
Range("a4").Select
NomFichier = "C:\Program Files\Schneider Electric\Vijeo-Designer\Vijeo-Frame\Vijeo-Manager\Alarme_G39.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
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
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
Print #1, "FONCTION: " & Fonction
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
A voir également:
- Retour à la ligne dans macro excel
- Retour à la ligne excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Retour à la ligne google sheet ✓ - Forum Google Docs
- Partager photos en ligne - Guide
20 réponses
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.
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
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+
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
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.