Insertion de ligne selon conditions

Bonjour,

J'ai un classeur dans lequel se trouve 5 onglets : A, B, C, D & Agrégation. Dans les onglets A, B, C & D j'ai 6 colonnes dans lesquelles se trouvent des données.

Ce que je souhaite faire c'est la chose suivante lorsque je clique sur le bouton "Mettre à jour les priorités": IF condition 1, condition 2 & condition 3 des onglets A, B, C & D sont set à "Yes" THEN insérer dans l'onglet Agrégation les lignes correspondantes.

J'ai ajouté un fichier dans lequel j'ai illustré mes exemples.

5classeur-1.xlsm (26.76 Ko)

Merci d'avance pour votre aide.

Pablito

Bonjour,

Voici une tentative:

7classeur-1.xlsm (30.72 Ko)

Le code:

Sub test()
Dim Feuille As Worksheet
Dim colDep As Integer, colFin As Integer, nbCol As Integer, numLigne As Integer
Dim Lignes As New Collection
Dim infos As Variant, tableau As Variant, agregation As Variant
Dim conditionOk As Boolean
Dim nomFeuille As String

ReDim infos(1 To 1, 1 To 2)
colDep = 2
colFin = 4
nbCol = Sheets("Agrégation").Range("A1").CurrentRegion.Columns.Count

'dimensionnement tableau final
For Each Feuille In ThisWorkbook.Worksheets
    If Not Feuille.Name = "Agrégation" Then
        infos(1, 1) = Feuille.Name

        'initialisation tableau de la feuille
        tableau = Feuille.Range("A1").CurrentRegion.Value

        'boucle pour vérifier les conditions sur chaque ligne
        For i = 2 To UBound(tableau, 1)
            conditionOk = True

            'regarde si quelque chose d'autre qu'un "oui" est présent dans les colonnes condition
            For j = colDep To colFin
                If Not LCase(tableau(i, j)) = "oui" Then
                    conditionOk = False
                    Exit For
                End If
            Next j

            'si que des "oui" trouvés
            If conditionOk Then
                infos(1, 2) = i 'on enregistre la ligne de la feuille dans les infos
                Lignes.Add infos 'on ajoute les infos à la liste de lignes avec nom de feuille et numéro de ligne
            End If
        Next i
    End If
Next Feuille

'agrégation dans un tableau
If Lignes.Count > 0 Then
    ReDim agregation(1 To Lignes.Count, 1 To nbCol)

    For i = 1 To Lignes.Count
        infos = Lignes(i)
        numLigne = infos(1, 2)

        If nomFeuille = "" Or Not infos(1, 1) = nomFeuille Then 'changement de nom de feuille et initialisation
            nomFeuille = infos(1, 1)
            tableau = Sheets(nomFeuille).Range("A1").CurrentRegion.Value 'initialisation du tableau pour chaque nouvelle feuille rencontrée
        End If

        For j = 1 To nbCol
            agregation(i, j) = tableau(numLigne, j) 'copie de la ligne du tableau dans l'agrégation
        Next j
    Next i
End If

'export agrégation
Sheets("Agrégation").Range("A2").Resize(Lignes.Count, nbCol).Value = agregation
End Sub

Bonjour @Ausecour,

Super merci pour cette tentative qui répond à mon besoin.

Question : Si je veux faire évoluer la condition à savoir IF "condition 1" et "condition 2" set à "Oui" AND "condition 3" set à "P1", comment je fais ? J'ai ajouté le classeur avec la MAJ.

Merci encore pour votre aide

Pablito

Bonjour,

Ah, en effet ce n'était pas prévu,

du coup j'ai préféré créer une zone pour les conditions, qu'on peut appeler ensuite dans le code, voici le résultat:

Bonjour @Ausecour,

La création du tableau de correspondance fait partie de l'exécution de cette boucle :

ligFin = Sheets("Agrégation").Range("A" & Rows.Count).End(xlUp).Row

If ligFin >= 5 Then
    Sheets("Agrégation").Range("A5", "F" & ligFin) = ""
End If

Y a t-il un autre moyen ? Car j'essaie d'avoir un template dans l'onglet "Agrégation" qui est celui de la version 1 et non la version avec la zone de création.

Merci

Bonjour,

Hmm pour que le code s'adapte facilement il faudrait quand même stocker quelque part les conditions, afin qu'on ait pas à aller dans le code à chaque fois, après c'est un avis, on peut toujours masquer les lignes qui servent à préciser les conditions, ou alors les mettre sur une autre feuille, ou dans le pire des cas, mettre les conditions directement dans le code.

Rechercher des sujets similaires à "insertion ligne conditions"