Copier les lignes des feuilles dans une autre sous condition

Bonjour à tous,

je débarque tout juste sur ce super forum car j'ai un léger souci

Je m'explique... J'ai un fichier contenant 31 feuilles, correspondant aux 31 jours du mois.

J'aimerais que toutes les lignes de toutes les feuilles qui contiennent le message "Fraude importante" soient copiées dans une dernière feuille appelée "Fraudes".

Après une recherche, je suis tombé sur un bout de code VBA qui m'a déjà bien aidé. Mais il faudrait ajouter la condition que la cellule en G contienne "Fraude importante" pour copier la ligne.

Il faudrait aussi que la macro ne m'efface pas la 1ère ligne du fichier Fraudes quand je la lance.

Quelqu'un pour m'aider???

Voici le code VBA que j'ai :

Sub transfert()
'Macro Dan pour CecileCosma - 20/09/12
Dim dlgR As Integer, dlgi As Integer
Dim i As Byte

With Sheets("Fraudes")
dlgR = .Range("D" & Rows.Count).End(xlUp).Row
.Range("A2:M" & dlgR).ClearContents
End With

For i = 1 To Worksheets.Count
    If Sheets(i).Name <> "Fraudes" Then
            'MsgBox Sheets(i).Name
            dlgR = Sheets("Fraudes").Range("A" & Rows.Count).End(xlUp).Row
            With Sheets(i)
                dlgi = .Range("A" & Rows.Count).End(xlUp).Row
                .Range("A2:M" & dlgi).Copy Sheets("Fraudes").Range("A" & dlgR + 1)
            End With
    End If
Next
End Sub

Je joins également le fichier excel en question

PS : Merci Dan pour ton code que j'ai trouvé sur un ancien sujet

Bonjour,

Une proposition Power Query.

Nécessite l'installation du complément gratuit de Microsoft.

https://support.office.com/fr-fr/article/Présentation-de-Microsoft-Power-Query-pour-Excel-6E92E2F4-2079-4E1F-BAD5-89F6269CD605

https://www.microsoft.com/fr-FR/download/details.aspx?id=39379

Le classeur comporte 31 feuilles par défaut.

Les données sont sous forme de tableaux (structurés).

L'actualisation est automatique à l'activation de la feuille Fraudes.

Pour résumer, pas de VBA, sauf pour l'actualisation de la requête.

Cdlt.

7tests-dispatch.xlsm (122.83 Ko)

Salut tijey027,

Salut Jean-Eric,

étant largué en matière de PowerQuery, je me contenterai dinosauresquement de ce code VBA...

Code en 'ThisWorkbook', la macro démarrant sur un double-clic dans n'importe quelle feuille.

En fonction de tes habitudes de travail, on peut évidemment exécuter cette macro selon la méthode qui te convient le mieux!

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'
Dim sWk As Worksheet
Dim iRow%
'
Cancel = True
Application.ScreenUpdating = False
'
Set sWk = Worksheets("Fraudes")
With sWk
    iRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A2:H" & iRow).Delete
    iRow = 1
End With
'
For x = 1 To Sheets.Count
    If Sheets(x).Name <> "Fraudes" Then
        With Sheets(x)
            For y = 2 To .Range("A" & Rows.Count).End(xlUp).Row
                If LCase(.Range("G" & y).Value) = "fraude importante" Then
                    iRow = iRow + 1
                    sWk.Range("A" & iRow).Resize(1, 8).Value = .Range("A" & y).Resize(1, 8).Value
                End If
            Next
        End With
    End If
Next
sWk.Columns.AutoFit
sWk.Activate
'
Application.ScreenUpdating = True
'
End Sub

A+

5tijey.xlsm (21.51 Ko)

Re,

Bonjour curulis57,

Ci-dessous, la requête Power Query, pour consolider les 31 jours du mois.

Seule la première ligne est saisie manuellement. Le reste s'effectue avec les commandes du Ruban dans l'éditeur Power Query.

Moins d'une minute pour réaliser la chose (je ne parle pas de la création des feuilles et des tableaux )

Alors, pas curieux d'en apprendre un peu plus sur la bête ?

Cdlt.

