Se connecter avec
S'enregistrer | Connectez-vous

boucle pour copier entre 2 feuilles

Dernière réponse : dans Programmation
Partagez


Bonjour,
Je débute en VBA sous excel 2003 et je n'arrive pas à faire une macro.

Voici ma situation :
J'ai une première feuille qui s'appelle "base de données" et une deuxième qui s'appelle "BON"

Il faudrait que la macro copie la cellule B2 et A2 de la feuille "base de données" respectivement dans la cellule C18 et C20 de la feuille "BON" dès que l'on passe à la ligne 3 de la feuille "base de données" puis que ça imprime la feuille "BON".
Ensuite la macro copie la cellule B3 et A3 de la feuille "base de données" respectivement dans la cellule C18 et C20 de la feuille "BON" dès que l'on passe à la ligne 4 de la feuille "base de données" puis que ça imprime la feuille "BON".
...

Autrement dit :
Pour i = 2 a cellule vide
la macro copie la cellule Bi et Ai de la feuille "base de données" respectivement dans la cellule C18 et C20 de la feuille "BON" dès que l'on passe à la ligne i+1 de la feuille "base de données" puis que ça imprime la feuille "BON".

Le problème est que je ne connais pas vraiment la synthaxe et que mes plage A et B ont un nombre de lignes variables, Donc si vous pouviez me donnez au moins une base... .
(j'ai essayé avec l'enregistrement de macro sous excel mais impossible de l'automatiser)

Merci d'avance pour votre aide.

Autres pages sur : boucle copier feuilles

Encore un qui confond Tableur et SGBD. :sarcastic: 

Citation :
dès que l'on passe à la ligne
Explique-nous ça en détails.

En fait ce que tu veux, c'est ça : (?)
  1. For i = LigneDebut to LigneFin
  2. Feuille("BON").Cellule("C18") = Feuille("Base de données").Cellule("B" i )
  3. Feuille("BON").Cellule("C18") = Feuille("Base de données").Cellule("B" i )
  4. Imprimer Feuille("BON")
  5. Next


??

Excusez mes abus de langage ou absence de clarté je ne suis que débutant.

Je vais tenter de réexpliquer :
En gros j'ai une feuille "BON" dans laquelle les données sont tirés de ma feuille "base de données".

Par exemple on entre dans la feuille "base de données" le nom DUPOND et le bureau 540, la feuille "BON" est alors complétée avec DUPONT et 540 et imprimer automatiquement.

Feuille "base de données" : --------------------------->Feuille "BON"

A B A
1 nom bureau 1 nom: DUPOND
2 DUPOND 100 2 bureau:100


On entre ensuite une troisième ligne dans la feuille "base de données", La feuille "BON" est alors complétée à nouveau en écrasant les données précédentes, puis elle est imprimer.

Feuille "base de données" : --------------------------->Feuille "BON"

A B A
1 nom bureau 1 nom: DURAND
2 DUPOND 100 2 bureau:435
3 DURAND 435

On entre ensuite une quatrième ligne...

Voila exactement ce que je voudrais faire.
Merci.




J'ai enfin réussi à faire un trus qui marche à peu près mais j'ai encore un petit problème.
voici le code de la macro:

  1. Sub saisie()
  2. Dim i As Long
  3. i = 1
  4. Do While Cells(i, 1).Value <> ""
  5. i = i + 1
  6. Worksheets("BON").Cells(19, 3).Value = Worksheets("base de données").Cells(i - 1, 1).Value
  7. Worksheets("BON").Cells(23, 3).Value = Worksheets("base de données").Cells(i - 1, 2).Value
  8. Worksheets("BON").Cells(25, 3).Value = Worksheets("base de données").Cells(i - 1, 3).Value
  9. Worksheets("BON").Cells(21, 3).Value = Worksheets("base de données").Cells(i - 1, 4).Value
  10. Worksheets("BON").Cells(13, 3).Value = Worksheets("base de données").Cells(i - 1, 5).Value
  11. Worksheets("BON").Cells(15, 3).Value = Worksheets("base de données").Cells(i - 1, 6).Value
  12. Worksheets("BON").Cells(11, 5).Value = Worksheets("base de données").Cells(i - 1, 7).Value
  13. Worksheets("BON").Cells(9, 2).Value = Worksheets("base de données").Cells(i - 1, 8).Value
  14. Worksheets("BON").Cells(2, 5).Value = Worksheets("base de données").Cells(i - 1, 10).Value
  15. Loop
  16. Sheets("BON").Select
  17. ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
  18. End Sub


Voici mon problème :
Les cellules sont bien copiées dans la feuille "bon" mais le problème et que i s'incrémente tout le temps on ne peut donc jamais revenir une cellule plus haut, ce qui pose problème si par exemple quelqu'un se trompe et veut faire réimprimer simplement le bon k correspondant à la ligne k alors la c'est impossible. Je me retourne donc vers vous.

User
Date and Time
Action Type
Comment
Field
Before
After
(Juste pour me faire plaisir, écris les lignes 16 et 17 comme ça :
Sheets("BON" ).PrintOut Copies:=1, Collate:=True

Ligne 4, tu ne précises la feuille de la cellule i,1.)

Je ne comprends pas bien pourquoi l'impression n'est pas dans la boucle. (Ligne 16&17) Je l'aurais mise avant Loop (Ligne 15)

Pour ton problème, il faut décomposer ton problème.
D'une part la préparation d'une feuille, d'autre part la boucle.

Exemple:
  1. Sub PreparerFeuille(k as Long)
  2. Dim bon as Worksheet
  3. Dim bdd as Worksheet
  4.  
  5. Set bon = Worksheets("BON")
  6. Set bdd = Worksheets("base de données")
  7.  
  8. bon.Cells(19, 3).Value = bdd.Cells(k - 1, 1).Value
  9. bon.Cells(23, 3).Value = bdd.Cells(k - 1, 2).Value
  10. bon.Cells(25, 3).Value = bdd.Cells(k - 1, 3).Value
  11. bon.Cells(21, 3).Value = bdd.Cells(k - 1, 4).Value
  12. bon.Cells(13, 3).Value = bdd.Cells(k - 1, 5).Value
  13. bon.Cells(15, 3).Value = bdd.Cells(k - 1, 6).Value
  14. bon.Cells(11, 5).Value = bdd.Cells(k - 1, 7).Value
  15. bon.Cells(9, 2).Value = bdd.Cells(k - 1, 8).Value
  16. bon.Cells(2, 5).Value = bdd.Cells(k - 1, 10).Value
  17.  
  18. Set bon = Nothing
  19. Set bdd = Nothing
  20. End Sub
  21.  
  22. Sub ImprimerLesFeuilles
  23. Dim bon as Worksheet
  24. Dim bdd as Worksheet
  25. Dim i As Long
  26.  
  27. Set bon = Worksheets("BON")
  28. Set bdd = Worksheets("base de données")
  29.  
  30. i = 1
  31. Do While bdd.Cells(i, 1).Value <> ""
  32. i = i + 1
  33. PreparerFeuille i
  34. bon.PrintOut ....
  35. Loop
  36.  
  37. Set bon = Nothing
  38. Set bdd = Nothing
  39. End Sub
Posez votre question