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 178 179 180 181 182 183 184 185 186
|
Sub SOUS_DESTINATION_TRIPLET()
Dim Type_SD As String 'Fournit le type d'établissement
Dim Sce_SD As String 'Fournit le service
Dim Nature_SD As String 'Fournit la nature
Dim Sousdestination As String 'Fournit la sous-destination
Dim TRIPLET_SD As Range 'Fournit la plage de données
Dim Cpt As Long 'Compteur de cellules contenant des croisements
Dim c As Object 'Elément dans la plage de données
Dim CPT2 As Long 'Compteur pour la restitution
Dim Numline As Long 'Fournit le nombre de lignes de la plage
Dim Numcolonne As Long 'Fournit le nombre de colonnes de la plage
Dim Valeurlue As String 'Fournit le contenu de la cellule active
Dim Seekunderscore As Variant 'Fournit la position du "_" dans la chaîne
Dim Nbcaractere As Integer 'Fournit le nombre de caracatères dans la chaîne
Dim Nbpositionsnature As Integer 'Fournit le nombre de caractères utilisés pour coder la sous-destination
Dim Chainesce As String 'Fournit la chaîne pour récupérer dynamiquement le service
Dim Duree As String 'Durée du traitement
Dim Duree_deb As Date 'Durée du traitement
Dim Duree_fin As Date 'Durée du traitement
Dim Entete As Range 'Entête du tableau de restitution
Application.ScreenUpdating = False
Duree_deb = Now
ActiveWorkbook.Worksheets("Restitution").Select
'Suppression des données sur la feuille "Restitution" avant nouvel import
With Worksheets("Restitution").Range("B:B,C:C,D:D,E:E")
.Clear
End With
'Sélection de la feuille source
ActiveWorkbook.Worksheets("Source").Select
ActiveSheet.Cells(1400, 2).Select
'Insertion du type d'établissement
ActiveCell.Value = "TYPE ETABLISSEMENT"
ActiveCell.Offset(0, 1).Select
'Insertion du service
ActiveCell.Value = "SERVICE"
ActiveCell.Offset(0, 1).Select
'Insertion de la nature
ActiveCell.Value = "NATURE"
ActiveCell.Offset(0, 1).Select
'Insertion de la sous-destination
ActiveCell.Value = "SOUS-DESTINATION"
ActiveCell.Offset(1, -3).Select
'Sélection de la plage de données contenant les triplets "TRIPLET_SD
Application.Goto Reference:="TRIPLET_SD"
CPT2 = 1401
'Nombre de ligne de la plage de données
'Numline = Range("TRIPLET_SD").Rows.Count
'Nombre de colonnes de la plage de données
'Numcolonne = Range("TRIPLET_SD").Columns.Count
'Décompte du nombre de croisement nature*service
'For Each c In Range("TRIPLET_SD")
'If c.Value <> "" Then
'CPT = CPT + 1
'End If
'Next c
'Affichage du nombre de triplets de la base de données
'MsgBox " Il y'a " & CPT & " triplets"
For Each c In Range("TRIPLET_SD")
Valeurlue = c
If Valeurlue <> "" Then
'Affichage des coordonnées de la première cellule de la plage
'MsgBox ActiveCell.Address
'Affichage du contenu de la première cellule de la plage
'MsgBox ActiveCell.Value
'Lecture du contenu de la cellule active
Seekunderscore = InStr(1, Valeurlue, "_")
'Affichage de la postion de "_"
'MsgBox "Position du underscore " & Seekunderscore
'Lecture du type d'établissement dans la chaîne codée
Nbcaractere = Len(Valeurlue)
Nbpositionsnature = Nbcaractere - (Nbcaractere - (Seekunderscore - 1))
'MsgBox Nbpositionsnature
Type_SD = Left(Valeurlue, Nbpositionsnature)
'Affichage du type d'établissment
'MsgBox "le type d'établissement est " & Type_SD
'Lecture de la nouvelle chaîne tronquée, sans le type d'établissement
Chainesce = Right(Valeurlue, (Nbcaractere - Seekunderscore))
Seekunderscore = InStr(1, Chainesce, "_")
'Lecture dynamique du service dans la nouvelle chaîne
Sce_SD = Left(Chainesce, (Len(Chainesce) - (Len(Chainesce) - (Seekunderscore - 1))))
'Affichage du service
'MsgBox "le service est " & Sce_SD
'Lecture de la nature dans la chaîne codée
Nature_SD = Left(Right(Valeurlue, 12), 8)
'Affichage de la nature
'MsgBox "la nature est " & Nature_SD
'Recherche de la position de "_" à partir de la fin dans la chaîne codée
Seekunderscore = InStrRev(Valeurlue, "_", , vbTextCompare)
'Affichage de la postion de "_"
'MsgBox "Position du underscore " & Seekunderscore
'Nbcaractere = Len(Valeurlue)
'MsgBox "La chaîne comporte " & Nbcaractere & " caractères"
Nbpositionsnature = Nbcaractere - Seekunderscore
'MsgBox "La nature est codée sur " & Nbpositionsnature & " unités"
'Lecture de la sous-destination dans la chaîne de codes
Sousdestination = Right(Valeurlue, Nbpositionsnature)
'MsgBox "la sous-destination est " & Sousdestination
'MsgBox ActiveCell.Address
'ActiveWorkbook.Worksheets("Restitution").Select
ActiveSheet.Cells(CPT2, 2).Select
ActiveCell.Value = Type_SD
'MsgBox " la première cell de restit" & ActiveCell.Address
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Sce_SD
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Nature_SD
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Sousdestination
ActiveCell.Offset(1, -3).Select
'MsgBox ActiveCell.Address
CPT2 = CPT2 + 1
End If
Next c
'Export des données vers la feuille restitution
Range("B1400:E65536").Cut (Worksheets("Restitution").Range("B2"))
ActiveWorkbook.Worksheets("Restitution").Select
'Sélection de l'entête du tableau
Worksheets("Restitution").Range("B2:E2").Select
'Mise en gras de l'entête du tableau
Set Entete = Worksheets("Restitution").Range("B2:E2")
'Entete = Range("B2:E2")
'MsgBox Entete
Entete.Font.Bold = True
With Entete
'On centre horizontalement les cellules
.HorizontalAlignment = xlCenter
'On centre verticalement les cellules
.VerticalAlignment = xlCenter
'Alignement du texte dans les cellules, retour à la ligne
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
'Ajustement des cellules
.ShrinkToFit = False
.ReadingOrder = xlContext
'Fusion des cellules
.MergeCells = False
End With
'Largeur des colonnes
Columns("B:B").ColumnWidth = 15.71
Columns("E:E").ColumnWidth = 12.71
With Entete.Interior
'Couleur arrière-plan cellule
.ColorIndex = 37
'Arrière-plan de la cellule
.Pattern = xlSolid
End With
'Sélection de la colonne des services
Worksheets("Restitution").Range("C1:C65536").Select
'Mise au format du code service sur trois caractères
Range("C1:C65536").NumberFormat = "000"
Duree_fin = Now
'Calcul du temps de traitement
Duree = Format(Duree_fin - Duree_deb, "hh:mm:ss")
Duree = Minute(Duree)
MsgBox "La récupération des sous-destinations avec type d'établissement, service et nature est terminée!!" _
& vbCrLf + "La récupération s'est effectuée en " & Duree & " mn"
Application.ScreenUpdating = True
End Sub |
Partager