Fonction SI Excel
Bonjour
J'ai besoin de votre aide;
j'ai un fichier Excel avec plusieurs colonnes , dans la colonne A le numéro unique de la demande du ménage, dans la colonne B " nommée Demandeur principal" j'ai soit "Oui" soit "Non", dans la colonne C " Colonne des résultats des tests" soit "VRAI", soit "FAUX", mon soucis est le suivant:
je cherche une formule ou une fonction qui me permets de renvoyer les résultats des lignes de l'ensemble du mé,age qui porte le même numéro de la demande sur la ligne du demandeur principal. en gros si(ET(A:A=A2;B:B="Oui";C:C="FAUX");je veux que la valeur "FAUX" s'inscrire sur toutes les lignes qui portes le même numéro A), que la valeur "FAUX" et pas les "VRAI"
en gros si la cellule du demandeur principal est "VRAI" et les autres lignes du meme groupe sont "FAUX" il faut que la ligne du demandeur principal deviendra "FAUX"
Merci pour votre aide
Cordialement
Bonjour Mahieddine,
Je te propose le code suivant:
Option Explicit
Sub controlResultatsPrincipaux()
'On met en constante les numéros de colonnes du tableau
Const cFieldNumDemandeur = 1
Const cFieldTypeDemandeur = 2
Const cFieldResultat = 3
Dim oSheet As Worksheet
Dim oLO As ListObject
Dim oRangePrincipaux As Range
Dim oRangeSecondaires As Range
Dim oRow As Range
Dim lNum As Long
'On réfère la feuille contenant le tableau
Set oSheet = ThisWorkbook.Worksheets("Feuil1") 'A adapter avec le nom correct de feuille
Set oLO = oSheet.ListObjects("Tableau1") 'A adapter avec le nom correct du tableau
'On efface les filtres précédemment posés
oLO.Range.AutoFilter
'On réfère la plage des demandeurs principaux ayant un résultat à "VRAI"
oLO.Range.AutoFilter cFieldTypeDemandeur, "Oui", xlAnd
oLO.Range.AutoFilter cFieldResultat, "VRAI", xlAnd
Set oRangePrincipaux = oLO.DataBodyRange.SpecialCells(xlCellTypeVisible)
'On boucle sur les lignes sélectionnées
For Each oRow In oRangePrincipaux.Rows
'On récupère le numéro du demandeur
lNum = oRow.Cells(1, cFieldNumDemandeur).Value
'On efface les filtres précédemment posés
oLO.Range.AutoFilter
'On réfère la plage des demandeurs secondaires de même numéro ayant un résultat à "FAUX"
oLO.Range.AutoFilter cFieldTypeDemandeur, "Non", xlAnd
oLO.Range.AutoFilter cFieldNumDemandeur, lNum, xlAnd
oLO.Range.AutoFilter cFieldResultat, "FAUX", xlAnd
Set oRangeSecondaires = oLO.DataBodyRange.SpecialCells(xlCellTypeVisible)
'Si la plage secondaire n'est pas vide, on modifie la valeur du résultat du demandeur principal
If oRangeSecondaires.Areas.Count > 0 Then
oRow.Cells(1, cFieldResultat).Value2 = "FAUX"
oRow.Cells(1, cFieldResultat).HorizontalAlignment = xlHAlignCenter
End If
Next
'On fait le ménage
oLO.Range.AutoFilter
oLO.Range.AutoFilter
Set oRangePrincipaux = Nothing
Set oRangeSecondaires = Nothing
Set oLO = Nothing
Set oSheet = Nothing
End SubJe joins l'excel modifié.
Merci Beaucoup Gérard
Je vous tiens informé de la suite
Je constate un petit soucis, quand je rajoute d'autre lignes vers le bas
Le tableau se met en mode filtre , et cette ligne " Set oRangeSecondaires = oLO.DataBodyRange.SpecialCells(xlCellTypeVisible)" bloque un débogage
je ne comprend pas pourquoi ?? est-ce le nombre de ligne est limité ?? dans le code
Merci
un grand merci
Cordialement
Mahieddine