Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2545 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Run-time error ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Run-time error ?

n°1916294
baka-rcl
Posté le 18-08-2009 à 18:45:30  profilanswer
 

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:

mood
Publicité
Posté le 18-08-2009 à 18:45:30  profilanswer
 

n°1916336
alpachinoi​s
Posté le 18-08-2009 à 22:15:37  profilanswer
 

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

n°1916383
kiki29
Posté le 18-08-2009 à 23:54:52  profilanswer
 

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

n°1916394
Deamon
Posté le 19-08-2009 à 08:11:37  profilanswer
 

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.

n°1916430
olivthill
Posté le 19-08-2009 à 09:46:31  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Run-time error ?

 

Sujets relatifs
[VBA] Récupérer adresse Outlook activeModification des donnees lors d'un copier coller VBA
[VBA] Convertir Date US en FRLire le contenu d'un ftp VBA Access
[VBA] objet OLE[VBA] erreur de compilation procédure trop grande
Debutant VB: un probleme de ligne a copier!!![VBA] Pb valeur dans une cellule
[VBA] Problème avec Workbooks.Open[VBA] problème dans une boucle
Plus de sujets relatifs à : [VBA] Run-time error ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)