Projet "toilettage d'un tableau"

tekmars

XLDnaute Nouveau
Bonjour,
Je fais un export systématique en Excel de données se présentant sous forme d’un tableau à 14 colonnes et un nombre très variable de lignes.
A B C D E F G H I J K L M N
Ser B C Pa E F G H I Ad. le K L M N
1430 AA 29/08/08 à 08:45
1287 AA 29/08/08 à 11:45
3250 AA 29/08/08 à 09:45
1430 BB 29/08/08 à 08:45
1430 BB 29/08/08 à 08:45
1430 CC 29/08/08 à 08:45
4121 DD 29/08/08 à 08:45
1430 EE 29/08/08 à 08:45
1423 EE 29/08/08 à 08:45
1422 EE 29/08/08 à 08:45
1422 EE 29/08/08 à 09:03
7020 FF 29/08/08 à 00:00
7020 GG 29/08/08 à 09:00
1287 GG 29/08/08 à 11:45
1430 GG 29/08/08 à 16:45
1430 GG 29/08/08 à 23:59
1779 HH 29/08/08 à 10:00
1779 HH 29/08/08 à 10:00
1779 II 29/08/08 à 10:00
1421 MM 29/08/08 à 08:45
1421 MM 29/08/08 à 16:45
1421 TT 29/08/08 à 28:45

Je voudrais automatiser la tache qui consiste à
1- supprimer certaines colonnes (B-C-E-F-G-H-I-K-L-N) sachant que certaines contiennent des données et d’autres sont vides.
2- insérer une nouvelle colonne « B » qui donne la correspondance de la valeur présente dans la colonne A « Exemple (1430 = STE … ) » Le ficher UF.xls contient la correspondance de ces valeurs ( je n’ai mis que certaines valeurs, mais je dois en avoir une 50aines).
Rq : la colonne A est non reconnue comme des données numériques mais comme texte !
3 – Détecter les doublons dans la colonne « D » et les supprimer.
RQ : LE TRI SE FAIT TOUJOURS SUR LA COLONNE D.
4 – Corriger la mise en forme de la colonne J (avoir un format date sans heures : minutes)
5 – Afficher une boite de dialogue qui demande de choisir entre deux mots « CHAUD » OU «FROID » et utiliser ce choix pour remplir une colonne à insérer à la fin (le nombre de lignes est celui restant après la purge des doublons de la colonne D)
6 – ajouter une dernière colonne qui affiche un numéro d’identification unique qui sera la combinaison entre date-heure-minute-incrémentation automatique
Ex :
30/08/2008 à 08h : 33 + N°1 devient  20080830083301
30/08/2008 à 08h : 33 + N°2 devient  20080830083302
(Le nombre de lignes est celui restant après la purge des doublons de la colonne D)


Le résultat attendu est le suivant : En supposant que j’ai choisi « froid »
Ser B Pa Ad. le choix N°UNIQUE
3250 NEU AA 29/08/2008 FROID 20080830083301
1430 STE BB 29/08/2008 FROID 20080830083302
1430 STE CC 29/08/2008 FROID 20080830083303
4121 HPD DD 29/08/2008 FROID 20080830083304
1422 SB EE 29/08/2008 FROID 20080830083305
7020 LINQ FF 29/08/2008 FROID 20080830083306
1430 STE GG 29/08/2008 FROID 20080830083307
1779 OPH HH 29/08/2008 FROID 20080830083308
1779 OPH II 29/08/2008 FROID 20080830083309
1421 SA MM 29/08/2008 FROID 20080830083310
1421 SA TT 29/08/2008 FROID 20080830083311


J’ai réussi à faire une macro qui supprime les colonnes, qui convertit le format de la colonne A en numérique et J en date. Mais le reste je ne sais pas le faire (mes connaissance e macro sont limités), je dois le gérer en manuel et c’est vraiment fastidieux….

Merci pour toute aide.
tekmars
 

Pièces jointes

  • Projet.zip
    24.5 KB · Affichages: 42
  • Projet.zip
    24.5 KB · Affichages: 43
  • Projet.zip
    24.5 KB · Affichages: 38

tekmars

XLDnaute Nouveau
Re : Projet "toilettage d'un tableau"

