Tri et copie sous condition sur nouvelle page Excel

Bonjour à toutes et à tous,

Il s'agit de mon premier post

Je fais appel à votre aide car j'aimerais réaliser une tâche que je n'arrive pas à coder. Je vous explique.

Je réalise un document Excel d'évaluation des risques. Chaque page Excel correspond au risques d'un atelier. Les risques sont évalués et hiérarchiser en A, B et C selon leur criticité.

Mon problème :

J'aimerais créer une nouvelle page Excel "Plan d'action". Elle rassemblerait tous les risques côtés A de tous les ateliers sur une seule et même liste, celle de la feuille "plan d'action".

Je vous laisse consulter le fichier pour mieux comprendre.

(J'ai essayé de passer par la commande recherchev mais pas très satisfaisant. J'ai essayé de passer par l'enregistreur de macro mais cela ne fonctionne pas non plus)

Merci d'avance pour les courageux qui daigneront m'aider !

Personne ?

Un lien vers un topic similaire ?

Bonjour,

Il conviendrait :

1) qu'il y ait une feuille Plan d'action !

2) que tu indiques précisément quelles données doivent être transférées dans cette feuille

3) qu'il y ait quelques données dans ton classeur, que l'on puisse tester les diverses méthodes utilisables !

Cordialement.

Merci de votre réponse !

Alors :

1) La feuille plan d'action est déjà créée

2) Dans la feuille plan d'action j'aimerais qu'il y ai toute la ligne de risque classée en catégorie A (Cf exemple sur l'Excel de ce que j'aimerais avoir au final) pour chacun des risques classés A (donc de chaque atelier, donc de chaque feuille du Excel). Pour simplifier, l'idée serait qu'Excel examine la colonne de criticité, si la cellule = A, il copie la ligne entière dans la page plan d'action. Puis ligne suivante. Puis feuille suivante (atelier suivant). Et ce jusqu'à la feuille Plan d'action.

3) J'ai mis qques "exemples" dans les feuilles Environnement, Laboratoire et Service Technique + une page type plan d'action

Merci d'avance !

Sub PlandAction()
    Dim ws As Worksheet, PdA(), n%, i%, j%, a%
    For Each ws In ThisWorkbook.Worksheets
        Select Case ws.Name
            Case "Home1", "Données processus", "Méthodologie d'évaluation", _
             "Inventaire des risques", "Plan d'action"
            Case Else
                With ws
                    n = .Cells(.Rows.Count, 1).End(xlUp).Row
                    If n > 4 Then
                        For i = 5 To n
                            If .Cells(i, 15) = "A" Then
                                ReDim Preserve PdA(1 To 22, a)
                                For j = 1 To 22
                                    PdA(j, a) = .Cells(i, j)
                                Next j
                                a = a + 1
                            End If
                        Next i
                    End If
                End With
        End Select
    Next ws
    EffacerPlandAction
    If a > 0 Then
        With Worksheets("Plan d'action")
            With .Range("A8").Resize(a, 22)
                .Value = WorksheetFunction.Transpose(PdA)
                .Interior.ColorIndex = xlColorIndexNone
                .WrapText = True
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                With .Borders
                    .LineStyle = xlContinuous: Weight = xlThin
                End With
                .Columns(15).Interior.Color = vbRed
            End With
            .Activate
        End With
    End If
End Sub

Sub EffacerPlandAction()
    Dim n%
    With Worksheets("Plan d'action")
        n = .Cells(.Rows.Count, 15).End(xlUp).Row
        If n < 8 Then Exit Sub
        With .Range("A8:V" & n)
            .ClearContents
            .Borders.LineStyle = xlLineStyleNone
            .Interior.Color = RGB(217, 217, 217)
        End With
    End With
End Sub

Cliquer sur le bouton Mise à jour Plan dans Home1...

NB- Copier (et coller) est une manipulation Excel manuelle... En VBA, on fait autrement chaque fois qu'on le peut. Aussi, pas de copier-coller dans cette procédure...

