Excel Vba: восстановить во втором листе много информации первого листа (но после выполнения макроса первого листа) - PullRequest
0 голосов
/ 13 марта 2020

На данный момент у меня есть рабочая тетрадь с одним листом. Этот лист содержит заполненную таблицу и частично заполненную таблицу. Кроме того, он имеет кнопку, которая выполняет макрос, позволяющий заполнить часть этой таблицы.

Это мой файл Excel:

my excel file

Это мой код:

Sub groupByTypo2()
    Dim rng As Range, c As Range, dict, v, k, e As Range

    Set dict = CreateObject("scripting.dictionary")
    Set dict2 = CreateObject("scripting.dictionary")

    Set dictFonctionnel = CreateObject("scripting.dictionary")
    Set dictTechnique = CreateObject("scripting.dictionary")
    Set dictSecurite = CreateObject("scripting.dictionary")
    Set dictReglementaire = CreateObject("scripting.dictionary")
    Set dictPartenaire = CreateObject("scripting.dictionary")

    Dim var As Variant


    Dim MiMatriz As Variant
    Dim j As Long
    Dim ZZ As Long
    MiMatriz = Range("A1", Range("A1").End(xlDown)).Value

    Dim Tableau() As String
    Dim I As Integer

    'get the input range for the labels
    With ActiveSheet
        Set rng = .Range(.Range("C1"), .Cells(.Rows.Count, 3).End(xlUp))
        Set rng2 = .Range(.Range("A1"), .Cells(.Rows.Count, 1).End(xlUp))
    End With

    For Each c In rng.Cells
        v = Trim(c.Value)
        'if there's a label, add to the count
        If Len(v) > 0 Then dict(v) = dict(v) + c.Offset(0, -1).Value
        If Len(v) > 0 Then dict2(v) = dict2(v) + c.Offset(0, -2).Value


    Next c

    For j = 1 To UBound(MiMatriz) Step 1
        If Range("C" & j).Value = "Fonctionnel" Then
            For ZZ = 1 To 3 Step 1
                If Mid("[" & Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)) & "]", 2, 1) = "A" Then
                    dictFonctionnel("A") = dictFonctionnel("A") + Mid(Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)), 3) & Chr(10)
                ElseIf Mid("[" & Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)) & "]", 2, 1) = "B" Then
                    dictFonctionnel("B") = dictFonctionnel("B") + Mid(Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)), 3) & Chr(10)
                ElseIf Mid("[" & Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)) & "]", 2, 1) = "C" Then
                    dictFonctionnel("C") = dictFonctionnel("C") + Mid(Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)), 3) & Chr(10)
                End If
            Next ZZ
        ElseIf Range("C" & j).Value = "Technique" Then
            For ZZ = 1 To 3 Step 1
                If Mid("[" & Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)) & "]", 2, 1) = "A" Then
                    dictTechnique("A") = dictTechnique("A") + Mid(Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)), 3) & Chr(10)
                ElseIf Mid("[" & Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)) & "]", 2, 1) = "B" Then
                    dictTechnique("B") = dictTechnique("B") + Mid(Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)), 3) & Chr(10)
                ElseIf Mid("[" & Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)) & "]", 2, 1) = "C" Then
                    dictTechnique("C") = dictTechnique("C") + Mid(Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)), 3) & Chr(10)
                End If
            Next ZZ
        ElseIf Range("C" & j).Value = "Securite" Then
            For ZZ = 1 To 3 Step 1
                If Mid("[" & Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)) & "]", 2, 1) = "A" Then
                    dictSecurite("A") = dictSecurite("A") + Mid(Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)), 3) & Chr(10)
                ElseIf Mid("[" & Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)) & "]", 2, 1) = "B" Then
                    dictSecurite("B") = dictSecurite("B") + Mid(Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)), 3) & Chr(10)
                ElseIf Mid("[" & Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)) & "]", 2, 1) = "C" Then
                    dictSecurite("C") = dictSecurite("C") + Mid(Trim(Split(Split(MiMatriz(j, 1), "[")(ZZ), "]")(0)), 3) & Chr(10)
                End If
            Next ZZ
        End If


    Next j

    Debug.Print Chr(13) & Chr(10)
    'output the counts
    Debug.Print "Dico 1"
    For Each k In dict
        Debug.Print "Sum for '" & k & "' is " & dict(k)
    Next k

    Debug.Print Chr(13) & Chr(10)
    Debug.Print "DANS LE DICTIONNAIRE FONCTIONNEL POUR LA CLE A " & Chr(10) & dictFonctionnel("A")
    Debug.Print "DANS LE DICTIONNAIRE FONCTIONNEL POUR LA CLE B " & Chr(10) & dictFonctionnel("B")
    Debug.Print "DANS LE DICTIONNAIRE FONCTIONNEL POUR LA CLE C " & Chr(10) & dictFonctionnel("C")
    Debug.Print Chr(13) & Chr(10)
    Debug.Print "DANS LE DICTIONNAIRE TECHNIQUE POUR LA CLE A " & Chr(10) & dictTechnique("A")
    Debug.Print "DANS LE DICTIONNAIRE TECHNIQUE POUR LA CLE B " & Chr(10) & dictTechnique("B")
    Debug.Print "DANS LE DICTIONNAIRE TECHNIQUE POUR LA CLE C " & Chr(10) & dictTechnique("C")
    Debug.Print Chr(13) & Chr(10)
    Debug.Print "DANS LE DICTIONNAIRE SECURITE POUR LA CLE A " & Chr(10) & dictSecurite("A")
    Debug.Print "DANS LE DICTIONNAIRE SECURITE POUR LA CLE B " & Chr(10) & dictSecurite("B")
    Debug.Print "DANS LE DICTIONNAIRE SECURITE POUR LA CLE C " & Chr(10) & dictSecurite("C")


    If dict("Fonctionnel") <> "" Then
        Debug.Print "affiche cle test si elle existe fonctionnel : " & dict("Fonctionnel")
        Range("K7").Value = dict("Fonctionnel")
        Range("M7").Value = dictFonctionnel("A")
        Range("N7").Value = dictFonctionnel("B")
        Range("O7").Value = dictFonctionnel("C")
    End If
    If dict("Technique") <> "" Then
        Debug.Print "affiche cle test si elle existe technique : " & dict("Technique")
        Range("K6").Value = dict("Technique")
        Range("M6").Value = dictTechnique("A")
        Range("N6").Value = dictTechnique("B")
        Range("O6").Value = dictTechnique("C")
    End If
    If dict("Securite") <> "" Then
        Debug.Print "affiche cle test si elle existe securite : " & dict("Securite")
        Range("K8").Value = dict("Securite")
        Range("M8").Value = dictSecurite("A")
        Range("N8").Value = dictSecurite("B")
        Range("O8").Value = dictSecurite("C")
    End If
    If dict("Reglementaire") <> "" Then
        Debug.Print "affiche cle test si elle existe reglementaire : " & dict("Reglementaire")
        Range("K9").Value = dict("Reglementaire")
        Range("M9").Value = dictReglementaire("A")
        Range("N9").Value = dictReglementaire("B")
        Range("O9").Value = dictReglementaire("C")
    End If
    If dict("Partenaire") <> "" Then
        Debug.Print "affiche cle test si elle existe partenaire : " & dict("Partenaire")
        Range("K10").Value = dict("Partenaire")
        Range("M10").Value = dictPartenaire("A")
        Range("N10").Value = dictPartenaire("B")
        Range("O10").Value = dictPartenaire("C")
    End If


