[VBA] Run-time error ?

Run-time error ? [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 18-08-2009 à 18:45:30    

Salut,
Je suis en stage et débute en VBA (merci à mon école pour les cours de Java  :kaola: )...
J'aimerais programmer une macro qui me servirait a identifier 2 N° de séries identiques dans 2 worksheets différents et, lorsque c'est le cas, copier une cellule précise de l'une des worksheets dans l'autre. J'ai codé 2 macros mais aucune ne fonctionne (Run-Time Error 1004 Application-defined or object-defined error) :
 
Sub copie1()
 Dim i As Integer
 Dim j As Integer
For i = 2 To 2743
j = 3
While j < 987
     If Sheets("Sheet2" ).Cells(4, i).Value = Sheets("Sheet1" ).Cells(2, j).Value And Sheets("Sheet2" ).Cells(4, i).Value <> "" Then
         Sheets("Sheet1" ).Cells(7, j).Value = Sheets("Sheet2" ).Cells(10, i).Value And j = 1000
     Else: j = j + 1
     End If
     Wend
 Next i
End Sub
 
 
Sub copie2()
 Dim i As Integer
 Dim j As Integer
For i = 2 To 2743
For j = 3 To 987
     If Sheets("Sheet2" ).Cells(4, i).Value = Sheets("Sheet1" ).Cells(2, j).Value And Sheets("Sheet2" ).Cells(4, i).Value <> "" And Sheets("Sheet2" ).Cells(10, i).Value <> 0 Then
         Sheets("Sheet1" ).Cells(7, j).Value = Sheets("Sheet2" ).Cells(10, i).Value
     End If
 Next j
 Next i
End Sub
 
 
 
Merci pour votre aide   :hello:

Reply

Marsh Posté le 18-08-2009 à 18:45:30   

Reply

Marsh Posté le 18-08-2009 à 22:15:37    

Petite remarque, ton J est trop grand excel a au maxi que 255 colonnes me semble donc cells(4, j) va planter.

Reply

Marsh Posté le 18-08-2009 à 23:54:52    

Salut, alpachinois : sauf si 2007 ( 16384 colonnes x 2^20 lignes )

Reply

Marsh Posté le 19-08-2009 à 08:11:37    

baka-rcl a écrit :

Je suis en stage et débute en VBA (merci à mon école pour les cours de Java  :kaola: )...


Java est quand même beaucoup plus utile et intéressant à connaître que VBA qui n'est vraiment pas compliqué et qui est très limité. Il ne doit pas y avoir beaucoup d'écoles qui font du VBA.
 
Mets ton code entre les balises [code=vb ] [/code ] (sans les espaces) ça sera plus lisible.
 
Dis nous également à quelle ligne ça plante et à quel moment (valeur de i et j) si l'info d'alpachinois ne résoud pas le problème.

Reply

Marsh Posté le 19-08-2009 à 09:46:31    

Il vaut mieux connaitre plusieurs langages plutôt qu'un seul, mais cessons-là ce hors-sujet trollesque, et répondons plutôt à la question posée.
 
Voici une version légèrement corigée qui fonctionne :

Sub copie1()
  Dim i As Integer
  Dim j As Integer
  For i = 2 To 2743
    j = 3
    While j < 987
      If ThisWorkbook.Sheets("Feuil2" ).Cells(4, i).Value _
         = ThisWorkbook.Sheets("Feuil1" ).Cells(2, j).Value _
         And ThisWorkbook.Sheets("Feuil2" ).Cells(4, i).Value <> "" Then
        ThisWorkbook.Sheets("Feuil1" ).Cells(7, j).Value _
        = ThisWorkbook.Sheets("Feuil2" ).Cells(10, i).Value
        ' And j = 1000
      Else
        j = j + 1
      End If
    Wend
  Next i
End Sub
 
 
Sub copie2()
  Dim i As Integer
  Dim j As Integer
  For i = 2 To 2743
    For j = 3 To 987
      If ThisWorkbook.Sheets("Feuil2" ).Cells(4, i).Value _
         = ThisWorkbook.Sheets("Feuil1" ).Cells(2, j).Value _
         And ThisWorkbook.Sheets("Feuil2" ).Cells(4, i).Value <> "" _
         And ThisWorkbook.Sheets("Feuil2" ).Cells(10, i).Value <> 0 Then
        ThisWorkbook.Sheets("Feuil1" ).Cells(7, j).Value _
        = ThisWorkbook.Sheets("Feuil2" ).Cells(10, i).Value
      End If
    Next j
  Next i
End Sub


Le tiret de soulignement peret de répartir le code sur plusieurs ligne. c'est beaucoup plus lisible. Cela permet de voir qu'il y avait "And j = 1000" qui n'avait rien à faire là, alors que j'ai is en commentaire avec une apostrophe en début de ligne. J'ai aussi indenté le code, ce que les débutants négligent de faire alors que c'est important car cela améliore nettement la lisibilité et permet de mieux voir les erreurs et de mieux faire la mainenance du code.
J'ai rajouté "ThisWorkbook" parce que VBA me le demandait. J'ai changé "Sheet1" en "Feuil1", parce que j'ai une version française. Et voili, ça marche.
Remarque subsidiaire, pour les indices, au lieu de les fixer en dur, on utilise souvent des astuces comme de voir si la cellule devient vide, ou bien End(xlDown).
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed