Mise en forme fichier texte

Bonjour

J'ai un fichier texte qui comporte des centaines de ligne avec un compte centralisateur différent en tete de ligne.

image

J'aimerai que le centralisateur sois repris avant chaque compte comme ci dessous

image

En espérant que cela sois faisable.

Merci d'avance

Bonjour et

Oui c'est possible dans Données => Convertir

image

Tu choisis les cellule a transformer => Convertir => Délimité

Tu modifie les séparateurs Autre : (Alt Gr + 6) pour ton exemple, a voir si tu peux aussi mettre tabulation

image

Terminé

A+

Merci pour la réponse mais ca j'y arrive

Ce que je n'arrive pas à faire c'est mettre les donnée en rose sur le fichier texte automatiquement dans une colonne devant les références CN... CF... sachant qu'il y a environ 20 centralisateurs différents et près de 10000 références

Test cette macro :

Sub AjoutCentralisateur()
Columns("A:A").Insert
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
    If Cells(i, 2).Value = "centralisateur" Then Code = Cells(i, 3).Value: i = i + 1
    If Cells(i, 2).Value = "" Then Code = ""
    Cells(i, 1).Value = Code
Next i
End Sub

On ajoute une colonne en A, pour chaque ligne on repere si "centralisateur" et present en colonne B, si c'est le cas on met en memoire le code a copier sur les lignes du dessous jusqu'a une ligne vide qui va reinitialiser le code a copier.

Bonjour à tous !

Et....

Avez-vous étudié la piste Power Query ? Cela vous permettrait d'automatiser cette tache.

Au besoin joignez un exemple, anonymisé, du fichier texte.

Cela ne me rajoute que une colonne A sans autre modification

image

@JFP

Je ne maitrise pas Power Query mais je suis preneur avec les explications si possible

Voici un bout du fichier

7test.xlsm (19.39 Ko)

Cela ne me rajoute que une colonne A sans autre modification

Normal dans ton exemple la colonne B n'a jamais une valeur = a "centralisateur".
Et comme tu as déja une colonne A vide pas besoin d'en rajouter une.

Sub AjoutCentralisateur()
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
    If Cells(i, 2).Value Like "*Centralisateur*" Then Code = Mid(Cells(i, 2).Value, 20, 9): i = i + 1
    If Trim(Cells(i, 2).Value) = "" Then Code = ""
    If Trim(Cells(i, 1).Value) = "" Then Cells(i, 1).Value = Code
Next i
End Sub

Avec ce code sur le fichier joint c'est OK.

Mid pour prendre 9 carateres a partir du 20 eme sur la cellule de la colonne B (correspondant au code)
Like "*Centralisateur*" pour chercher si la cellule de la colonne B contient ce texte
Trim ne prend pas en compte les espaces inutile que tu as sur les cellules des colonnes A:B.

Bonjour JFL

Ola super ca fonctionne ce type de fichier ca va bien me faire gagner du temps

C'est possible d'avoir la même chose en plus difficile il faudrait que ça

image

Devienne ça

image

Tu devrais essayer de creer le code, si tu arrives a savoir a quel moment les variables changent tu devrait pouvoir y arriver.

A tester

Sub AjoutCentralisateur()
Columns("B:B").Insert
For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row
    'Colonne A
    If Cells(i, 1).Value Like "*Centralisateur*" Then Code = Cells(i, 1).Value: i = i + 1
    If Trim(Cells(i, 1).Value) = "" Then Cells(i, 1).Value = Code
    'Colonne B
    If Cells(i, 3).Value Like "*CF*" Then Code2 = Trim(Cells(i, 3).Value)
    If Trim(Cells(i, 3).Value) = "" Then Code2 = ""
    If Trim(Cells(i, 2).Value) = "" Then Cells(i, 2).Value = Code2
    If Trim(Cells(i, 2).Value) = Trim(Cells(i, 3).Value) Then Cells(i, 2).Value = ""
Next i
Columns("B:B").EntireColumn.AutoFit
End Sub
image

J'essaierai de comprendre mais c'est vraiment pas mon domaine.

La requête fonction pour la 1ère partie par contre la 2ème partie ne fonctionne pas

Résultat obtenu :

image

Résultat attendu :

il manque le décalage de compte en rouge sur la gauche (insérer un colonne et recopier vers le bas jusqu'à la prochaine référence)

image

A parti de là je pourrai retravailler le fichier avec tcd et autre suivi

Un grand merci pour votre aide

A si pardon ca fonctionne très bien

merci pour tout

J'aurais encore besoin d'un ajustement finalement (je suis désolé)

A cause de la structure de départ du fichier je me retrouve avec des cellules vide

Est il possible du coup de remplir les cellule jusqu'à la prochaine référence (pour information elle comment toutes par C* soit CF...,CD...,CP...)

Obtenu :

image

Attendu :

image

Cdt

Pas de probleme,
Sans fichier je suis parti sur le dernier fourni en supprimant le CF en ligne 43

image

Pour info :
Si je défini commence par C*, il y aura également "Compte" qui sera pris en compte donc je cherche CF / CD / CP

Est il possible du coup de remplir les cellule jusqu'à la prochaine référence (pour information elle comment toutes par C* soit CF...,CD...,CP...)

Sub AjoutCentralisateur()
Columns("B:B").Insert
For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row
    'Colonne A
    If Cells(i, 1).Value Like "*Centralisateur*" Then Code = Cells(i, 1).Value: i = i + 1
    If Trim(Cells(i, 1).Value) = "" Then Cells(i, 1).Value = Code
    'Colonne B
    If Cells(i, 3).Value Like "*CF*" Or Cells(i, 3).Value Like "*CD*" Or Cells(i, 3).Value Like "*CP*" Then Code2 = Trim(Cells(i, 3).Value)
    If Trim(Cells(i, 3).Value) = "" Then Cells(i, 2).Value = ""
    If Trim(Cells(i, 2).Value) = "" And IsDate(Trim(Cells(i, 3).Value)) Then Cells(i, 2).Value = Code2
    If Trim(Cells(i, 2).Value) = Trim(Cells(i, 3).Value) Then Cells(i, 2).Value = ""
Next i
Columns("B:B").EntireColumn.AutoFit
End Sub

Je ne reinitialise plus le "Code2" quand il y a une cellule vide,
Je veux seulement que le "Code2" apparaisse quand la cellule a coté est une date.

___________________________________________________________________________________________________________________

EDIT : (Le code au dessus ne correspond pas a ton image)

Pour copier les CF sur toutes les colonnes :

Sub AjoutCentralisateur()
Columns("B:B").Insert
For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row
    'Colonne A
    If Cells(i, 1).Value Like "*Centralisateur*" Then Code = Cells(i, 1).Value: i = i + 1
    If Trim(Cells(i, 1).Value) = "" Then Cells(i, 1).Value = Code
    'Colonne B
    If Cells(i, 3).Value Like "*CF*" Or Cells(i, 3).Value Like "*CD*" Or Cells(i, 3).Value Like "*CP*" Then Code2 = Trim(Cells(i, 3).Value)
    Cells(i, 2).Value = Code2
Next i
Columns("B:B").EntireColumn.AutoFit
End Sub
image

A+

Rechercher des sujets similaires à "mise forme fichier texte"