Ajout d'info à un fichier codé
Bonjour à tous,
je reçois régulièrement un fichier excel qui contient des informations codés que je dois étayer afin d'être utile pour consultation. Je désire faire une macro qui me sauverait plusieurs heures de travail fastidieux.
Étape 1:
La col. A du feuillet databrut donne les identificateurs de stations.
Je cherche une macro qui ajouterait dans les colonnes suivantes le ID: le nom, la région et les coord. de la station (spécifiée dans le feuillet IDENT). À noter qu'il est possible que certains ID soient absents du feuillet: IDENT.
Étape 2. Les données propre aux stations se trouvent aux col. D,E,F,....
La macro doit donner des couleurs à ces données selon la lettre qui suit à la col. suivante.
Je joins un fichier simplifié avec des explications suppl.
Je vous remercie d'Avance pour votre aide.
JL
Ya eu un problème dans la jonction de ton fichier. Il faudrait que tu y remédies.
vba-new a écrit :Ya eu un problème dans la jonction de ton fichier. Il faudrait que tu y remédies.
Je ne comprend pas ce que tu veux dire. Quand je vais dans le message que j'ai envoyé et j'ouvre le fichier que j'Ai joint au message, je ne trouve aune anormalité?
À te relire
JL
Re,
Il y avait une petite erreur auparavant. Tu l'as apparemment réglée.
Pour ta demande, voici la macro qui_fait_tout
Sub qui_fait_tout()
Dim dercol As Long, derlign As Long, j As Integer, i As Long, cpt As Byte
On Error GoTo fin
If Not ThisWorkbook.Sheets("databrut2") Is Nothing Then
Application.ScreenUpdating = False 'désactive la mise à jour de l'écran
Application.DisplayAlerts = False 'Ici, pour éviter message d'alerte lors de la suppression d'une feuille
On Error Resume Next
Sheets("final").Delete 'on supprime la feuille "Final"
Sheets.Add after:=Sheets("databrut2") 'on crée une nouvelle feuille
ActiveSheet.Name = "final" 'que l'on nomme "final"
With Sheets("databrut2")
dercol = .Range("IV1").End(xlToLeft).Column 'dernière colonne de la feuille "databrut2"
derlign = .Range("A65536").End(xlUp).Row 'dernière ligne de la feuille "databrut2"
.Range("A1:A" & derlign).Copy _
Destination:=Sheets("final").Range("A2") 'on copie la colonne A vers la feuille "final"
.Range(.Cells(1, 2), .Cells(derlign, dercol)).Copy _
Destination:=Sheets("final").Range("G2") 'on copie les colonnes B jusqu'à ... vers la feuille "final"
End With
With Sheets("final")
.Range("A1:H1") = Array("ID", "Nom de la station", "région", "Lat", "Long", "Elev", "an/mois", "T") 'création de la ligne de titre
With .Range(Cells(1, 1), Cells(1, dercol + 5)) 'mise en forme de la ligne de titre
.Interior.ColorIndex = 15
.HorizontalAlignment = xlCenter
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
End With
'on crée les formules pour avoir les détails de chaque ID (Station, région...)
.Range("B2").FormulaR1C1 = _
"=IF(ISNA(VLOOKUP(RC1,IDENT!R2C1:R5C6,COLUMNS(R2C1:RC),FALSE)),""Non-disponible"",VLOOKUP(RC1,IDENT!R2C1:R5C6,COLUMNS(R2C1:RC),FALSE))"
.Range("B2").AutoFill Destination:=Range("B2:B" & derlign + 1)
.Range("B2:B" & derlign + 1).AutoFill Destination:=Range("B2:F" & derlign + 1)
'la boucle suivante permet d'attribuer les couleurs aux données
For j = 9 To dercol + 4
If j Mod 2 <> 0 Then Cells(1, j) = cpt + 1: cpt = cpt + 1
For i = 2 To derlign + 1
If .Cells(i, j + 1) = "T" Then
.Cells(i, j).Interior.ColorIndex = 36
ElseIf .Cells(i, j + 1) = "C" Then
.Cells(i, j).Font.ColorIndex = 3
ElseIf .Cells(i, j + 1) = "E" Then
.Cells(i, j).Font.ColorIndex = 4
ElseIf .Cells(i, j) = -99999 Then
.Cells(i, j) = 0: .Cells(i, j).Interior.ColorIndex = 15
End If
Next i
Next j
.Range(Cells(2, 9), Cells(derlign + 1, dercol + 4)).HorizontalAlignment = xlCenter 'centrage de quelques colonnes
Cells.EntireColumn.AutoFit 'ajustement de la taille des colonnes
.Range(Columns(9), Columns(dercol + 5)).ColumnWidth = 4.14
'on met des bordures
With .UsedRange
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
End With
End With
End If
Exit Sub
fin:
MsgBox "la feuille databrut2 n'existe pas", vbExclamation
End SubJLMoreau a écrit :Je désire faire une macro qui me sauverait plusieurs heures de travail fastidieux.
Suffit d'un peu moins de 2 centièmes de secondes de travail (sans compter le temps pour lancer la macro) et le tour est joué ! Elle est pas belle la vie ?
Avec en prime : quelques commentaires pour mieux comprendre les différents codes, une macro qui marche quelque soit le nombre de colonnes (puisque tu en as enlevé, on ne sait pas combien y'en a), et 2-3 autres bricoles...
Quelques préconisations :
- la feuille "databrut2" doit toujours exister et ne contenir que les données brutes (dans le fichier joint, j'ai enlevé les données inutiles pour l'exécution de la macro)
- s'il y a une feuille nommée "final", elle est supprimée. Une nouvelle feuille "final" est créée qui contiendra les données brutes retravaillées.
- les données brutes doivent garder la même structure (pas d'en-tête notamment)
S'il manque des trucs, ou si tu rencontres des problèmes, fais signe.
Le fichier :
Bonjour VBA-NEw et forum,
J'ai testé la macro et la vie promet d'être belle! Mais avant un petit problème à régler...
j'ai testé la macro sur un fichier plus élaboré (plus de stations) et pour une raison que j'ignore la correspondance entre le feuillet databrut et le feuillet IDENT a cessé après seulement 4 ID (même si il y a encore de nombreux ID identiques entre les 2 feuillets en question).
Autrement tout a très bien fonctionné.
J'avais oublié de dire que le feuillet: "final" comporte 70 colonnes à la fin du processus et quelques milliers de lignes (selon le nombre de mois dnas le fichier).
J'ai joint une version V2 du fichier: (encore simplifié dû aux limitations)
JL
PS. Je te remercie pour les explications en bonus dans la macro ça m'aide à comprendre tout cecharabia. Existe-t'il une documentation quelconque qui donne la liste des commandes (plus leur façon de les utiliser) acceptées dans les VBA?
Bonjour JLMoreau, forum,
C'est normalJLMoreau a écrit :la correspondance entre le feuillet databrut et le feuillet IDENT a cessé après seulement 4 ID
Voici la version corrigée :
J'ai testé la macro avec environ 5000 lignes et 85 colonnes. La macro met environ 40 secondes chez moi. Il doit être possible de faire plus vite mais c'est toujours mieux que quelques heuresJLMoreau a écrit :J'avais oublié de dire que le feuillet: "final" comporte 70 colonnes à la fin du processus et quelques milliers de lignes (selon le nombre de mois dnas le fichier).
Pour les débutants, 2 outils :JLMoreau a écrit :Existe-t'il une documentation quelconque qui donne la liste des commandes (plus leur façon de les utiliser) acceptées dans les VBA?
l'enregistreur de macro et la touche F1 ! Tu enregistres les actions que tu fais puis tu regardes le code associé. Ça t'aidera déjà beaucoup ! Si dans le code créé, tu as du mal à comprendre, clique sur un mot et appuie F1. La plupart du temps l'aide de visual basic éclairera ta compréhension !
Si tu ne comprends vraiment pas, le forum est là pour ça.
A+
Bravo! J'ai testé avec un méga fichier et tout fonctionne à la perfection. La ville est belle et je crois bien que je vais prendre quelques heures de congé aujourd'hui.
Encore merci!
JL