cibleo
XLDnaute Impliqué
Bonjour le forum,
Dans la Function Mavar, j'aimerais revoir la boucle For n pour l'optimiser et intégrer un Exit for.
Les boucles For p et For o qui la composent ont la même structure.
L'une renvoie : Mavar = Mavar & rng1(p) & ", "
L'autre renvoie : Mavar = Mavar & rng2(o) & ", "
Est-il possible de ne créer qu'une seule boucle voire 2 boucles imbriquées qui ne renverraient qu'une seule instruction ?
D'autre part, j'aimerais quitter la boucle For n lorsque tous les éléments de rng1 et rng2 sont touvés.
J'ai placé cette instruction :
Cette fonction est appelée dans la macro Appel_fonction (Voir module 1)
Pouvez-vous m'aider à optimiser le code ?
Merci de votre aide Cibleo
PS : dans l'exemple, j'ai traité la ligne 2 où figurent tous les éléments de rng1 et rng2.
Dans la Function Mavar, j'aimerais revoir la boucle For n pour l'optimiser et intégrer un Exit for.
Les boucles For p et For o qui la composent ont la même structure.
L'une renvoie : Mavar = Mavar & rng1(p) & ", "
L'autre renvoie : Mavar = Mavar & rng2(o) & ", "
Est-il possible de ne créer qu'une seule boucle voire 2 boucles imbriquées qui ne renverraient qu'une seule instruction ?
D'autre part, j'aimerais quitter la boucle For n lorsque tous les éléments de rng1 et rng2 sont touvés.
J'ai placé cette instruction :
Je ne trouve pas cela très explicite.If NbreHommes = 2 And NbreFemmes = 2 Then Exit For
Cette fonction est appelée dans la macro Appel_fonction (Voir module 1)
Code:
Function Mavar(feuille, prenom) As String
Dim NbreHommes As Byte, NbreFemmes As Byte, n As Integer, rng1(), rng2(), c As Range
Dim p As Byte, o As Byte, X As Byte, Msg As String
Mavar = ""
rng1 = Array("Mr Cerri", "Mr Drujon")
rng2 = Array("Mme Legrand", "Mlle Muller")
Set c = feuille.Columns(1).Find(Trim(prenom), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
[B]For n[/B] = 2 To feuille.Cells(c.Row, 256).End(xlToLeft).Column
[COLOR=blue]If NbreHommes = 2 And NbreFemmes = 2 Then Exit For[/COLOR]
If feuille.Cells(c.Row, n) <> "" Then
For p = LBound(rng1) To UBound(rng1)
'If NbreHommes = 2 Then Exit For
If InStr(feuille.Cells(c.Row, n), rng1(p)) <> 0 Then
If InStr(Mavar, rng1(p)) = 0 Then
[COLOR=red]Mavar = Mavar & rng1(p) & ", "[/COLOR]
NbreHommes = NbreHommes + 1
End If
End If
Next p
For o = LBound(rng2) To UBound(rng2)
'If NbreFemmes = 2 Then Exit For
If InStr(feuille.Cells(c.Row, n), rng2(o)) <> 0 Then
If InStr(Mavar, rng2(o)) = 0 Then
[COLOR=red]Mavar = Mavar & rng2(o) & ", "[/COLOR]
NbreFemmes = NbreFemmes + 1
End If
End If
Next o
End If
[B]Next n[/B]
[COLOR=green]'à partir de là, je termine la mise en forme de Mavar[/COLOR]
If Mavar <> "" Then
Mavar = Trim(Mavar)
Mavar = Left(Mavar, Len(Mavar) - 1)
If InStrRev(Mavar, ",") <> 0 Then
X = InStrRev(Mavar, ",")
Mavar = Left(Mavar, X - 1) & " et " & Right(Mavar, Len(Mavar) - X - 1)
End If
End If
End If
If NbreFemmes > 1 Then Msg = " sont heureuses, "
If NbreFemmes = 1 Then Msg = " est heureuse, "
If NbreHommes = 1 Then Msg = " est heureux, "
If NbreHommes > 1 Then Msg = " sont heureux, "
If NbreHommes = 1 And NbreFemmes >= 1 Then Msg = " sont heureux, "
Mavar = Mavar & Msg
MsgBox "Pour l'exemple, j'ai traité la ligne2 (B2 à L2)" & vbCrLf & "Ce que renvoie la function Mavar ci-dessous :" & vbCrLf & vbCrLf & Mavar
End Function
Pouvez-vous m'aider à optimiser le code ?
Merci de votre aide Cibleo
PS : dans l'exemple, j'ai traité la ligne 2 où figurent tous les éléments de rng1 et rng2.