Nouveau en VBA, problème de comparaison

Bonjour tout le monde !

Je suis nouveau avec les macros en VBA et je rencontre une erreur me bloquant dans mon travail.

Je tente de vérifier si des cases sont identiques avec une macro afin de copier une case si elles le sont, voici mon code:

Sub Macro_prix()
Dim codeArticle As String
For n = 2 To 1716 Step 1
codeArticle = Worksheets(Sheets(1).Name).Range("E" & n)
For i = 2 To 7800
If code_article Like Worksheets(Sheets(1).Name).Range("J" & i) Then
Worksheets(Sheets(1).Name).Range("K" & i).Copy
Worksheets(Sheets(1).Name).Range("H" & n).PasteSpecial Transpose:=False
End If
Next i
Next n

End Sub

Je ne rentre jamais dans mon if et je ne sais pas pourquoi

Merci d'avance de votre considération et de vos réponses, Bonne journée.

Hummm, il va falloir réviser les fondamentaux.

Option Explicit

Sub Macro_prix()
    Dim codeArticle As String
    Dim i As Integer, n As Integer

    For n = 2 To 1716
        codeArticle = Sheets(1).Range("E" & n)
        For i = 2 To 7800
            If codeArticle Like Sheets(1).Range("J" & i) Then
                Sheets(1).Range("K" & i).Copy
                Sheets(1).Range("H" & n).PasteSpecial Transpose:=False
            End If
        Next i
    Next n
End Sub

Je te conseillerais de lancer cet essai juste avant d'aller te coucher, histoire d'avoir le résultat au petit déjeuner. 13 millions de copier-coller c'est hard.

Merci beaucoup ! Je pensais que les variables pouvaient se déclarer implicitement dans la boucle, d'ailleurs mes autres macros fonctionnent ainsi je vais aller les changer de ce pas ! (Tout a fonctionné en un rien de temps, j'ai un bon processeur c: )

Et si jamais vous auriez une idée pourc elui là qui s'arrête à tout moment :

Sub Copie()
Dim n As Integer
For n = 2 To 1780 Step 1
Worksheets(Sheets(1).Name).Range("A" & n).Copy
Worksheets(Sheets(2).Name).Cells(3, (n + 3)).PasteSpecial Transpose:=False
Next n

End Sub

VB n'impose ni la déclaration préalable des variables ni leur instanciation ; par défaut, la déclaration des variables est donc implicite.
Le fait de ne pas avoir à déclarer les variables, donc leur type, est la source de nombreux problèmes, parfois très difficiles à détecter. C'est la raison pour laquelle il est fortement conseillé de paramétrer son éditeur VBE avec l'option "Déclaration des variables obligatoires".
Quand je parlais des fondamentaux, cela en fait partie. Au passage, il y a aussi l'indentation du code qui en facilite la compréhension. Et même quand on a l'habitude de déclarer ses variables, on peut se faire piéger. Un exemple assez connu :

Dim i, j, k As Integer

i = "A"
j = "B"
k = "C"

Cette déclaration ne vaut pas un kopeck, parce que i et j sont des Variant alors que k est un entier. Si tu exécutes ce code tu auras d'erreur que sur la ligne k = "C".

Pour ta dernière question, ta procédure revient à celle-ci (tu remarqueras le step 1 mis en remarque qui ne sert à rien, le pas par défaut étant +1).

    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim n As Integer

    Set ws1 = Sheets(1)
    Set ws2 = Sheets(2)

    For n = 2 To 1780 ' step 1
        ws1.Cells(n, 1).Copy Destination:=ws2.Cells(3, (n + 3))
    Next n
Rechercher des sujets similaires à "nouveau vba probleme comparaison"