5 – Afficher une boite de dialogue qui demande de choisir entre deux mots « CHAUD » OU «FROID » et utiliser ce choix pour remplir une colonne à insérer à la fin (le nombre de lignes est celui restant après la purge des doublons de la colonne D)
6 – ajouter une dernière colonne qui affiche un numéro d’identification unique qui sera la combinaison entre date-heure-minute-incrémentation automatique
Ex : 30/08/2008 à 08h : 33 + N°1 devient : 20080830083301
(Le nombre de lignes est celui restant après la purge des doublons de la colonne D)
tekmars

Bon, j'ai réussi à faire les étapes de 1 à 4 :rolleyes:
serait-il possible de me donner un coup de main sur les 2 dernières étapes :eek:
Merci à toute âme charitable :p
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Projet "toilettage d'un tableau"

Bonjour Tekmars, bonjour le forum,

En pièce jointe ton fichier source contenant les codes commentés. Pour que ça fonctionne il faut que les classeurs SOURCE.xls et UF.xls soient ouverts. Dans source tu lances la macro macro1.

Tes résultats et les miens ne sont pas identiques :
1. Tu demandes de supprimer les doublons mais tu ne dis pas quel critère permet de garder l'original ? J'ai donc pris le premier de la liste...
2. Je n'ai pas compris ton exemple de Numéro Unique. J'ai donc pris :
jjmmaahhmm+clé (01, 02,...,99). où j=jour, m=mois, a=an, h=heure, m=minute

Mais je pense que tu pourras adapter facilement.
 

Pièces jointes

  • SOURCE.zip
    19.2 KB · Affichages: 48
  • SOURCE.zip
    19.2 KB · Affichages: 42
  • SOURCE.zip
    19.2 KB · Affichages: 44

tekmars

XLDnaute Nouveau
Re : Projet "toilettage d'un tableau"

Alors là, un grand MERCI pour la macro Robert, c'est exactement ce qu'il me faut. Il reste à modifier le dernier point de N°unique.

1 - Le but est d'éliminer les doublons de la colonne D. En fait il y a eu une erreur de ma part car les valeurs de la colonne A ne sont pas bonnes, d'où la différence entre nos résultats (si doublons dans la colonne D alors forcement doublons dans colonne A "mais pas l'inverse").
2 - en fait le N°unique doit comporter la date d'exécution de la macro par exemple. Je pense dans Excel c'est = MAINTENANT() mais il faut convertir en aammjjhhmm+clé.

Encore milles merci pour ton aide.
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Projet "toilettage d'un tableau"

Bonsoir Tekmars, bonsoir le forum,

Remplace cette partie de la macro :
Code:
'colonne F
Range("F1").Value = "Nº Unique" 'ecrit "Nº Unique" en F1
x = 1 'définit la variable x
For Each cel In plo.Offset(0, 1) 'boucle sur toutes les cellules cel de la colonne D
    cel.Offset(0, 2).NumberFormat = "@" 'applique le format texte
    cel.Offset(0, 2).Value = CStr(Format(Date, "yy")) _
        & CStr(Format(Date, "mm")) & CStr(Format(Date, "dd")) _
        & CStr(Format(Now, "hh")) & CStr(Format(Now, "mm"))
    cel.Offset(0, 2).Value = CStr(cel.Offset(0, 2).Value & CStr(Format(x, "00"))) 'rajoute la clé
    x = x + 1 'redéfinit la variable x
'colonne C
 
Dernière édition:

tekmars

XLDnaute Nouveau
Re : Projet "toilettage d'un tableau"

Bonsoir Robert,

c'est PARFAIT, je suis comblé :D.
Merci encore milles fois, grâce à toi je suis soulagé d'une tâche assez pénible dans mon travail (je dois faire cette mise en forme au mois 5 à 6 fois / jour avec des tableaux qui contiennent au moins 40 à 60 lignes à chaque fois).

Vive le forum.
 

budboy

XLDnaute Nouveau
Dans le même esprit

Salut le forum, Tekmars, Robert,

