Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro compléter automatiquement cellules selon nombre de caractères donné

  • Initiateur de la discussion Initiateur de la discussion pierre31270
  • 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 !

P

pierre31270

Guest
Bonjour,

J'extrais des données depuis Access en *.csv et je souhaiterais les convertir en *.txt. Jusque là tout va bien.
Mon problème est que toutes les lignes du *.txt doivent faire la même longueur soit environ 500 caractères. Etant donné qu'il y a environ une cinquantaine de colonnes pour 500 lignes au minimum, je souhaiterais "automatiser" tout ça.

Y aurait-il une macro, dans ce cas on convertit le *.csv en *.xlsm je suppose, qui puisse permettre de compléter les cellules par un caractère:
-S'il s'agit d'une zone numérique, cellules complétées à gauche par des zéros
-S'il s'agit d'une zone alphanumérique, cellules complétées à droite par des espaces.

sachant que:
- le nombre de caractères par cellules dépend de sa colonne.

Si quelqu'un pouvait me donner des pistes ça serait super sympa🙂🙂

Merci par avance.

Pierre
 
Re : Macro compléter automatiquement cellules selon nombre de caractères donné

bonjour pierre31270,

peux-tu joindre des fichiers exemple :
- ton fichier csv
- le fichier txt souhaité.

merci

a+
 
Re : Macro compléter automatiquement cellules selon nombre de caractères donné

Ok je te fais ça. C'est assez long donc je vais te demander un peu de temps...
 
Re : Macro compléter automatiquement cellules selon nombre de caractères donné

Voila, j'espere que cela pourra aider à titre d'exemple.
J'ai pensé à une fonction concatener et une autre pour tronquer les noms mais rien de vraiment abouti. Si tu as des pistes je suis preneur.
Merci à toi
 

Pièces jointes

  • doc.zip
    doc.zip
    762 bytes · Affichages: 121
  • doc.zip
    doc.zip
    762 bytes · Affichages: 122
  • doc.zip
    doc.zip
    762 bytes · Affichages: 126
Re : Macro compléter automatiquement cellules selon nombre de caractères donné

bonjour pierre31270,

il faudrait que tu expliques comment sont générées les infos du fichier texte :
Code:
[B]XXXXXD10041[/B]          DURAND              [B]AVO584962[/B]        avoir 3 durand      [B]2009091020090910D000000000007397EUR111111111[/B]            20091010          PUBLIC       [B]000000000007397FR00111111111[/B]

de plus, je pense que ça serait plus simple de séparer les infos de chaque ligne (du fichier texte) par une tabulation, plutôt que par un nombre (pas constant) d'espaces. est-ce que ça poserait un problème ?

a+
 
Re : Macro compléter automatiquement cellules selon nombre de caractères donné

et oui c'est là toute la difficulté, chaque ligne doit faire une longueur fixe et il n'y a pas de tabulation possible.
J'ai mis le nombre de caractère que l'on doit retrouver pour chaque info dans les entetes des colonnes du fichier csv.
 
Re : Macro compléter automatiquement cellules selon nombre de caractères donné

re-bonjour,

voici une macro (commentée) qui a l'air de fonctionner, du moins pour l'exemple que tu as fait.

-S'il s'agit d'une zone numérique, cellules complétées à gauche par des zéros
-S'il s'agit d'une zone alphanumérique, cellules complétées à droite par des espaces.
c'est pas tout a fait vrai. la deuxième colonne est numérique, mais il faut la compléter avec des espaces après. du coup, dans la macro, plutôt que de faire le test "si la valeur est numérique", j'ai vérifié sa position (son "numéro de colonne") pour préciser quelles données étaient à compléter avec des 0 devant.



Code:
Sub test()
Dim fichierCsv As Object, fichierTexte As Object, myFso As Object
Dim tableauChaines() As String, ligneTexte As String, longueurChamps, i As Integer, tmpStr As String

'définir la longueur imposée de chaque champ
longueurChamps = Array(5, 1, 15, 20, 3, 14, 20, 8, 8, 1, 15, 3, 9, 12, 8, 8, 10, 3, 15, 25, 35)


Set myFso = CreateObject("Scripting.FileSystemObject")

'adapter les chemin des fichiers
Set fichierCsv = myFso.OpenTextFile("E:\aMiki\XLS\test\factures.csv", 1)
Set fichierTexte = myFso.CreateTextFile("E:\aMiki\XLS\test\resultat.txt", True)

'ne pas traiter la première ligne du fichier csv
fichierCsv.ReadLine
'écrire la première ligne du fichier texte
fichierTexte.WriteLine "ENTETE"

'boucler sur toutes les lignes suivantes du fichier csv
While Not fichierCsv.AtEndOfStream
    ligneTexte = ""
    
    'récupérer dans un tableau les éléments de la ligne
    tableauChaines = Split(fichierCsv.ReadLine, ";")
    
    'boucler sur chaque éléments
    For i = LBound(tableauChaines) To UBound(tableauChaines)
    
        'si l'élément est trop long
        If Len(tableauChaines(i)) >= longueurChamps(i) Then
            
            'le tronquer à la longueur voulue
            tmpStr = Left(tableauChaines(i), longueurChamps(i))
        
        'sinon
        Else
            
            ' si on est dans une des 2 colonnes "montant"
            If i = 10 Or i = 18 Then
                
                'enlever le signe - et la virgule
                tmpStr = Replace(Replace(tableauChaines(i), "-", ""), ",", "")
                
                'compléter avec des 0 (avant)
                tmpStr = String(longueurChamps(i) - Len(tmpStr), "0") & tmpStr
            
            'sinon
            Else
                
                'compléter avec des espaces (après)
                tmpStr = tableauChaines(i) & String(longueurChamps(i) - Len(tableauChaines(i)), " ")
            End If
        End If
        
        'ajouter l'élément à la ligne du fichier texte
        ligneTexte = ligneTexte & tmpStr
    Next i
    
    'écrire la ligne dans le fichier texte
    fichierTexte.WriteLine ligneTexte
Wend

'fermer les fichiers et détruire les objets
fichierCsv.Close: fichierTexte.Close
Set fichierCsv = Nothing: Set fichierTexte = Nothing: Set myFso = Nothing
End Sub
a+
 
Dernière édition:
Re : Macro compléter automatiquement cellules selon nombre de caractères donné

Woaw franchement merci beaucoup ça marche nikel. Comment tu as appris tout ça? ya sans doute pas mal de débrouille mais pourrais-tu me conseiller certains bouquins et/ou sites web s'il te plait?
Encore merci pour ton aide.

A bientot
Pierre
 
Re : Macro compléter automatiquement cellules selon nombre de caractères donné

re bonjour,

pour débuter, il y a la FAQ de XLD, et d'autres tutos sur Developpez.com.
à mon goût, le mieux pour progresser reste quand même ce forum, qui permet de découvrir plusieurs solutions à un seul problème...

a+
 
Re : Macro compléter automatiquement cellules selon nombre de caractères donné

Bon personne merci quand meme
 
Dernière modification par un modérateur:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

S
Réponses
4
Affichages
2 K
stage_ferrit
S
J
Réponses
4
Affichages
1 K
Ju_De_Citron
J
L
Réponses
3
Affichages
1 K
ljeremy64
L
0
Réponses
0
Affichages
792
00seb
0
S
Réponses
3
Affichages
2 K
Sebadoo
S
M
Réponses
3
Affichages
4 K
_matt_44
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…