1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
Sub Rapport_Mensuel()
'variables objet
Dim Feuille As Worksheet
Dim Plage As Range
Dim Cel As Range
'variable pour la dernière ligne non vide
Dim Ligne As Long
'variable compteurs
Dim I As Long
Dim j As Long
Dim K As Long
'tableaux variants
Dim Tblo_A
Dim Tblo_B
'gèle la mise à jour
Application.ScreenUpdating = False
'pour que la référence à la feuille visée soit bien claire...
Set Feuille = Worksheets("Exemple données Feuil2")
'fait référence à la feuille
With Feuille
On Error Resume Next
'remplace les caracteres "," par "."
.Cells.SpecialCells(xlCellTypeConstants).Replace ",", "."
'Efface "Hiérarchie"
.Cells.SpecialCells(xlCellTypeConstants).Replace "Hiérarchie / ", ""
On Error GoTo 0
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row
Tblo_A = .Cells(4, 1).Resize(Ligne).Value 'A1 si on veut garder l'entête
For K = 1 To Ligne
Tblo_B = Split(Tblo_A(K, 1), " ") 'séparer les mots espacés de 4 espaces
For I = 0 To UBound(Tblo_B) 'chaque mots de la phrase
For j = I + 2 To UBound(Tblo_B) + 2
.Cells(K, j).Value = Tblo_B(I) 'ranger dans la cellule de droite le mot
Next j
Next I
Next K
.Columns("A:A").Delete Shift:=xlToLeft 'supprimer la 1ère colonne de données collés
.Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'efface toutes les lignes vides
.Columns("A:K").HorizontalAlignment = xlCenter 'centrer le texte
.Columns("D:E").NumberFormat = "General"
Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 3).End(xlUp))
For Each Cel In Plage
If Cel.Value = "---" Then Cel.Value = Cel.Offset(-1, 0).Value 'Si la cellule contient "---", elle prend la valeur de celle du dessus
Next Cel
'recherche la dernière cellule utilisée sur toutes les colonnes
Ligne = .Cells.Find("*", .Range("A1"), xlFormulas, , 1, 2).Row
For I = Ligne To 1 Step -1
If .Cells(I, 6) Like "---" And .Cells(I, 8) Like "---" Then .Rows(I).Delete 'efface les lignes si il y a "---" dans les colonnes F et H
If .Cells(I, 8) Like "OK" Or .Cells(I, 8) Like "Ensemble OK" Then .Rows(I).Delete 'efface les lignes si il y a "OK" ou "Ensemble OK" dans les colonnes F et H
If .Cells(I, 1) Like " " Then .Rows(I).Delete 'efface les lignes contenant " " bug?
If .Cells(I, 3) Like "Machine à l'arrêt" Then .Rows(I).Delete 'efface les lignes ou la colonne 3 contient "Machine à l'arrêt"
'rajouter les differents cas qui ne sont pas en alerte...
Next I
Set Plage = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
For Each Cel In Plage
If Cel.Value = "---" Then Cel.Value = Cel.Offset(-1, 0).Value 'Si la cellule dans la colonne F contient "---", elle prend la valeur de celle du dessus
Next Cel
Ligne = .Cells(.Rows.Count, 3).End(xlUp).Row
'Met sous la forme dd/mm/yyyy la date
For I = 1 To Ligne
If IsDate(Cells(I, 2)) Then
.Cells(I, 8) = Split(Cells(I, 2), " ")(1) 'extraction de l'heure
.Cells(I, 2).NumberFormat = "General"
.Cells(I, 2) = Format(DateValue(Day(.Cells(I, 2)) & "/" & Month(.Cells(I, 2)) & "/" & Year(.Cells(I, 2))), "dd/mm/yyyy")
End If
If IsDate(Cells(I, 3)) Then
.Cells(I, 9) = Split(Cells(I, 3), " ")(1) 'extraction de l'heure
.Cells(I, 3).NumberFormat = "General"
.Cells(I, 3) = Format(DateValue(Day(.Cells(I, 3)) & "/" & Month(.Cells(I, 3)) & "/" & Year(.Cells(I, 3))), "dd/mm/yyyy")
End If
Next I
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row
'Insere une ligne avant "Notes Nom Source"
For I = Ligne To 1 Step -1
If .Cells(I, 1) Like "Notes Nom source" Then .Rows(I).EntireRow.Insert Shift:=xlDown
Next I
.Columns(7).Delete Shift:=xlToLeft 'Supprime la colonne G "Message d'alarme
.Columns(4).Delete Shift:=xlToLeft 'Supprime la colonne D "Message d'alarme
.Columns(4).Delete Shift:=xlToLeft 'Supprime la colonne E "Message d'alarme
'remplace les caracteres " / " par " "
.Cells.SpecialCells(xlCellTypeConstants).Replace " / ", " "
'inserer 2 colonnes vierges
.Columns(2).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
.Columns(2).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row
Tblo_A = .Cells(1, 1).Resize(Ligne).Value
For I = 1 To Ligne
Tblo_B = Split(Tblo_A(I, 1), " ") 'séparer les mots espacés de 4 espaces
For j = 0 To UBound(Tblo_B) 'chaque mots de la phrase
For K = j + 2 To UBound(Tblo_B) + 2
.Cells(I, K).Value = Tblo_B(j) 'ranger dans la cellule de droite le mot
Next K
Next j
Next I
.Columns("A:A").Delete Shift:=xlToLeft 'supprimer la 1ère colonne de données collés
.Columns("B:B").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft 'efface les cellules vides de la colonne 2 en faisant un décallage vers la gauche
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row
For I = Ligne To 1 Step -1
If .Cells(I, 1) Like "Notes Nom source" Then .Rows(I).EntireRow.Delete 'Supprime la ligne "Notes Nom Source"
Next I
.Columns("A:K").Columns.AutoFit 'ajuster la largeur des colonnes
.Cells(1, 6).Value = "Heures"
End With
'rafraîchi
Application.ScreenUpdating = True
End Sub |