Se connecter avec
S'enregistrer | Connectez-vous

lien entre deux classeurs [VBA]

Dernière réponse : dans Programmation

Bonjour, j'ai un petit problème si vous pouvez m'aider (je suis débutant en vba)
voilà, je travaille sur un classeur qui fait appel à un autre, voiçi le code que j'ai fait:
  1. Sub jhd()
  2.  
  3.  
  4. For i = 1 To 200
  5. If Not IsEmpty(Cells(i, 1)) Then
  6. Cells(i, 2) = Windows("Classeur2.xls").Activate
  7. [A1].Copy
  8. Windows("Classeur1.xls").Activate
  9. [B1].Select
  10. ActiveSheet.Paste
  11. Else
  12. Cells(i, 2) = ""
  13.  
  14. End If
  15. Next i
  16. End Sub


Donc je voudrai, dans le classeur 1 , si la cellule dans la colonne A est vide, ne rien faire, sinon faire un copier coller d'une cellule d'un classeur 2.
Ce code marche, seulement si le classeur 2 est ouvert. Y-t'il un moyen de le faire fonctionner sans l'ouvrir

Autres pages sur : lien classeurs vba

Lassé par la pub ? Créez un compte

oui je sais c'une énorme.
voilà mnt mon new code
  1. Sub d()
  2.  
  3. Dim appxl As Excel.Application
  4. Dim fichier As Window
  5. Dim feuille As Worksheet
  6. Set appxl = CreateObject("Excel.application")
  7.  
  8.  
  9. With appxl
  10. .Workbooks.Open "P:\Classeur1.xls"
  11. .Visible = True
  12. End With
  13.  
  14. Set fichier = appxl.Windows("Classeur1.xls")
  15. fichier.Activate
  16. Set feuille = appxl.Sheets("feuil1")
  17. Range("A1").Select
  18. Selection.Copy
  19. Windows("Classeur2.xls").Activate
  20. Range("A1").Select
  21. ActiveSheet.Paste
  22.  
  23. appxl.Workbooks("Classeur1.xls").Close
  24. Set appxl = Nothing
  25.  
  26. End Sub


ça marche sauf que ça me copie pas la cellule :( 

j'ai trouvé :
  1. Sub d()
  2.  
  3. Dim appxl As Excel.Application
  4. Dim fichier As Window
  5. Dim feuille As Worksheet
  6. Set appxl = CreateObject("Excel.application")
  7.  
  8.  
  9. With appxl
  10. .Workbooks.Open "P:\Classeur1.xls"
  11. .Visible = True
  12. End With
  13.  
  14. Set fichier = appxl.Windows("Classeur1.xls")
  15. fichier.Activate
  16. Set feuille = appxl.Sheets("feuil1")
  17. feuille.Range("A1").Select
  18. feuille.Range("A1").Copy
  19. Windows("Classeur2.xls").Activate
  20. Range("A1").Activate
  21.  
  22. ActiveSheet.Paste
  23.  
  24. appxl.Workbooks("Classeur1.xls").Close
  25. Set appxl = Nothing
  26.  
  27. End Sub

thx
Expert Programmation

Si la réponse est Excel/VBA, aucune nécessité de recréer une instance d'Excel :
  1. Sub d()
  2. Dim classeur As Workbook
  3.  
  4. Set classeur = Workbooks.Open("P:\Classeur1.xls")
  5. Windows("Classeur2.xls").Range("A1") = classeur.Sheets("feuil1" ).Range("A1")
  6. Set classeur = Nothing
  7. End Sub

mais en fait tout ça c'est pour pouvoir écrire ce code:
  1. Sub lien2fichiers()
  2. For i = 1 To 2000
  3. If Not IsEmpty(Cells(i, 1)) Then
  4. Cells(i, 2) = "Dim appxl As Excel.Application"
  5. Dim fichier As Window
  6. Dim feuille As Worksheet
  7. Set appxl = CreateObject("Excel.application" )
  8.  
  9.  
  10. With appxl
  11. .Workbooks.Open "S:\CLOTURE 2007 ANNEMASSE - B28 -\DIVERS\Base articles FT 072007.xls"
  12. .Visible = False
  13. End With
  14.  
  15. Set fichier = appxl.Windows("Base articles FT 072007.xls" )
  16. fichier.Activate
  17. Set feuille = appxl.Sheets("Base articles FT 072007" )
  18. feuille.Range("A1" ).Select
  19.  
  20. Windows("gfg .xls" ).Activate
  21. Cells(i, 2).Select
  22. ActiveCell.FormulaR1C1 = _
  23. "=VLOOKUP(RC[-1],'Base articles FT 072007.xls'!R8C2:R17165C5,4,FALSE)"
  24.  
  25. appxl.Workbooks("Base articles FT 072007.xls" ).Close
  26. Set appxl = Nothing
  27. Else
  28. Cells(i, 2) = ""
  29. End If
  30. Next i
  31. End Sub

Est ce que je peux faire plus simple?

si j'ai essayé mais ça bloque. qd je fais F8 je m'aperçois que c'est au niveau de Windows("Classeur2.xls" ).Range("A1" ) = classeur.Sheets("feuil1" ).Range("A1" ).
si je me suis inscrit ici, c'est pour apprendre et dc j'ai interet à prendre en compte tt ce qui se dit.
Lassé par la pub ? Créez un compte