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 SubCliquer 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 Ifpuis 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
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...