Bonjour à tous et à toutes,
Débutant en VBA depuis peu pour des besoins professionnels, je suis en train de mettre au point une macro me permettant de comparer deux colonnes issues de 2 tableaux différents. Pour faire simple, il s'agit de comparer deux colonnes de valeurs (Colonne D : Energie (keV) ; Colonne K : Energie) afin de retrouver, pour chaque ligne de la colonne K, une valeur identique dans la colonne D.
À partir de là je récupère différentes valeurs, sur la même ligne, que j'écris dans un 3ème tableau qui me sont nécessaires pour rédiger un rapport. Jusqu'ici je n'ai pas eu trop de difficultés. Cependant les valeurs en énergies de la colonne K ne sont pas systématiquement strictement égales à des valeurs de la colonne D. Je souhaite donc effectuer la comparaison pour un intervalle (ici nous prendrons +/- 0.01% de la valeur provenant de la colonne K). Jusqu'ici j'ai réussi pour une valeur strictement égale à l'aide d'une fonction .Find mais il m'est impossible de faire fonctionner mon programme dans son état actuel pour un intervalle de valeur...
Ci-joint une illustration de ma feuille excel afin de simplifier la compréhension (cela n'a rien de confidentiel, pas d'inquiétudes, donc n'hésitez pas si besoin d'informations supplémentaires) :
et enfin le code.. où l'erreur provient des lignes "interval_pos..." et "interval_neg..." :
Sub match_columns_2()
Dim i, j, total_Mesure, total_LD, fRow As Integer
Dim found As Range
Dim interval_pos, interval_neg As Variant
Sheets("Feuil1").Activate
total_Mesure = Range("K" & Rows.Count).End(xlUp).Row
total_LD = Range("D" & Rows.Count).End(xlUp).Row
For i = 1 To total_Mesure
interval_pos = Range("K", i).Value + Range("K", i).Value * 0.001
interval_neg = Range("K", i).Value - Range("K", i).Value * 0.001
For j = 1 To total_LD
If Range("D" & j).Value > interval_neg And Range("D" & j).Value < interval_pos Then
Range("P" & i).Value = Range("H" & j).Value
Range("O" & i).Value = Range("L" & i).Value
Range("N" & i).Value = Range("B" & j).Value
End If
Next j
If Range("N" & i).Value = "" Then
Range("N" & i).Value = "No Match"
Range("O" & i).Value = Range("L" & i).Value
End If
If Range("O" & i).Value < Range("P" & i).Value Then
Range("O" & i).Value = "< LD"
End If
If (i) Mod 2 = 0 Then
Range("rangetest").Rows(i - 1).Interior.Color = RGB(230, 205, 255) 'RGB(204, 153, 255)
End If
Next i
End Sub
Toute aide ou même piste est la bienvenue.
PS : Je ne suis pas sûr de la pertinence de mon titre pour la requête donc toute critique est également la bienvenue à ce sujet afin d'aider d'autres utilisateurs.