Se connecter avec
S'enregistrer | Connectez-vous
Votre question
Résolu

[Résolu] [Excel/VBA] macro copier / coller avec condition

Dernière réponse : dans Programmation
Partagez
1 Août 2012 15:09:49

Bonjour à tous,

Voilà je planche depuis une semaine sur l'amélioration d'un fichier excel. Je sollicite votre aide car cela fait 24h que je suis bloquée sur un fichu problème qui pour quelqu'un de moins novice que moi semblera surement très bête; mais voilà, je n'y arrive pas! J'ai consulté plusieurs topics dont celui ci , mais rien n'y fait.

Je vous expose donc la situation: j'ai sur ma feuille"macro" une liste déroulante de choix en E8. Celle ci doit être copié sur la feuille "prestation" sur la première cellule vide à partir de B6, sachant que plus bas ma feuille contient une présentation donc je ne peux pas remonter, juste descendre à partir de la case B6.

Voilà mon code:

  1. Private Sub CommandButton1_Click()
  2.  
  3. If CheckBox1.Value = True Then
  4.  
  5. Sheets("macro").Activate
  6. Range("E8").Select
  7. Selection.Copy
  8. Sheets("prestation").Activate
  9. Dim derli As Range
  10. Set derli = Range("B6").End(xlDown).Offset(1)
  11. derli.Select
  12. ActiveSheet.Paste
  13. End If
  14.  
  15. If CheckBox2.Value = True Then
  16. Sheets("macro").Activate
  17. Range("E9").Select
  18. Selection.Copy
  19. Sheets("prestation").Activate
  20. Dim derli1 As Range
  21. Set derli1 = Range("B6").End(xlDown).Offset(1)
  22. derli.Select
  23. ActiveSheet.Paste
  24.  
  25. End If
  26.  
  27. Unload UserForm3
  28.  
  29. End Sub


Lorsque je lance la macro, et que je coche les 2 cases à cocher, il me colle bien mes listes déroulantes, mais l'une sur l'autre. Et sachant que la plage B6: B14 est constituée de cellules vides il me colle tout ca en B16. Je pense qu'il trouve la première cellule pleine et qu'il colle sur la case du dessous. Je n'arrive pas à décanter mon problème. Quelqu'un aurait une petite piste?

Merci d'avance!
1 Août 2012 16:16:10

Après plusieurs tests, j'ai remplacé B6 par B1, les première cellules étant fusionnée le premier B est B5, et souhaitant garder la cellule b5 pour clarifier la présentation, je souhaite commencer à coller qu'en B6. Si B5 est rempli alors il colle bel et bien ma liste de choix en B6. Or je ne veux rien en B5 donc j'ai pensé à quelque chose comme ça:

  1. Private Sub CommandButton1_Click()
  2. Dim derli As Range
  3. Sheets("prestation").Activate
  4.  
  5. If Range("B6").Value = "" Then
  6. derli = Range("B6")
  7. Else: Set derli = Range("B1").End(xlDown).Offset(1)
  8. End If
  9.  
  10.  
  11.  
  12. If CheckBox1.Value = True Then
  13. Sheets("macro").Activate
  14. Range("E8").Select
  15. Selection.Copy
  16. Sheets("prestation").Activate
  17. derli.Select
  18. ActiveSheet.Paste
  19. End If
  20.  
  21.  
  22. Unload UserForm3
  23.  
  24. End Sub


Biensur ça aurait été trop beau que ça fonctionne, le code contient une erreur ici : derli = Range("B6")
Mais je ne vois pas pourquoi
m
0
l
2 Août 2012 09:16:17

Ayant trouvé mon erreur, il manquait le set devant derli=range("B6"), la formule fonctionne correctement si B6 est vide mais ensuite il écrase les données de la cellule B7 au fur et à mesure.

  1. Public derli As Range
  2. Public derli1 As Range
  3. Public derli2 As Range
  4.  
  5.  
  6. Private Sub CommandButton1_Click()
  7. Sheets("prestation").Activate
  8.  
  9. If Range("b6").Value = "" Then
  10. Set derli = Range("B6")
  11. Else: Set derli = Range("B1").End(xlDown).Offset(1)
  12. End If
  13.  
  14.  
  15. If CheckBox1.Value = True Then
  16. Sheets("macro").Activate
  17. Range("E8").Select
  18. Selection.Copy
  19. Sheets("prestation").Activate
  20. derli.Select
  21. ActiveSheet.Paste
  22. End If
  23.  
  24.  
  25. If Range("b6").Value = "" Then
  26. Set derli1 = Range("B6")
  27. Else: Set derli1 = Range("B1").End(xlDown).Offset(1)
  28. End If
  29.  
  30.  
  31.  
  32. If CheckBox2.Value = True Then
  33. Sheets("macro").Activate
  34. Range("E9").Select
  35. Selection.Copy
  36. Sheets("prestation").Activate
  37. derli1.Select
  38. ActiveSheet.Paste
  39. End If
  40.  
  41. If Range("b6").Value = "" Then
  42. Set derli2 = Range("B6")
  43. Else: Set derli2 = Range("B1").End(xlDown).Offset(1)
  44. End If
  45.  
  46.  
  47. If CheckBox3.Value = True Then
  48. Sheets("macro").Activate
  49. Range("E10").Select
  50. Selection.Copy
  51. Sheets("prestation").Activate
  52. derli2.Select
  53. ActiveSheet.Paste
  54.  
  55. End If
  56. Unload UserForm3
  57.  
  58. End Sub


Pour palier au problème j'ai tenté d'ajouter des "public range", mais ce n'est pas la solution... Je continue de plancher là dessus. Si quelqu'un à une idée, je suis preneuse!
m
0
l
Contenus similaires

Meilleure solution

2 Août 2012 10:10:24

J'ai réussis à résoudre mon problème toute seule en incrémentant l'offset en fonction du nombre de case cochées,
Ma solution n'est certainement pas la meilleure mais elle fonctionne!
Bonne journée à tous!
partage
16 Août 2012 15:02:27

Merci !
(Ce forum est un peu désert la première quinzaine d'Août !)
m
0
l