Matrice des risques VBA

Bonjour j'ai besoin d'aide pour le code VBA d'une création de matrice des risques :

Les colonnes 'risques définis' , 'Po', et 'I' (onglet 'Gestions des risques' servent à l'élaboration de la matrice dans l'onglet 'Matrice des risques'.

Le code doit me permettre d'afficher la matrice exactement là où sont positionnées les couleurs.

J'ai déjà essayé de regarder si des questions similaires dans le forum avaient trouvé une réponse adaptable à mon problème mais je n'ai jamais pu afficher les macro correctement...

Pouvez-vous m'aider c'est très urgent ! =S

Voilà ce que j'ai essayé de faire : (et qui ne fonctionne pas)

Sub programme_matrice()

'Declaration des variables

Dim Risque_def() As String ' vecteur risques

Dim Vect_Po() As Long ' vecteur probabilité d'occurence

Dim Vect_I() As Long ' vecteur impact

ThisWorkbook.Worksheets("Gestion des risques").Activate

Call Lire_Cellules(Risque_def, a7Chaine, "selectionnez le vecteur 'risque défini' ")

Call Lire_Cellules(Vect_Po, a7Single, "selectionnez le vecteur 'Probabilité d'occurence Po' ")

Call Lire_Cellules(Vect_I, a7Single, "selectionnez le vecteur 'impact I' ")

Dim aux11 As String, aux12 As String, aux13 As String, aux14 As String

Dim aux21 As String, aux22 As String, aux23 As String, aux24 As String

Dim aux31 As String, aux32 As String, aux33 As String, aux34 As String

Dim aux41 As String, aux42 As String, aux43 As String, aux44 As String

Dim i As Integer, j As Integer, k As Integer

For i = 1 To UBound(Risque_def)

For j = 1 To UBound(Vect_Po)

For k = 1 To UBound(Vect_I)

If Vect_Po(i) = 1 And Vect_I(i) = 1 Then

aux11 = aux11 & Risque_def(i)

ElseIf Vect_Po(i) = 1 And Vect_I(i) = 2 Then

aux12 = aux12 & Risque_def(i)

ElseIf Vect_Po(i) = 1 And Vect_I(i) = 3 Then

aux13 = aux13 & Risque_def(i)

ElseIf Vect_Po(i) = 1 And Vect_I(i) = 4 Then

aux14 = aux14 & Risque_def(i)

ElseIf Vect_Po(i) = 2 And Vect_I(i) = 1 Then

aux21 = aux21 & Risque_def(i)

ElseIf Vect_Po(i) = 2 And Vect_I(i) = 2 Then

aux22 = aux22 & Risque_def(i)

ElseIf Vect_Po(i) = 2 And Vect_I(i) = 3 Then

aux23 = aux23 & Risque_def(i)

ElseIf Vect_Po(i) = 2 And Vect_I(i) = 4 Then

aux24 = aux24 & Risque_def(i)

ElseIf Vect_Po(i) = 3 And Vect_I(i) = 1 Then

aux31 = aux31 & Risque_def(i)

ElseIf Vect_Po(i) = 3 And Vect_I(i) = 2 Then

aux32 = aux32 & Risque_def(i)

ElseIf Vect_Po(i) = 3 And Vect_I(i) = 3 Then

aux33 = aux33 & Risque_def(i)

ElseIf Vect_Po(i) = 3 And Vect_I(i) = 4 Then

aux34 = aux34 & Risque_def(i)

ElseIf Vect_Po(i) = 4 And Vect_I(i) = 1 Then

aux41 = aux41 & Risque_def(i)

ElseIf Vect_Po(i) = 4 And Vect_I(i) = 2 Then

aux42 = aux42 & Risque_def(i)

ElseIf Vect_Po(i) = 4 And Vect_I(i) = 3 Then

aux43 = aux43 & Risque_def(i)

ElseIf Vect_Po(i) = 4 And Vect_I(i) = 4 Then

aux44 = aux44 & Risque_def(i)

End If

Next k

Next j

Next i

Call Ecrire_Feuille_Active(aux11, 22, 3)

Call Ecrire_Feuille_Active(aux12, 22, 4)

Call Ecrire_Feuille_Active(aux13, 22, 5)

Call Ecrire_Feuille_Active(aux14, 22, 6)

Call Ecrire_Feuille_Active(aux21, 21, 3)

Call Ecrire_Feuille_Active(aux22, 21, 4)

Call Ecrire_Feuille_Active(aux23, 21, 5)

Call Ecrire_Feuille_Active(aux24, 21, 6)

Call Ecrire_Feuille_Active(aux31, 20, 3)

Call Ecrire_Feuille_Active(aux32, 20, 4)

Call Ecrire_Feuille_Active(aux33, 20, 5)

Call Ecrire_Feuille_Active(aux34, 20, 6)

Call Ecrire_Feuille_Active(aux41, 19, 3)

Call Ecrire_Feuille_Active(aux42, 19, 4)

Call Ecrire_Feuille_Active(aux43, 19, 5)

Call Ecrire_Feuille_Active(aux44, 19, 6)

MsgBox ("La Matrice des risques est remplie") 'MessageBox info

End Sub

Bonjour,

quand c'est pressé on essaie d'être clair...

Le code doit me permettre d'afficher la matrice exactement là où sont positionnées les couleurs.

Ca veut dire quoi au juste ???

Au début j'ai pensé, et fait sans doute pour rien, que tu voulais colorer J13:J72 mais visiblement ce n'est pas puisque c'est seulement à la fin que j'ai vu que tu le faisais avec une MFC...

Et quand tu colles un code rend-le lisible en utilisant la balise Code (au-dessus quand tu édites)

eric

Mon but est de remplir la matrice de l'onglet "Matrice des Risques" avec le contenu de la colonne "Risque défini" qui se situe dans l'onglet "Gestion des risques" .

exemple n°1 : test1 a pour Po=1 (ordonnée) et I=1 (Abscisse) ; le texte 'test1' devra donc s'écrire tout en bas à gauche dans la matrice des risques (ici case C22)

exemple n°2: test2 pour Po=4 (ordonnée) et I=4 (Abscisse) ; le texte 'test2' devra donc s'écrire tout en haut à droite dans la matrice des risques (ici case F19)

Voici le code que j'ai essayé de faire :

Est-ce plus lisible ? Je suis désolée c'est la première fois que je demande de l'aide dans un forum.

Sub programme_matrice()

'Declaration des variables
    Dim Risque_def() As String      ' vecteur risques
    Dim Vect_Po() As Long     ' vecteur probabilité d'occurence
    Dim Vect_I() As Long    ' vecteur impact

ThisWorkbook.Worksheets("Gestion des risques").Activate       

    Call Lire_Cellules(Risque_def, a7Chaine, "selectionnez le vecteur 'risque défini' ")    
    Call Lire_Cellules(Vect_Po, a7Single, "selectionnez le vecteur 'Probabilité d'occurence Po' ")
    Call Lire_Cellules(Vect_I, a7Single, "selectionnez le vecteur 'impact I' ")

    Dim aux11 As String, aux12 As String, aux13 As String, aux14 As String
    Dim aux21 As String, aux22 As String, aux23 As String, aux24 As String
    Dim aux31 As String, aux32 As String, aux33 As String, aux34 As String
    Dim aux41 As String, aux42 As String, aux43 As String, aux44 As String

    Dim i As Integer, j As Integer, k As Integer

    For i = 1 To Ubound(Risque_def)

                If Vect_Po(i) = 1 Then
                    aux11 = aux11 & Risque_def(i)
                ElseIf Vect_Po(i) = 1 And Vect_I(i) = 2 Then
                    aux12 = aux12 & Risque_def(i)
                ElseIf Vect_Po(i) = 1 And Vect_I(i) = 3 Then
                    aux13 = aux13 & Risque_def(i)
                ElseIf Vect_Po(i) = 1 And Vect_I(i) = 4 Then
                    aux14 = aux14 & Risque_def(i)
                ElseIf Vect_Po(i) = 2 And Vect_I(i) = 1 Then
                    aux21 = aux21 & Risque_def(i)
                ElseIf Vect_Po(i) = 2 And Vect_I(i) = 2 Then
                    aux22 = aux22 & Risque_def(i)
                ElseIf Vect_Po(i) = 2 And Vect_I(i) = 3 Then
                    aux23 = aux23 & Risque_def(i)
                ElseIf Vect_Po(i) = 2 And Vect_I(i) = 4 Then
                    aux24 = aux24 & Risque_def(i)
                ElseIf Vect_Po(i) = 3 And Vect_I(i) = 1 Then
                    aux31 = aux31 & Risque_def(i)
                ElseIf Vect_Po(i) = 3 And Vect_I(i) = 2 Then
                    aux32 = aux32 & Risque_def(i)
                ElseIf Vect_Po(i) = 3 And Vect_I(i) = 3 Then
                    aux33 = aux33 & Risque_def(i)
                ElseIf Vect_Po(i) = 3 And Vect_I(i) = 4 Then
                    aux34 = aux34 & Risque_def(i)
                ElseIf Vect_Po(i) = 4 And Vect_I(i) = 1 Then
                    aux41 = aux41 & Risque_def(i)
                ElseIf Vect_Po(i) = 4 And Vect_I(i) = 2 Then
                    aux42 = aux42 & Risque_def(i)
                ElseIf Vect_Po(i) = 4 And Vect_I(i) = 3 Then
                    aux43 = aux43 & Risque_def(i)
                ElseIf Vect_Po(i) = 4 And Vect_I(i) = 4 Then
                    aux44 = aux44 & Risque_def(i)
                End If

    Next i

    Call Ecrire_Feuille_Active(aux11, 22, 3)
    Call Ecrire_Feuille_Active(aux12, 22, 4)
    Call Ecrire_Feuille_Active(aux13, 22, 5)
    Call Ecrire_Feuille_Active(aux14, 22, 6)
    Call Ecrire_Feuille_Active(aux21, 21, 3)
    Call Ecrire_Feuille_Active(aux22, 21, 4)
    Call Ecrire_Feuille_Active(aux23, 21, 5)
    Call Ecrire_Feuille_Active(aux24, 21, 6)
    Call Ecrire_Feuille_Active(aux31, 20, 3)
    Call Ecrire_Feuille_Active(aux32, 20, 4)
    Call Ecrire_Feuille_Active(aux33, 20, 5)
    Call Ecrire_Feuille_Active(aux34, 20, 6)
    Call Ecrire_Feuille_Active(aux41, 19, 3)
    Call Ecrire_Feuille_Active(aux42, 19, 4)
    Call Ecrire_Feuille_Active(aux43, 19, 5)
    Call Ecrire_Feuille_Active(aux44, 19, 6)

    MsgBox ("La Matrice des risques est remplie")   'MessageBox info

End Sub

Il fallait qu'on devine ça ? Hé bé, tu nous prêtes plus de pouvoir qu'on en a...

Par contre 60 tests pour 16 cellules, il faut qu'on devine qu'il faut concaténer au risque que tu veuilles autre chose ou tu penses pouvoir le dire ?

oui il faut concaténer. Désolé c'est plus facile à expliquer à l'oral qu'à l'écrit...

Bonjour,

Sub matRisque()
    Dim test, risque, matRisque(1 To 4, 1 To 4) As String
    Dim lig As Long, col As Long
    With Sheets("Gestion des risques")
        test = .[D13].Resize(.Cells(Rows.Count, "J").End(xlUp).Row - 12).Value
        risque = .[J13].Resize(UBound(test), 2).Value
    End With
    For lig = 1 To UBound(test)
        matRisque(5 - risque(lig, 1), risque(lig, 2)) = matRisque(5 - risque(lig, 1), risque(lig, 2)) & "-" & test(lig, 1)
    Next lig
    For lig = 1 To 4
        For col = 1 To 4
            matRisque(lig, col) = Mid(matRisque(lig, col), 2)
        Next col
    Next lig
    Sheets("Matrice des risques").[C19].Resize(4, 4) = matRisque
End Sub

eric

Merci beaucoup c'est parfait !!

Au niveau de la concaténation j'ai juste remplacé le "--" par Chr(10) pour un renvoi à la ligne du texte de chaque risque

Rechercher des sujets similaires à "matrice risques vba"