let
    Source = Excel.CurrentWorkbook(),
    #"Lignes filtrées1" = Table.SelectRows(Source, each [Name] <> "T_Fraudes" and [Name] <> "T_Actualisation"),
    #"Valeur remplacée" = Table.ReplaceValue(#"Lignes filtrées1","T_","",Replacer.ReplaceText,{"Name"}),
    #"Colonnes renommées" = Table.RenameColumns(#"Valeur remplacée",{{"Name", "Jour"}}),
    #"Content développé" = Table.ExpandTableColumn(#"Colonnes renommées", "Content", {"Heure", "Ligne", "Parcours", "ODM",
     "Localité", "Chauffeur", "Message", "Réponse"}, {"Heure", "Ligne", "Parcours", "ODM", "Localité", "Chauffeur", "Message", "Réponse"}),
    #"Lignes filtrées" = Table.SelectRows(#"Content développé", each ([Heure] <> null) and ([Message] = "Fraude importante")),
    #"Colonnes permutées" = Table.ReorderColumns(#"Lignes filtrées",{"Jour", "Heure", "Ligne", "Parcours", "ODM", "Localité", "Chauffeur", "Message", "Réponse"})
in
    #"Colonnes permutées"

Salut à tous les deux,

Un grand merci pour vos solutions proposées.

Je viens de tester celle de curulis57 , elle fonctionne très bien

Cependant, quand je veux maintenant double cliquer dans une cellule pour en modifier la valeur, je ne sais plus. Y a-t-il un moyen de modifier cela?

Jean-Eric, je testerai la tienne tantôt quand j'aurai un peu plus de temps , mais je penses que le fait de devoir installer un plugin va me freiner, car on va travailler sur le fichier sur un pc où l'on n'a pratiquement aucun droit administrateur

Bonne journée

Salut tijey027,

pourquoi double-cliquer sur une cellule pour la modifier ? Une simple sélection suffit !

Cela dit, on peut démarrer depuis un bouton, depuis une cellule précise..., etc...

@Jean-Eric : houla, tu as dû passer un mois de retraite pour apprendre quasi un nouveau langage !

Je ne sais déjà pas comment installer la bête!

Bon, j'ajoute donc PowerQuery aux TCD et Dico : va être chaude, la retraite...

A+

Bonjour,

@curulis57,

Pour Excel 2016 et les versions ultérieures, Power Query est natif (Ruban, Données,Récupérer et transformer des données).

https://support.office.com/fr-fr/article/aide-de-microsoft-power-query-pour-excel-2b433a85-ddfb-420b-9cda-fe0e60b82a94?ui=fr-FR&rs=fr-FR&ad=FR

Cdlt.

Salut l'équipe,

@Jean-Eric, j'ai trouvé la bête (pas compliqué, tu me diras!), chipoté un peu (mal, certainement), pu implanter ta requête et obtenu deux feuilles de résultats (1 pour chaque feuille de données du fichier reçu, sans doute) : une correcte, l'autre acceptant d'autres messages de la colonne [G:G].

Faudrait un peu bosser dessus, évidemment... mais pas dans l'immédiat...

Faut un début à tout, n'est-ce pas ?

Merci pour l'étrier, en tout cas!

A+

Voilà voilà j'en ai fini avec mon problème du coup, encore merci à vous!

curulis57, le double clic dans la cellule pour modifier le contenu déjà encodé

J'ai modifié ta macro pour qu'elle s'active lorsqu'on active la feuille fraude importante.

Ca marche vraiment nickel! Merci

Jean-Eric, je reviens vers toi ASAP, dès que j'ai eu l'occase de tester!

Bonne journée à vous!

Bonjour Curulis57

J'ai tenté de mettre en pratique la solution proposée. Néanmoins je rencontre des soucis...

Visiblement le test de comparaison du message recherché (Fraude importante) ne se fait pas.

Serait-ce à cause du fait que la cellule sur laquelle on teste soit une liste?

Je joins une version du fichier sur lequel je travaille, j'espère que quelqu'un pourra m'aider

J'ai recopié le code pour faire la même chose avec un autre message, à savoir 'Fraude import." Là pareil, ça ne va pas

Bonne soirée à vous tous et merci d'avance

Rechercher des sujets similaires à "copier lignes feuilles condition"