End Sub

Я бы хотел 2 листа в моей книге Excel. На листе 1 у меня есть таблица, заполненная различными значениями. На листе 2 у меня есть пустая таблица и кнопка. Что я хотел бы сделать: когда мы нажимаем кнопку, мы go на листе 1 и выполняем обработку макроса, затем мы восстанавливаем переменные на листе 2, чтобы мы могли заполнить таблицу на этом листе

Спасибо Вам за помощь!

1 Ответ

0 голосов
/ 15 марта 2020

Использование range.offset

    With ThisWorkbook.Sheets("Sheet2").Range("K6")
    If dict("Technique") <> "" Then
        Debug.Print "affiche cle test si elle existe technique : " & dict("Technique")
        .Offset(0, 0).Value = dict("Technique") ' K
        .Offset(0, 2).Value = dictTechnique("A") ' M
        .Offset(0, 3).Value = dictTechnique("B") ' N
        .Offset(0, 4).Value = dictTechnique("C") ' O
    End If
    If dict("Fonctionnel") <> "" Then
        Debug.Print "affiche cle test si elle existe fonctionnel : " & dict("Fonctionnel")
        .Offset(1, 0).Value = dict("Fonctionnel")
        .Offset(1, 2).Value = dictFonctionnel("A")
        .Offset(1, 3).Value = dictFonctionnel("B")
        .Offset(1, 4).Value = dictFonctionnel("C")
    End If
    If dict("Securite") <> "" Then
        Debug.Print "affiche cle test si elle existe securite : " & dict("Securite")
        .Offset(2, 0).Value = dict("Securite")
        .Offset(2, 2).Value = dictSecurite("A")
        .Offset(2, 3).Value = dictSecurite("B")
        .Offset(2, 4).Value = dictSecurite("C")
    End If
    If dict("Reglementaire") <> "" Then
        Debug.Print "affiche cle test si elle existe reglementaire : " & dict("Reglementaire")
        .Offset(3, 0).Value = dict("Reglementaire")
        .Offset(3, 2).Value = dictReglementaire("A")
        .Offset(3, 3).Value = dictReglementaire("B")
        .Offset(3, 4).Value = dictReglementaire("C")
    End If
    If dict("Partenaire") <> "" Then
        Debug.Print "affiche cle test si elle existe partenaire : " & dict("Partenaire")
        .Offset(4, 0).Value = dict("Partenaire")
        .Offset(4, 2).Value = dictPartenaire("A")
        .Offset(4, 3).Value = dictPartenaire("B")
        .Offset(4, 4).Value = dictPartenaire("C")
    End If
    End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...