Inscrire les résultats de critères dans plusieurs cellules

Bonjour à vous tous!

J'aimerais (dans le fichier joint) écrire une formule (non VBA/macro) sur les cellules G4 à G7 me permettant d'inscrire les différentes section répondant au critères G2 et G3. J'ai vu dans les discussions précédentes des éléments pouvant répondent partiellement (index combiné à nb.si) mais je ne suis pas capable de l'adapter à mon problème

Merci d'avance de votre aide

11test-1.xlsx (9.19 Ko)

Bonsoir le forum,

G4 :

=SIERREUR(INDEX(D:D;PETITE.VALEUR(SI(B:B=$G$2;SI(C:C=$G$3;LIGNE(A:A);""));LIGNE(1:1)));"")

Formule matricielle.

Super Merci, ca fonctionne

Oups, petit problème!

Comme je transfère mes données colonne B C et D par une macro, et que j'utilise une recherche à partir des résultats de la formule que vous me proposez =SIERREUR(INDEX(D:D;PETITE.VALEUR(SI(B:B=$G$2;SI(C:C=$G$3;LIGNE(A:A);""));LIGNE(1:1)));"") formule matricielle, l'exécution de la macro est très lente (2 à 3 minutes d'attente). Est-ce le fait que la formule soit matricielle? Y a t'il un autre solution??

Merci encore!

Bonjour, Salut à tous !

Peux-tu montrer ta macro "lente" ?

[list]Sub ()
'
' Écrire les enregistrements
'
    Application.ScreenUpdating = False
    Sheets("Plantation").Select
    ActiveSheet.Unprotect

    Dim cellX As Range, dlig&, dh%
    Dim nblig As Long
    Dim planblig As Long
    Dim nbbloc As Long
    Dim bloc As Long
    Dim bloc2 As Long
    Dim lig As Long

    planblig = Range("F" & Rows.Count).End(xlUp).Row

    With Worksheets("PL_B_DONNÉES")
        nblig = .Range("C" & Rows.Count).End(xlUp).Row
        dlig = .Range("C" & Rows.Count).End(xlUp).Row + 1

        If dlig < 2 Then dlig = 2

        For lig = 7 To planblig
            nbbloc = 0
            bloc = 0
            bloc2 = 0

            If Cells(lig, 34) <> "" Then
                nbbloc = 7
            ElseIf Cells(lig, 30) <> "" Then
                nbbloc = 6
            ElseIf Cells(lig, 26) <> "" Then
                nbbloc = 5
            ElseIf Cells(lig, 22) <> "" Then
                nbbloc = 4
            ElseIf Cells(lig, 18) <> "" Then
                nbbloc = 3
            ElseIf Cells(lig, 14) <> "" Then
                nbbloc = 2
            Else
                nbbloc = 1
            End If

            dh = 0
            While dh <> nbbloc
                Set cellX = .Cells(dlig, 1): cellX = [C7]
                cellX.Offset(, 0) = Cells(lig, 3)
                cellX.Offset(, 1) = Cells(lig, 4)
                cellX.Offset(, 2) = Cells(2, 10)
                cellX.Offset(, 3) = Cells(2, 6)
                cellX.Offset(, 4) = Cells(lig, 5)
                cellX.Offset(, 5) = Cells(lig, 6)
                cellX.Offset(, 6) = Cells(lig, 10 + bloc)
                cellX.Offset(, 7) = Cells(lig, 9 + bloc)
                cellX.Offset(, 8) = Cells(lig, 11 + bloc)
                cellX.Offset(, 9) = Cells(lig, 42 + bloc2)
                cellX.Offset(, 10) = Cells(lig, 11 + bloc) * Cells(lig, 42 + bloc2)
                cellX.Offset(, 11) = Cells(lig, 43 + bloc2)
                cellX.Offset(, 12) = Cells(lig, 44 + bloc2)
                cellX.Offset(, 21) = Cells(lig, 12 + bloc)
                cellX.Offset(, 22) = Cells(lig, 45 + bloc2)
                cellX.Offset(, 23) = Cells(lig, 46 + bloc2)
                If dh < 1 Then
                    cellX.Offset(, 13) = Cells(lig, 77)
                    cellX.Offset(, 14) = Cells(lig, 37)
                    cellX.Offset(, 15) = Cells(lig, 38)
                    cellX.Offset(, 16) = Cells(lig, 78)
                    cellX.Offset(, 17) = Cells(lig, 39)
                    cellX.Offset(, 18) = Cells(lig, 40)
                    cellX.Offset(, 19) = Cells(lig, 2)
                    cellX.Offset(, 20) = Cells(lig, 41)
               End If

                If cellX.Offset(-1, 21) = Cells(lig, 12 + bloc) Then
                    cellX.Offset(, 24) = cellX.Offset(-1, 24) + Cells(lig, 46 + bloc2)
                Else
                    cellX.Offset(, 24) = Cells(lig, 46 + bloc2)
                End If

                dlig = dlig + 1
                dh = dh + 1
                bloc = bloc + 4
                bloc2 = bloc2 + 5

            Wend

        Next lig
    End With

    Application.CutCopyMode = False
    ActiveSheet.Protect , DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowFiltering:=True, AllowInsertingRows:=True
    Application.ScreenUpdating = True
    MsgBox "Données transférées à l'onglet PL_B_DONNÉES"

    Range("B7:G56").Select
    Selection.ClearContents
    Range("I7:AO56").Select
    Selection.ClearContents
    Range("B7").Select

End Sub[/list]

Lorsque j'utilise la formule matricielle, la macro précédant est très lente et lorsque que je l'enlève la macro est rapide

Merci

Bonsoir,

Ma première réaction c'est : Quel désordre ! puis : Foutu mélange !

On travaille sur 2 feuilles à la fois, ce qui mérite une vérification sur pièces qui ne peut être faite en l'état des informations.

Cordialement.

Merci MFerrand

J'apprécie votre franchise, vous êtes direct et c'est bien correct Je ne vous ait pas aidé non plus en montrant qu'une parcelle d'information, finalement je l'avoue j'ai une connaissance très basique en VBA, mais ça fonctionne! Pas nécessairement efficient mais ... pas plus efficace ...mais fonctionnel

Enfin, j'ai trouvé une solution me permettant d'éviter la formule matricielle.

Merci encore et au plaisir de bénéficier de vos précieux conseils!

Rechercher des sujets similaires à "inscrire resultats criteres"