Selection d'une cellule d'un autre classeur

Selection d'une cellule d'un autre classeur - VB/VBA/VBS - Programmation

Marsh Posté le 23-12-2008 à 12:19:11    

Bonjour à tous.
 
Je débute en VBA et je bloque sur une petite erreur.
 
En fait voilà, j'ai 2 classeurs (enfin plutôt une vingtaine, mais c'est une autre histoire   :jap: ) , l'un regroupe les affaires en cours (avec nombres d'heures de chacun, des graphiques, ...) et l'autre est une feuille d'heure hebdomadaire.
 
Mon classeur des affaires en cours est déjà faite (avec aussi pas mal de VBA mais avec du temps et pas mal d'essai, mais au final elle fonctionne...). Il y a une feuille par affaires. Par contre mnt je veux la remplir automatiquement avec le classeur d'heures. Et c'est là qu'arrive les problèmes...
 
Donc j'ai fait ma feuille avec toutes les infos que je dois envoyer sur l'autre (nom, numéro de la semaine et nombres d'heure pour chaque affaires (max 20 affaires). Et j'ai donc crée un bouton de commande pour lancer la macro et envoyer tout ça.
 
Passons mnt au code :

Code :
  1. Private Sub CommandButton1_Click()
  2. '###Déclaration de toute les variables###
  3. Dim j As String
  4. Dim i As Integer
  5. Dim numsem As Integer
  6. Dim haff As Variant
  7. Dim nom As String
  8. Dim k As Integer
  9. '###mise des valeurs des variables connu###
  10. numsem = Range("S1" )
  11. nom = Range("C1" )
  12. k = 6
  13. '###ouverture du 2ème classeur###
  14. Workbooks.Open "C:\Documents and Settings\els\Bureau\Gestion affaires.xls"
  15. '###boucle pour les 20 affaires###
  16. For i = 1 To 20
  17. If Range("C" & i + 99) > 0 Then '###C'est sur des cellules libre que j'ai fait la somme des heures pour chaque affaire (avec un SOMME.SI)###
  18. j = "N°" & i '###le nom des onglets du classeur affaire est N°1, N°2, ...###
  19. haff = Range("C" & i + 99) '###je mets en variable le nombre d'heure correspondant a l'affaire n°i###
  20. '###j'active le classeur affaires###
  21. Workbooks("Gestion affaires.xls" ).Worksheets(j).Activate
  22. '###Et c'est là que j'ai une magnifique erreur 1004 : "Erreur définie par l'application ou par l'objet"###
  23. Range("A6" ).End(xlDown).Offset(0, 1).Select
  24. '###Alors que si j'enlève la ligne précédente, ca ouvre le classeur, et ça mets ce que je veux dans les bon onglets (mais par contre la cellule selectionné est la même que quand on avait fermé le classeur la dernière fois...
  25. J'ai essayer aussi avec juste le Range("A6" ), ou même cells(6,1), mais rien n'y fait, tjs la même erreur###
  26. ActiveCell = nom
  27. ActiveCell.Offset(0, 1).Select
  28. ActiveCell = numsem
  29. ActiveCell.Offset(0, 1).Select
  30. ActiveCell = haff
  31. End If
  32. Next
  33. '###pas encore tester la prochaine ligne, je m'occupe d'abord du problème ###
  34. 'Workbooks("Gestion affaires.xls" ).Close
  35. MsgBox "Feuille d'affaire mis à jour"
  36. End Sub


 
Toute la matinée j'ai tester pas mal de solution mais rien n'y fait...
 
Voilà, donc si vous avez la moindre idée, n'hésitez pas  ;)  
Merci et bonne journée

Reply

Marsh Posté le 23-12-2008 à 12:19:11   

Reply

Marsh Posté le 23-12-2008 à 15:19:10    

Bonjour,
essayer avec:
ActiveSheet.Range("A6" ).End(xlDown).Offset(0,1).Select
Cordialement

Reply

Marsh Posté le 23-12-2008 à 16:12:41    

Merci bcp ! c'est pas encore gagner mais c'est un grand pas!  :)  
 
Je n'ai plus d'erreur 1004, plus d'erreur du tout d'ailleurs.
 
Par contre ça me copie les trucs à la dernière ligne et pas dans la bonne colonne (B65536, C65536 et D65536 au lieu de A6, B6 et C6)  :D  
 
En tout cas mnt que j'ai plus cette erreur, je vais bidouiller un peu pour essayer d'arriver à qqc, merci encore  ;)  
 
Je vous tiens rapidement au courant.

Reply

Marsh Posté le 23-12-2008 à 16:26:51    

Ca y est ! Cette fois c'est bon !
 
Pour ce qui est de la ligne 65536, c'était logique, étant donné d'aller à la case suivante de la dernière cellule non vide... mais étant que le tableau était vide, forcement ça posait problème (donc j'ai inclu le titre à l'intérieur, et mnt ça marche).  :D  
 
Pour la colonne de décalage... c'est simplement une inversion entre Offset(1, 0) et Offset(0, 1)  :ange:  
 
En tout cas merci bcp  ;)  
 
Bonne soirée

Reply

Sujets relatifs:

Leave a Replay

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