Eerreur d’exécution '1004' "la méthode 'Range' de l'objet _ Global a échoué [Résolu]

Signaler
Messages postés
3
Date d'inscription
jeudi 6 février 2020
Statut
Membre
Dernière intervention
13 février 2020
-
Messages postés
3
Date d'inscription
jeudi 6 février 2020
Statut
Membre
Dernière intervention
13 février 2020
-
Bonjour,

J'ai un message d'erreur erreur d’exécution '1004' "la méthode 'Range' de l'objet _ Global a échoué.

Helppp please !


Sub Test()

Dim x As Integer
Dim i As Integer
Dim j As Integer
Dim y As Integer
Dim c As Integer


x = Sheets("Feuil1").Range("A2").End(xlDown).Row
y = Sheets("Feuil3").Range("A2").End(xlDown).Row

y = y + 2
c = 69
With Sheets("Feuil1")

For j = 1 To y
For i = 2 To x

If Range(Chr(c), i).Value <> Range(Chr(c + 1), i).Value Then
Range(Chr(c + 2) & i).Value = "KO"
Range(Chr(c + 2) & i).Interior.Color = RGB(255, 0, 0)
Else:
Range(Chr(c + 2) & i).Value = "OK"
Range(Chr(c + 2) & i).Interior.Color = RGB(0, 255, 0)
End If
Next i
c = c + 3
Next j
End With
End Sub

Configuration: Windows / Chrome 79.0.3945.130

3 réponses

Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
586
Bonjour,

Oui en incrémentant les lettres de colonnes on tombe sur une erreur car Chr(91) qui vient après Chr(90) qui est "Z" ce n'est pas une lettre mais le caractère "[" ce qui provoque l'erreur

Donc la solution c'est d'utiliser les numéros de colonnes comme celà :

Sub Test()

Dim x As Integer
Dim i As Integer
Dim j As Integer
Dim y As Integer
Dim c As Integer


x = Sheets("Feuil1").Range("A2").End(xlDown).Row
y = Sheets("Feuil3").Range("A2").End(xlDown).Row

Worksheets("Feuil1").Activate
y = y + 2
c = 5


Dim F1 As Characters
Dim F2 As Characters

For j = 1 To y
    For i = 2 To x
        If Sheets("Feuil1").Cells(i, c).Value <> Sheets("Feuil1").Cells(i, c + 1).Value Then
            Sheets("Feuil1").Cells(i, c + 2).Value = "KO"
            Sheets("Feuil1").Cells(i, c + 2).Interior.Color = RGB(255, 0, 0)
        Else:
            Sheets("Feuil1").Cells(i, c + 2).Value = "OK"
            Sheets("Feuil1").Cells(i, c + 2).Interior.Color = RGB(0, 255, 0)
        End If
    Next i
    c = c + 3
Next j

End Sub


Par contre on utilise que la Feuil1 je ne sais pas si c'est volontaire.


Bonjour,

En exécutant la macro j'obtiens toujours des résultats "KO" sachant que je compare deux integer, mais la première ligne de la cellule est vide, la valeur est stocké dans la deuxième ligne de la cellule, je ne sais pas si c'est à cause de ça, il m'affiche toujours "KO" (même si les deux valeurs sont égaux).

Si Oui, est-ce qu'il y a un moyen de supprimer la première ligne de chaque cellule à l'aide d'un macro ? Merci d'avance.
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
586 > bechirar
Bonjour,

Jusqu’à présent je n'ai regardé que la syntaxe de la macro.
Je n'ai pas cherché à comprendre le besoin .
Ce qui me choque c'est qu'on utilise le nombre de lignes de Feuil3 (la valeur j) alors que dans la boucle jamais on ne fait référence aux valeurs de la Feuil3.
Ce qui me semble logique c'est que l'on compare la liste de Feuil1 à la liste de Feuil3

Par exemple on s'attend à ce que le test soit :

 If Sheets("Feuil1").Cells(i, c).Value <> Sheets("Feuil3").Cells(j, c + 1).Value Then



Est-ce que ce n'est pas ça le problème ?

Cordialement,
Messages postés
3
Date d'inscription
jeudi 6 février 2020
Statut
Membre
Dernière intervention
13 février 2020
>
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020

Bonjour, Merci pour votre réponse rapide,

J'utilise la feuille 3 juste pour récupérer le nombre des colonnes ( vu que le nombre des colonnes dans la feuille 1 égale au nombre des requêtes Sql stockés dans la feuille 3 ).

Et finalement j'ai trouvé l'erreur, mais elle n'est pas dans la macro, merci.

Bonne journée.
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
586
Bonjour,

Sans doute remplacer :

If Range(Chr(c), i).Value <> Range(Chr(c + 1), i).Value Then


Par

If Range(Chr(c)& i).Value <> Range(Chr(c + 1)& i).Value Then


Mais certainement que le résultat ne sera pas encore bon car le With suppose qu'il doit y avoir des Range qui concernent la feuille 1 et qui doivent être sous la syntaxe .Range et d'autre qui concernent la Feuille3 et dont la syntaxe doit-être Sheets("Feuil3").Range
Messages postés
3
Date d'inscription
jeudi 6 février 2020
Statut
Membre
Dernière intervention
13 février 2020

Bonjour,

Même avec ces modifications, j'ai eu toujours la même erreur !


Sub Test()

Dim x As Integer
Dim i As Integer
Dim j As Integer
Dim y As Integer
Dim c As Integer


x = Sheets("Feuil1").Range("A2").End(xlDown).Row
y = Sheets("Feuil3").Range("A2").End(xlDown).Row

Worksheets("Feuil1").Activate
y = y + 2
c = 69


Dim F1 As Characters
Dim F2 As Characters

For j = 1 To y
For i = 2 To x

If Sheets("Feuil1").Range(Chr(c) & i).Value <> Sheets("Feuil1").Range(Chr(c + 1) & i).Value Then
Sheets("Feuil1").Range(Chr(c + 2) & i).Value = "KO"
Sheets("Feuil1").Range(Chr(c + 2) & i).Interior.Color = RGB(255, 0, 0)
Else:
Sheets("Feuil1").Range(Chr(c + 2) & i).Value = "OK"
Sheets("Feuil1").Range(Chr(c + 2) & i).Interior.Color = RGB(0, 255, 0)
End If
Next i
c = c + 3
Next j

End Sub