Vérifier un fichier .txt par rapport à un fichier Excel
Bonjour Forum!
Avant tout, Un très Bonne et Heureuse Année 2013 à tous!
Je sollicite de nouveau votre aide.
Je travaille tous les mois sur des fichiers du type de l'exemple du fichier excel en attachement nommé: 'Test - Txt controle'.
La structure type de ce fichier est toujours la même:
il y a un fichier par pays (dans l'exemple France). Chaque fichier est construit comme suit:
- onglets incolores: 1 onglet par individu pour reporter des informations chiffrées, les info de la colonne 'Last' et Current' changent tous les mois; dans l'exemple joint, je n'ai mis que 4 individus, mais certains des fichiers réels il peut y avoir plusieurs dizaines d'onglets.
- onglet rouge: reprend les informations des cellules des onglets des individus avec des cellules liées (sauf la colonne 'Last'). Cet onglet est modifié manuellement à chaque ajout d'un onglet correspondant à un nouvel individu dans le fichier.
Je dois tous les mois pour chaque pays (après mise à jour des informations de la colonne 'Current') préparer un fichier.txt correspondant à l'onglet rouge.
Une fois le fichier .txt préparé , je dois réaliser les opérations suivantes:
- supprimer manuellement les lignes blanches (dans certains cas elles apparaissent, je ne sais pas pourquoi).
- vérifier que les informations du fichier txt sont exactement celles reportées dans les onglets individus: j'ai mis des exemples d'erreurs dans l'onglet rouge (surligné en rouge, jaune et violet)
- vérifier que le format de la date est toujours du type 01.01.2013 (jj.mm.aaaa).
- vérifier l'absence de '#REF!', du symbole ' (pas de séparateur de milliers dans les chiffres).
Je souhaiterais savoir s'il est possible d'automatiser tout ou partie des étapes ci-dessus avec des macro ou autre (??), et notamment:
- la suppression des lignes blanches dans le fichier .txt.
- la comparaison entre le fichier .txt (qui est le fichier final à vérifier) et les onglets individus.
J'aimerai aussi savoir pourquoi certains liens / formules 'sautent' , car même si je les corrige manuellement , l'erreur peut réapparaître aléatoirement le mois suivant.
J'espère avoir été claire dans ma demande.
Merci beaucoup par avance!
Bonjour,
Un début de réponse. Copies le code ci-dessous dans un module.
La procédure créée une feuille de consolidation avec les éléments souhaités avant l'enregistrement en txt.
A te lire si besoin de plus d'explications.
Cdlt
Option Explicit
Public Sub ConversionTxt()
Dim derLigne1 As Long, derColonne As Integer
Dim derLigne2 As Long
Dim i As Byte
With Application
.DisplayAlerts = False
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
On Error Resume Next
Worksheets("Export txt").Delete
On Error GoTo 0
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "Export txt"
derLigne2 = 1
For i = 1 To Worksheets.Count
If Worksheets(i).Name <> Worksheets("Export txt").Name Then
Worksheets(i).Activate
derLigne1 = Range("A" & Rows.Count).End(xlUp).Row
derColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
Range(Cells(2, 1), Cells(derLigne1, derColonne)).Copy _
Destination:=Worksheets("Export txt").Cells(derLigne2, 1)
derLigne2 = Worksheets("Export txt").Range("A" & Rows.Count).End(xlUp).Row + 1
End If
Next i
Worksheets("Export txt").Activate
derLigne2 = Range("A" & Rows.Count).End(xlUp).Row
Range(Cells(1, 3), Cells(derLigne2, 3)).NumberFormat = "dd.mm.yyyy"
Columns(6).Delete
Range(Cells(1, 6), Cells(derLigne2, 6)).NumberFormat = "General"
With Application
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
End With
End SubBonjour Jean-Eric,
merci beaucoup de ta réponse. Alors j'ai testé et essayé de l’utiliser et si j'ai bien compris, il s'agit d'une procédure pour regrouper les info sur les onglets individus dans un onglet recap qui serait nommé 'export txt' ? (en cherchant un peu sur le forum hier soirje me disais que je devrais plutôt essayer quelque chose comme ça pour simplement regénérer l'onglet consolidé à chaque fois avant de créer le txt au lieu de modifier l'onglet récap chaque fois pour ajouter de nouveaux individus.
Quelques questions après premier tests:
- l'onglet export txt généré chaque fois que l'on exécute la procédure écrase le fichier précédemment généré?
- que se passe-tiil si on ajoute un onglet individu (l'onglet export txt est-il mis à jour aussi automatiquement?)
Je regarde un peu plus en détails pour affiner mes questions et je reviens vers toi pour bien comprendre comment cela fonctionne ( je débute avec les macros )et ensuite pouvoir l'essayer / l'adapter sur un des mes fichiers réels.
Merci
Cdlt,
Re,
l'onglet export txt généré chaque fois que l'on exécute la procédure écrase le fichier précédemment généré?
Oui : au lancement de la procédure, on supprime la feuille "Export txt" pour la recréer et ceci en fonction du nombre de feuilles du classeur;
que se passe-tiil si on ajoute un onglet individu (l'onglet export txt est-il mis à jour aussi automatiquement?
Voir réponse précédente.
A te relire. Cdlt
Bonsoir Jean-Eric,
Ta procédure est top et fonctionne super bien sur mon fichier test. Par contre j'ai essayé sur un des mes fichiers 'réels' et ça ne fonctionne plus.
Les 'vrais' fichiers sur lesquels je travaille sont comme suit:
- ils sont protégés par un mot de passe qui empêche l'ajout 'onglet --> ce n'es tas un souci je peux les déprotéger manuellement quand je veux utiliser ta procédure
- il y a plusieurs onglets masqués: je souhaiterais que ta procédure ne prennent en compte que les onglets visibles et 'ignore' ceux qui sont masqués: est-ce possible ?
D'autre part, en tout j'ai en vrai 75 fichiers, mais il est possible que je doive en créer de nouveau (si il y a un nouveau pays par exemple). J'ai une question bête: comment je fais pour pouvoir utiliser la procédure pour chaque fichier ?
est-ce que je copie dans un module d'un nouveau classeur que je garde ouvert dès que je dois travailler sur les vrais fichiers ? Je débute vraiment avec les macros, alors je ne suis pas encore très au clair avec les modules etc... et comment ça fonctionne avec différents classeurs etc...
Merci par avance de ton aide (et de ta patience
Bonjour,
On peut déprotéger par VBA, si les mots de passe sont communs aux différents fichiers.ils sont protégés par un mot de passe qui empêche l'ajout 'onglet --> ce n'es tas un souci je peux les déprotéger manuellement quand je veux utiliser ta procédure
Ajoutes la partie surlignée au code :il y a plusieurs onglets masqués: je souhaiterais que ta procédure ne prennent en compte que les onglets visibles et 'ignore' ceux qui sont masqués: est-ce possible ?
For i = 1 To Worksheets.Count
If Worksheets(i).Name <> Worksheets("Export txt").Name And Worksheets(i).Visible = True ThenPour les 75 fichiers et la création d'un nouveau fichiers avec l'utilisation de la procédure, il faut réfléchir. Ce que je suggère de bon matin, c'est d'exporter le module (fichier .bas) puis de l'importer dans chacun de tes fichiers existants. Et de créer un modèle de document (fichier xltm) intégrant le module, pour les nouveaux fichiers.
A te relire. Cdlt
Bonsoir Jean-Eric,
Je vais préparer un fichier test plus proche du fichier réel car en testant la macro, Il y a des trucs qui ne fonctionnent pas. Cela me prendra un peu de temps pour le préparer, mais je reviens dès que possible (ai repris le travail et du coup c'est re- la course de nouveau toute la journée et un partie de la soirée
Merci beaucoup en tous cas de ta patience et de ton aide précieuse
Cdlt,
Toli.
Bonjour Jean-Eric,
J'ai pris un peu de temps (désolée mais c'était pour la bonne cause) pour me remmettre au vba et pouvoir adapter la macro à mes besoins de façon plus spécifique.
Pourrais-tu jeter un coup d'oeil pour me dire si l'écriture est correcte?
merci par avance.
Toli.
Sub TXTtestCplt()
Dim derLigne1 As Long, derColonne As Integer
Dim derLigne2 As Long
Dim i As Byte
With Application
.DisplayAlerts = False
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
On Error Resume Next
Worksheets("Export txt").Delete
On Error GoTo 0
Application.Dialogs(xlDialogOpen).Show
ActiveWorkbook.Unprotect ("apple")
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "Export txt"
derLigne2 = 1
For i = 1 To Worksheets.Count
If Worksheets(i).Name <> Worksheets("Export txt").Name And Worksheets(i).Visible = True Then
Worksheets(i).Activate
Range(Cells(5, 1), Cells(48, 9)).Copy
Worksheets("Export txt").Cells(derLigne2, 1).PasteSpecial xlPasteValues
derLigne2 = Worksheets("Export txt").Range("A" & Rows.Count).End(xlUp).Row + 1
End If
Next i
Worksheets("Export txt").Activate
Worksheets("Export txt").Columns.AutoFit
derLigne2 = Range("A" & Rows.Count).End(xlUp).Row
Range(Cells(1, 3), Cells(derLigne2, 3)).NumberFormat = "dd.mm.yyyy"
Columns(6).Delete
Range(Cells(1, 6), Cells(derLigne2, 6)).Replace "", 0
Range(Cells(1, 6), Cells(derLigne2, 6)).NumberFormat = "0.00"
Columns(9).Delete
With Application
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
End With
End Sub