La mise à jour du plan efface le plan antérieur et le reconstitue à partir des données des feuilles. Seules les valeurs sont reportées. La mise en forme est rétablie...

Cordialement.

Super travail MFerrand, du peu que j'ai pu tester le résultat est à la hauteur de mes espérances. Merci encore.

D'ici deux semaines je devrais pouvoir faire un essai avec le document rempli, et ainsi profiter pleinement de cette macro

(Et comment le transfert d'info se fait sans copier/coller ?)

Il se fait en constituant un tableau, ici :

                            If .Cells(i, 15) = "A" Then
                                ReDim Preserve PdA(1 To 22, a)
                                For j = 1 To 22
                                    PdA(j, a) = .Cells(i, j)
                                Next j
                                a = a + 1
                            End If

puis en affectant ce tableau sur la feuille destinataire :

            With .Range("A8").Resize(a, 22)
                .Value = WorksheetFunction.Transpose(PdA)

Une telle méthode ne peut être utilisée qu'en VBA.

Copier utilise la commande Copy, qui a pour effet de placer les données copiées dans le presse-papier de Windows. Le collage consiste ensuite à extraire les données du presse-papier pour les placer dans une plage. Lorsqu'on ne veut copier que des valeurs, copier ne présente guère d'intérêt, on peut alors se dispenser de transiter par le presse-papier, grâce à VBA.

En copiant on aurait pu reproduire simultanément la mise en forme, voire les formules, mais on n'a pas besoin des formules, et s'agissant de la mise en forme, si l'on veut conserver la mise en forme de ta feuille, il faut l'effacer lors de la mise à jour. Dans ces conditions, on l'établit lors de l'insertion des données en la limitant à la plage de données, à chaque fois.

Cordialement.

Merci pour ce complément d'information, même si je n'en ai pas compris grand chose

Il faut vraiment que je me motive à comprendre et apprendre ce langage, même si ça n'a pas l'air simple...

Bonjour à tous,

Je reviens de nouveau, une fois mon excel avancé. Il y a eu qques petites modifications, et la macro ne fonctionne plus... Je souhaitais que dans l'onglet "plan d'action" une macro puisse venir chercher tous les risques classés A et B dans les onglets de secteurs pour créer une liste synthétique (tous les risques A et B tout secteur confondus, pour créer le plan d'action).

Si l'un d'entre vous sait comment m'aider à adapter la macro pour mon document, je suis preneur

Antonin

18du-pour-macro.xlsm (628.47 Ko)

Bonjour,

J'ai relu la macro, elle est simple, elle parcourt les feuilles, en excluant certaines : "Home1", "Donn_es processus", "M_thodologie d'_valuation", "Inventaire des risques", "Plan d'action"

[liste extraite de la macro sur ton fichier, où 2 noms ont été modifiés et ne correspondent plus aux noms des feuilles respectives figurant dans le classeur ! ... Et j'aimerais bien savoir ce qui causé ce phénomène !!! ]

Ensuite, pour les feuilles retenues, on inventoriait la présence d'un "A" à partir de la ligne 5, en colonne 15 (soit O). Et dans ce cas on prélevait la ligne (colonnes 1 à 22, soit A à U) pour constituer le plan d'action.

Liste donc ce qui a changé dans ces indications, et il suffira de l'ajuster aux nouvelles indications...

Cordialement.

NB- J'ai noté une procédure défectueuse sur plusieurs points dans le Module2. Elle a vraisemblablement été "écorchée" et ne peut plus fonctionner en l'état...

Par ailleurs, 5 modules, en l'état de ton programme, c'est 4 de trop, et je conseillerais vivement de rassembler tes macros dans un seul module et supprimer les autres...

Bonjour M Ferrand,

J'ai en effet regroupé plusieurs feuilles en une seul pour certains cas. Néanmoins, quand j'active la macro rien ne ce passe ?

Aucun autre changements particulier à signaler, hormis que le tableau à été rempli

Antonin

As-tu vérifié que les éléments de la macro correspondaient bien à ton fichier ? Le cas s'étant déjà produit...

Rechercher des sujets similaires à "tri copie condition nouvelle page"