#arrays #excel #vba
Вопрос:
Я работаю над проектом VBA, и мне нужен совет. Допустим, у меня есть столбец, заполненный датами, рядом с ним у меня есть таблица с 12 столбцами, где каждый столбец соответствует месяцу года. Я хотел бы понять, как я могу получить месяц в столбце даты и увеличить свою таблицу в соответствии с найденным месяцем. Пример: если дата 01/01/2021, я бы хотел, чтобы ячейка, соответствующая январю, увеличилась на 1. Спасибо
Dim donnees As Worksheet
Set donnees = ActiveWorkbook.Worksheets("Données")
Dim result As Worksheet
Set result = ActiveWorkbook.Worksheets("Résultats")
'Compteurs globaux
Dim cpt_total As Integer
Dim cpt_tot_anomalie As Integer
Dim cpt_tot_assistance As Integer
Dim cpt_tot_evolutions As Integer
Dim cpt_tot_autres As Integer
Dim cpt_tot_anciennete As Double
Dim cpt_tot_nbanciennete As Integer
'Variables d'execution
Dim temp_date As Date
Dim temp_int As Integer
cpt_total = 0
cpt_tot_anomalie = 0
cpt_tot_assistance = 0
cpt_tot_evolutions = 0
cpt_tot_autres = 0
cpt_tot_anciennete = 0
cpt_tot_nbanciennete = 0
'vider les cellules du tableau résultats
Worksheets("Résultats").Range("C4:C8").Value = ""
Worksheets("Résultats").Range("E5").Value = ""
Worksheets("Résultats").Range("E13:E19").Value = ""
Worksheets("Résultats").Range("F13:F19").Value = ""
Worksheets("Résultats").Range("G13:G19").Value = ""
Worksheets("Résultats").Range("H13:H19").Value = ""
Set mois = CreateObject("System.Collections.Arraylist")
Dim mois_value(50, 8) As Integer
'recherches des colonnes
Dim strSearch As String
etatSearch = Sheets("Paramètres").Range("S14").Value
resolutionSearch = Sheets("Paramètres").Range("S13").Value
soumissionSearch = Sheets("Paramètres").Range("S11").Value
typeftSearch = Sheets("Paramètres").Range("S10").Value
severiteSearch = Sheets("Paramètres").Range("S9").Value
dateresolutionSearch = Sheets("Paramètres").Range("S12").Value
'trouver à quel numéro de colonne correspond son nom
Set etat = donnees.Rows(1).Find(What:=etatSearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set soumission = donnees.Rows(1).Find(What:=soumissionSearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set resolution = donnees.Rows(1).Find(What:=resolutionSearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set typeFt = donnees.Rows(1).Find(What:=typeftSearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set severite = donnees.Rows(1).Find(What:=severiteSearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
donnees.Activate
nbFt = LastRow(1)
For i = 2 To nbFt Step 1
If InStr(donnees.Cells(i, etat.Column).Value, "nouveau") > 0 Then
GoTo NextFT
End If
cpt_total = cpt_total 1
If InStr(donnees.Cells(i, resolution.Column).Value, "ouvert") > 0 Then
cpt_tot_anciennete = cpt_tot_anciennete (Now - donnees.Cells(i, soumission.Column).Value)
cpt_tot_nbanciennete = cpt_tot_nbanciennete 1
End If
Select Case donnees.Cells(i, typeFt.Column).Value
Case "Anomalie"
cpt_tot_anomalie = cpt_tot_anomalie 1
Case "Demande d'assistance"
cpt_tot_assistance = cpt_tot_assistance 1
Case "Evolution"
cpt_tot_evolutions = cpt_tot_evolutions 1
Case Else
cpt_tot_autres = cpt_tot_autres 1
End Select
temp_date = donnees.Cells(i, soumission.Column).Value
If Not mois.Contains(CStr(Month(temp_date))) Then
mois.Add CStr(Month(temp_date))
End If
j = mois.IndexOf(CStr(Month(temp_date)), 0)
Select Case donnees.Cells(i, typeFt.Column).Value
Case "Anomalie"
mois_value(j, 4) = mois_value(j, 4) 1
Case "Demande d'assistance"
mois_value(j, 5) = mois_value(j, 5) 1
Case "Evolution"
mois_value(j, 6) = mois_value(j, 6) 1
End Select
NextFT:
Next
result.Activate
For i = 0 To mois.Count - 1 Step 1
result.Cells(14, 14 i) = mois_value(i, 6)
result.Cells(15, 14 i).Value = mois_value(i, 5) ' nombre de emandes d'assistances
result.Cells(16, 14 i).Value = mois_value(i, 4) ' anomalies
Next
End Sub
Комментарии:
1. Добро пожаловать в SO. Пожалуйста, дайте представление о том, что вы пробовали до сих пор.
2. @AndyA.конечно, я отредактировал свой ответ, чтобы вы могли увидеть мою сабу. Итак, сначала этот раздел используется при импорте моего файла. Поэтому мне нужно собрать значение даты в свой файл, а затем, в зависимости от значения месяца, поместить его в массив. (который содержит 12 столбцов, по одному на каждый месяц). Поэтому, если в моем файле 12 дат в апреле, мне нужна ячейка месяца апрель, чтобы напечатать 12. Надеюсь, это поможет, спасибо