Re : Recherche multiple dans tableau à 2 dimensions
Pour ceux que ça intéresse voici le code qu'un ami m'a aidé à développer :
Sub analyse_tcd_chorus()
'Préparation : on crée une sheet qui s'appelle Sauvegarde, dans laquelle on va aller copier la colonne Total qui nous interesse
'Tu peux facilement la mettre en forme comme tu veux au début de ta macro en enregistrant tes actions.
Sheets("donnees").Select
'Je met en memoire la Sheet créée, comme ca je peux l'appeler facilement ensuite :
Set SheetSauvegarde = ThisWorkbook.ActiveSheet
'Ensuite je choisi ou je vais écrire la colonne total. Ici ce sera la cell A1 :
SauvegardeRow = 2
SauvegardeColumn = 20
'on retourne sur la sheet qui nous interesse
Sheets("Montant").Select
Dir= 0
DT= 0
valeurtotaleDT = 0
valeurtotaleDIR = 0
Range("A1").Select
Cells.Find(What:="Budget", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
RowCellBudget = ActiveCell.Row
ColumnCellBudget = ActiveCell.Column
'Maintenant qu'on a la ligne de 'budget', on cherche dans cette ligne la colonne 'total'
ActiveCell.EntireRow.Select
Set MyRg = Selection
'On balaye toutes les cells de la ligne et on regarde si elles contiennent "Total"
For Each c In MyRg:
'Ce qui suit sert pour plus loin, lorsqu'on cherchera DIR. J'ai mis des commentaires plus bas
If c.Value = "CC" Then
ColumnCellCC = c.Column
End If
'la on cherche 'Total'
If c.Value = "Total" Then
'Si on la trouve, on note son numero dans la variable ColumnCellTotal et on quit la boucle
ColumnCellTotal = c.Column
Exit For
End If
Next c
Columns(ColumnCellBudget).Select
ActiveCell.EntireColumn.Select
Set MyRg = Selection
'On balaye toutes les cells de la colonne et on regarde ce qu'elle contiennent
For Each c In MyRg:
If c.Value = "DT" Then
'MsgBox Cells(c.Row, ColumnCellTotal).Value
'Si on trouve "DT" on vient copier directement la valeur dans la case définie par "SauvegardeRow,SauvegardeColumn" de la sheet "SheetSauvegarde".
Cells(c.Row, ColumnCellTotal).Copy (SheetSauvegarde.Cells(SauvegardeRow, SauvegardeColumn))
'Puis on ajoute 1 à SauvegardeRow afin de descendre d'une ligne pour la prochaine copie
SauvegardeRow = SauvegardeRow + 1
valeurtotaleDT = valeurtotaleDT + Cells(c.Row, ColumnCellTotal).Value
ElseIf c.Value = "DIR" Then
'MsgBox Cells(c.Row, ColumnCellTotal).Value
'Si on trouve "DIR" on vient copier directement la valeur dans la case définie par "SauvegardeRow,SauvegardeColumn" de la sheet "SheetSauvegarde".
Cells(c.Row, ColumnCellTotal).Copy (SheetSauvegarde.Cells(SauvegardeRow, SauvegardeColumn))
'Puis on ajoute 1 à SauvegardeRow afin de descendre d'une ligne pour la prochaine copie
SauvegardeRow = SauvegardeRow + 1
valeurtotaleDIR = valeurtotaleDIR + Cells(c.Row, ColumnCellTotal).Value
End If
'La ligne suivante permet de sortir de la boucle For. Car sinon il va faire TOUTES les cells de la colonne B et ca va etre long
'Pour en sortir, il regarde a chaque ligne si la valeur de la cellule dans la colonne ColumnCellCC (ici la colonne 1) est = à "Total" si c'est le cas il sort de la boucle
If Cells(c.Row, ColumnCellCC).Value = "Total" Then Exit For
Next c
Sheets("Suivi budgets").Select
Range("E16").Select
ActiveCell.Value = valeurtotale
End Sub