Je ne parviens pas à insérer de nouveau message sur le forum ainsi je présente mes excuses au cas où ma méthode de travail ne serait pas la bonne, je rencontre un problème de mise en forme de mon export proche de celui que vous évoquiez... et devinez quoi? j'ai besoin d'aide.

En effet, je souhaite générer un export au format txt de 2 colonnes contenues dans mon fichier excel, l'une contenant des chiffres (colonne C ) et l'autre des heures (colonne B - exemple "22:36:04")...

Soucis : mon export doit être généré dans un format bien spécifique de la forme = 1:a20081007223604158

colonne C & ":" & date du jour formatée de la sorte :20081007 & colone B formaté sans les ":" .

Après plusieurs jours de recherche sur divers forums, je suis bloqué à ca :

Private Sub cmdexport_Click()


With Sheets("Chrono")
Derligne = .Range("A65536").End(xlUp).Row


.Range("C2:C" & Derligne).Copy
.Range("B2:B" & Derligne).Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False

'ici ca coince je voudrais que les données contenues en colonne C soient enregistrées dans mon fichier texte suivi de ":a" puis la date du jour au format = 20081007 et enfin le contenu de la cellule B:B formaté sans les ":"

Range("A" & Derligne).Select
Selection.NumberFormat = "hhmmss"


End With
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\Export Heure.txt", _
FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Close SaveChanges:=False
MsgBox ("Chemin sauvegarde = " & ThisWorkbook.Path & "\Export.txt")
end sub


Je ne parviens pas à modifier la structure des lignes que j'enregistre dans le fichier texte.

Si quelqu'un comprend
Merci de votre aide
 

Staple1600

XLDnaute Barbatruc
Re : Projet "toilettage d'un tableau"

Bonsoir


Essaie cette macro

Code:
Sub ExportTXT()
'auteur macro originale : tatiak
'source:
'http://www.excel-downloads.com/forum/425784-post8.html
Dim i As Byte, Ligne As Integer
Dim chaine As String
Open ThisWorkbook.Path & "\Export.txt" For Append As #1
    With Sheets("Feuil1")
        For Ligne = 1 To .Range("C65536").End(xlUp).Row
            chaine = ""
            chaine = chaine & .Cells(Ligne, 3).Value & ":a" & Format(Date, "yyyymmdd") & Format(Cells(Ligne, 2).Value, "hhmmss")
            Print #1, chaine
        Next Ligne
    End With
    Close #1
End Sub
 

budboy

XLDnaute Nouveau
Re : Projet "toilettage d'un tableau"

Merci de ta réactivité staple 1600,

Je m'empresse de tester ca et reviendrais au commentaire rapidement... Mais ca me semble beaucoup mieux que ce que je n'arrivais pas à faire!

Bonne journée,
Budboy
 

budboy

XLDnaute Nouveau
Re : Projet "toilettage d'un tableau"

En effet,

Mes excuses et remerciements à tatiak pour ce premier code.

Peux tu me dire ce que je dois changer pour écraser le fichier export.txt, et non pas l'ouvrir et ré-écrire à la suite des données qu'il contient déjà.

J'ai bien essayer ca, mais le débugger n'en veut pas :

SaveAs Filename:=ThisWorkbook.Path & "\Export.txt" For Append As #1

Merci, et au plaisir de te lire...
Budboy
 

Staple1600

XLDnaute Barbatruc
Re : Projet "toilettage d'un tableau"

Re

Essaye ainsi


Code:
Sub ExportTXTb()
'auteur macro originale : tatiak
'source:
'http://www.excel-downloads.com/forum/425784-post8.html
Dim i As Byte, Ligne As Integer
Dim chaine As String
Open ThisWorkbook.Path & "\Export.txt" For Output As #1
    With Sheets("Feuil1")
        For Ligne = 1 To .Range("C65536").End(xlUp).Row
            chaine = ""
            chaine = chaine & .Cells(Ligne, 3).Value & ":a" & Format(Date, "yyyymmdd") & Format(Cells(Ligne, 2).Value, "hhmmss")
           Print #1, chaine
        Next Ligne
    End With
    Close #1
End Sub
 

Discussions similaires

Réponses
2
Affichages
486

Statistiques des forums

Discussions
311 737
Messages
2 082 036
Membres
101 878
dernier inscrit
1475214