Erreur 1004 lors d'une opération Mathématique entre deux Range.Value

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) :

macro comparaison de valeurs

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.

bonjour,

la syntaxe de range dans ces lignes n'est pas correcte

 interval_pos = Range("K", i).Value + Range("K", i).Value * 0.001
    interval_neg = Range("K", i).Value - Range("K", i).Value * 0.001

mettre

 interval_pos = Range("K" & i).Value + Range("K" & i).Value * 0.001
    interval_neg = Range("K" & i).Value - Range("K" & i).Value * 0.001

Merci de ton aide H2SO4,

J'ai corrigé l'erreur de syntaxe et désormais j'ai une erreur d'exécution '13' : Incompatibilité de type. Il semblerait que c'est bien la multiplication par 0.001 qui pose problème ici.. Une idée de la raison ?

Bonjour,

Est-ce que c'est à cause du "." ?

Essaie avec une ","

Bonjour Jbeaudoin,

Si tu entends remplacer le "." dans "0.001" par une virgule, cela n'est pas possible, il s'agit bien d'un point. Autrement VBA ne peut compiler.

Bonjour,

C'est bon à savoir!

re-bonjour,

J'ai corrigé l'erreur de syntaxe et désormais j'ai une erreur d'exécution '13' : Incompatibilité de type. Il semblerait que c'est bien la multiplication par 0.001 qui pose problème ici.. Une idée de la raison ?

Pour moi, ce n'est pas le 0.001 qui pose problème mais (une de) tes données dans ta feuille qui n'(a) ont pas le bon type. Vérifie tes données en colonne K, elles doivent être numériques pour toutes les lignes que tu parcours avec ta variable i (si i=2, tu as déjà un problème d'incompatibilité de type en K2).

Bonjour,

un fichier permettrait d'y voir plus clair.
Une image ici ne sert pas à grand chose.

Enlève le Centrer que tu as mis partout.
Un vrai numérique s'aligne à droite, un texte à gauche (même si c'est un nombre)
eric

Bonjour,

Déjà, merci à tous les deux. Comme proposé par Eric, j'ai retiré le centrage. J'ai vérifié ensuite les valeurs des colonne K et D et elles sont bien en numériques, le problème n'est donc pas là, a priori.

À la demande d'Eric je vous transmet le fichier. Si besoin d'autre chose n'hésitez pas.

EDIT : J'ai oublié de préciser que la macro qui nous intéresse ici est : match_columns_2()

bonjour,

comme indiqué dans ma réponse précédente, tu as une donnée non numérique en colonne K (quand i vaut 2), commence ta boucle i à 3

Re bonjour H2SO4,

Je n'avais pas compris ta réponse en ce sens.. Le problème venait bien de ça. Merci pour ton aide !

En espérant ne pas revenir vers vous pour ce genre d'erreurs d'inattention...

Rechercher des sujets similaires à "erreur 1004 lors operation mathematique entre deux range value"