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
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 !
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
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!