FORUM Tom's Hardware » Programmation » VB / VBA / VBS » lien entre deux classeurs [VBA]
 

lien entre deux classeurs [VBA]

Il y a 405 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : lien entre deux classeurs [VBA]
 
Plus d'informations

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:

Code :
  1. Sub jhd()
  2. For i = 1 To 200
  3. If Not IsEmpty(Cells(i, 1)) Then
  4. Cells(i, 2) = Windows("Classeur2.xls" ).Activate
  5.     [A1].Copy
  6.     Windows("Classeur1.xls" ).Activate
  7.     [B1].Select
  8.     ActiveSheet.Paste
  9. Else
  10. Cells(i, 2) = ""
  11. End If
  12. Next i
  13. 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

zeb
Profil : Modérateur libre
Plus d'informations

Mon Dieu quelle horreur !!!!!!!!
Explique-moi la ligne 6, si tu peux.

 

Il est impossible de savoir ce qu'il y a dans un livre sans ouvrir ce livre.
C'est pareil pour les fichiers en général et les classeurs Excel en particulier !

 

A lire : (Dernier exemple du premier message) http://www.presence-pc.com/forum/p [...] 4953-1.htm


Message édité par zeb le 03-08-2007 à 10:35:13

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

oui je sais c'une énorme.
voilà mnt mon new code

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



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

Plus d'informations

j'ai trouvé :

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


thx

zeb
Profil : Modérateur libre
Plus d'informations

Mais pourquoi Diable fais-tu des Activate et autre Select ?
Quel VB partiques-tu ? (VB, Excel/VBA, Word/VBA, Access/BA)


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
zeb
Profil : Modérateur libre
Plus d'informations

Si la réponse est Excel/VBA, aucune nécessité de recréer une instance d'Excel :

Code :
  1. Sub d()
  2.     Dim classeur As Workbook
  3.     Set classeur = Workbooks.Open("P:\Classeur1.xls" )
  4.     Windows("Classeur2.xls" ).Range("A1" ) = classeur.Sheets("feuil1" ).Range("A1" )
  5.     Set classeur = Nothing
  6. End Sub


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

c'est bien VBA sur excel. c'est que qu'avec ton code c'est plus simple .merci

Plus d'informations

mais en fait tout ça c'est pour pouvoir écrire ce code:

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. Set fichier = appxl.Windows("Base articles FT 072007.xls" )
  15.             fichier.Activate
  16. Set feuille = appxl.Sheets("Base articles FT 072007" )
  17.             feuille.Range("A1" ).Select
  18.    
  19.     Windows("gfg .xls" ).Activate
  20.     Cells(i, 2).Select
  21.     ActiveCell.FormulaR1C1 = _
  22.         "=VLOOKUP(RC[-1],'Base articles FT 072007.xls'!R8C2:R17165C5,4,FALSE)"
  23.    
  24. appxl.Workbooks("Base articles FT 072007.xls" ).Close
  25. Set appxl = Nothing
  26. Else
  27. Cells(i, 2) = ""
  28. End If
  29. Next i
  30. End Sub


Est ce que je peux faire plus simple?

zeb
Profil : Modérateur libre
Plus d'informations

Je constate que tu ne prends pas en compte ce que je te dis.
Tant pis.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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.


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » lien entre deux classeurs [VBA]
 

Annonces Google
Publicité