Aide pour comprendre 1 macro

Bonjour le forum

Je me permets de vous solliciter pour m'aider à comprendre 1 macro.

J'ai trouvé sur le forum 1 macro pouvant m'aider dans ce que j'aimerais faire. Malheureusement, mon niveau es un peu juste. est ce que quelqu'un pourrait me dire ?

Le code est le suivant :

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, "K").End(xlUp).Row - 14).Value

risque = .[K13].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

merci par avance

Bonne soirée

Bonsoir,

Que veux-tu savoir ? Une macro est écrite pour opérer sur un fichier déterminé selon la configuration de ce fichier.

Cette macro établit une matrice de risques, sous forme de tableau de 4 lignes sur 4 colonnes (matRisques), et l'affecte sur une feuille Matrice des risques, une fois terminé.

La matrice est établie à partir de données prélevées dans une autre feuille : Gestion des risques.

Les données utilisées sont prélevées dans les colonnes D d'une part, et K et L d'autre part, de la ligne 13 jusqu'à la fin des données, moins 2 lignes (?), ces données sont affectées sous forme de tableau à des variables de type Variant, respectivement test et risque.

On parcours les lignes de ces tableaux afin de remplir la matrice des risques : le tableau risque est utilisé pour définir les coordonnées de l'élément matrice qu'on va remplir, le tableau test fournit le contenu, qu'on cumule dans la matrice en séparant les données insérées par des tirets.

