klin89
XLDnaute Accro
Bonjour le forum,  🙂
Je me résous à vous exposer mon problème faute d'une solution trouvée ☹️
Dans le tableau, les colonnes A et b contiennent des valeurs (nombres décimaux ou entiers) non triés.
En colonne C, j'aimerais renvoyer pour chaque valeur de le colonne A, la valeur de la colonne B supérieure à A en étant la plus proche.
		
		
	
	
		 
	
C'est ce que réalise la macro ou la formule matricielle située en colonne E
	
	
	
	
	
		
	
	
	
	
	
		
Or j'essaie à travers cette autre code et la méthode Evaluate, de me passer de la boucle imbriquée du précédent code en y insérant la formule, mais je n'y arrive pas 🤪
	
	
	
	
	
		
Peut-être fais-je fausse route, pouvez-vous venir à mon aide 🙂
klin89
	
		
			
		
		
	
				
			Je me résous à vous exposer mon problème faute d'une solution trouvée ☹️
Dans le tableau, les colonnes A et b contiennent des valeurs (nombres décimaux ou entiers) non triés.
En colonne C, j'aimerais renvoyer pour chaque valeur de le colonne A, la valeur de la colonne B supérieure à A en étant la plus proche.
C'est ce que réalise la macro ou la formule matricielle située en colonne E
		VB:
	
	
	=SI(A2="";"";SI(MIN(SI(B$2:B$14>A2;B$2:B$14))=0;"";MIN(SI(B$2:B$14>A2;B$2:B$14))))
		VB:
	
	
	Sub test()
    Dim a, i As Long, ii As Long
    Dim minValue As Double, flag As Boolean
    With Sheets("Feuil1")
        a = .Range("A1").CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            If IsNumeric(a(i, 1)) And Not IsEmpty(a(i, 1)) Then
                minValue = 0
                flag = False
                For ii = 2 To UBound(a, 1)
                    If IsNumeric(a(ii, 2)) And a(ii, 2) > a(i, 1) Then
                        If Not flag Or a(ii, 2) < minValue Then
                            minValue = a(ii, 2)
                            flag = True
                        End If
                    End If
                Next
                If flag Then a(i, 3) = minValue
            End If
        Next
        .Range("G1").Resize(UBound(a, 1), UBound(a, 2)).Value = a
    End With
End SubOr j'essaie à travers cette autre code et la méthode Evaluate, de me passer de la boucle imbriquée du précédent code en y insérant la formule, mais je n'y arrive pas 🤪
		VB:
	
	
	Sub test()
    Dim a, b, i As Long, ii As Long
    'SI(MIN(SI(B$2:B$14>A2;B$2:B$14))=0;"";MIN(SI(B$2:B$14>A2;B$2:B$14)))
    With Sheets("Feuil1").Range("A1").CurrentRegion
        a = .Value
        'b represente la colonne 2
        b = Application.Transpose(Application.Index(.Value, Evaluate("row(2:" & .Rows.Count & ")"), 2))
        'b = Application.Index(.Value, Evaluate("row(2:" & .Rows.Count & ")"), 2)
        For i = 2 To UBound(a, 1)
            If IsNumeric(a(i, 1)) And Not IsEmpty(a(i, 1)) Then
                a(i, 3) = Application.Evaluate("IF(MIN(IF(" & b & ">" & a(i, 1) & "," & b & "))=0,"""",MIN(IF(" & b & ">" & a(i, 1) & "," & b & ")))")
            End If
        Next
        .Range("G1").Resize(UBound(a, 1), UBound(a, 2)).Value = a
    End With
End Subklin89
Pièces jointes
			
				Dernière édition: 
			
		
	
								
								
									
	
		
			
		
		
	
	
	
		
			
		
		
	
								
							
							 
	 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		