Une fois remplie, on parcours les éléments de la matrice pour en éliminer un tiret initial (dont la présence découlait de la méthode d'insertion).

Puis on l'affecte.

NB- Il serait bon que tu prennes l'habitude de placer le code cité dans un post sous balises Code </>. Il en sera beaucoup plus facilement lisible, et son indentation sera conservée.

Une macro fonctionne bien quand elle est parfaitement adaptée aux données qu'elle traite. Je ne suis pas très partisan de la récupération de macros ici ou là pour les utiliser dans des situations qui ont toutes chances d'être autres. On peut s'en inspirer le cas échéant, mais rien ne peut remplacer l'analyse préalable de ce que l'on veut réaliser dans fichier particulier sur les données qu'il contient.

Cordialement.

edit: Sous réserve de l'examen du fichier (seule façon de vérifier l'adéquation du code à son objet, mais c'est un peu secondaire puisque ton problème concerne un fichier différent, certainement), je me dois d'ajouter que ce code est d'excellente qualité, utilise des méthodes VBA particulièrement efficaces, que l'on pourra examiner dans le détail si besoin, méthodes que je conseillerais dès lors qu'elles se trouvent adaptées à ton projet...

Bonsoir à tous

Merci MFerrand

J'avais plus ou moins compris cela. Dans la mesure cela répondait à mon besoin, je voulais adapter la macro à mon fichier. cf en pièce jointe

Malheureusement j'ai un bug : la ligne "test = .[A7].Resize(.Cells(Rows.Count, "R").End(xlUp).Row - 20).Value

risque = .[R7].Resize(UBound(test), 2).Value" est en jaune

Sub matRisque()
    Dim test, risque, matRisque(1 To 4, 1 To 4) As String
    Dim lig As Long, col As Long
    With Sheets("BDD")
     test = .[A7].Resize(.Cells(Rows.Count, "R").End(xlUp).Row - 20).Value
        risque = .[R7].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

c'est la seule ligne que j'ai modifié. Est ce que quelqu'un pourrait m'éclairer ?

Je vous remercie par avance.

Bien à vous

15bdd.xlsm (22.52 Ko)

Ce qui apparaît, c'est qu'avec -20 ton redimensionnement est négatif, et un nombre de lignes négatif Excel va avoir du mal ?

La macro précédente faisait -14 avec la ligne de début à 13, ce qui faisait sauter 2 lignes à la fin, ce dont j'ignore la raison, n'ayant pas vu le fichier. Toi tu pars de la ligne 7, tu devrais donc faire -6 pour te dimensionner sur ta colonne de données, alors pourquoi ce -20 ?

Cordialement.

Bonsoir,

Quelqu'un pourrait me dire pourquoi la ligne en infra s'affiche en jaune . J'ai essayé de comprendre et, selon mon niveau, c'est cohérent . Je pensais que ce la forme des données qui n'allais pas : la colonne A de l'onglet "BDD" et issue de l'onglet "CAL"

matRisque(5 - risque(lig, 1), risque(lig, 2)) = matRisque(5 - risque(lig, 1), risque(lig, 2)) & " - " & test(lig, 1)

Je vous joins le fichier.

Merci par avance

Bien à vous

7bdd2.xlsm (24.26 Ko)

Salut Laraissa,

si j'interprète bien ton code et tes feuilles,

- Attendu que les index de matRisque sont...

matRisque(1 To 4, 1 To 4)

;

- Vu que

risque = .[V24].Resize(UBound(test), 2).Value

... est vide!!

- Constatons que...

matRisque(5 - risque(lig, 1), risque(lig, 2))

ne risque pas d'aller puisque,

matRisque(5 - 0 (=5), 0)

ne correspondent pas aux index de matRisque... 1 To 4, 1 To 4!!

Sauf erreur d'interprétation, bien sûr!

A+

Bonjour à tous,

quelqu'un a des news de MFerrand ? Il y a bien longtemps que je ne l'ai vu ici...

eric

Salut Eriiic,

j'ai lu, dans une autre rubrique de ce forum, que MFerrand, hélàs, était décédé, si j'ai bonne mémoire, en décembre 2018...

Une grande perte...

A+

Merci Curulis.

C'est bien ce que je craignais, une bien mauvaise nouvelle.

eric

Bonsoir curulis57

Effectivement c'est une grande perte pour le forum.

Merci pour ton retour très clair. Ne maîtrisant pas encore très bien VBA, pourrais-tu s'il te plait, m'aider pour la correction?

J'ai procédé à quelques modifications mais l'erreur persiste.

Merci par avance.

Hello le forum,

Personne pour m'aider ?

Bonjour,

et Message par curulis57 » 03 nov. 2019, 23:33 ?

Tu n'as fait aucun retour.

eric

Bonjour,

Sub matRisque()
    Dim test, risque, matRisque(1 To 4, 1 To 4) As String
    Dim lig As Long, col As Long

    With Sheets("BDD")

        test = .Cells(7, 1).Resize(.Cells(Rows.Count, "R").End(xlUp).Row - 6, 18).Value
        risque = .Cells(7, 18).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

Salut Eric,

j'ai répondu mais j'ai oublié de citer son message.

Bien à toi

Salut These,

je vous remercie pour ton retour. je ne comprends pas cette ligne

  test = .Cells(7, 1).Resize(.Cells(Rows.Count, "R").End(xlUp).Row - 6, 18).Value

Je ne comprends pas pourquoi R. Suite au bug, j'ai remplacé par V. Le bug a été résolu mais un nouveau bug sur la ligne

 matRisque(5 - risque(lig, 1), risque(lig, 2)) = matRisque(5 - risque(lig, 1), risque(lig, 2)) & "-" & test(lig, 1)

Je ne sais quoi faire. Pourriez vous m'éclairer?

Merci d'avance

Bonjour,

Je viens de m'apercevoir que tu as posté deux fichiers et je me suis basé sur le premier quand j'ai posté mon premier code

Voici le code par rapport au second fichier avec quelques commentaires :

Sub matRisque()

    Dim test, risque, matRisque(1 To 4, 1 To 4) As String
    Dim lig As Long, col As Long

    With Sheets("BDD")

        'recupère dans un tableau les valeurs de A7 à U15 en définissant
        'la dernière ligne de la colonne U par rapport à la colonne V
        test = .Cells(7, 1).Resize(.Cells(Rows.Count, "V").End(xlUp).Row - 6, 21).Value

        'recupère dans un autre tableau le Range de V7 à X15 "Cells(7, 22)" = V7
        risque = .Cells(7, 22).Resize(UBound(test), 3).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
Rechercher des sujets similaires à "aide comprendre macro"