Se connecter avec
S'enregistrer | Connectez-vous

Aide vba coller la cellule sur une cellule au dessus

Dernière réponse : dans Programmation

Bonjour,
je suis novice en VBA et je bloque à cause d'un petit problème mais qui a tout de même son importance.
je copie une cellule seulement si la cellule à coté n'est pas égale à 0. Pour ça j'ai trouvé le code qui fonctionne correctement.
Seulement la copie se fait sur la même ligne (à quelques colonnes de décalage) et moi je voudrais que la cellule soit copiée quelques lignes plus haut, admettons à partir de la ligne n°3.
Donc la prochaine cellule ne comportant pas de 0 à sa cellule de droite sera copiée à la ligne n°4; et ainsi de suite...
j'espère avoir été suffisamment claire!

Merci pour votre aide.

Autres pages sur : aide vba coller cellule cellule

Lassé par la pub ? Créez un compte

Merci pour ta réponse si rapide.
Voici mon code, tout fonctionne jusqu'à la ligne " Range("C1").End(xlDown).Row 1" normalement c'est Row+1 mais le "+" se supprime dès que je lance la macro. Je pense que je n'utilise pas le bon code pour cette ligne.

  1. Sub ligne_suivante()
  2. Sheets("Feuil2").Select
  3. Range("B1").Select
  4. Do While ActiveCell = "0"
  5. ActiveCell.Offset(1, 0).Select
  6. Do While ActiveCell <> "0"
  7. ActiveCell.Offset(0, -1).Select
  8. Selection.Copy
  9. Range("C1").End(xlDown).Row 1
  10. ActiveSheet.Paste
  11. ActiveCell.Offset(1, -3).Select
  12. If ActiveCell = Empty Then
  13. Exit Do
  14. Exit Do
  15. End If
  16. Loop
  17. Loop
  18. End Sub
Expert Programmation

Tout d'abord, deux petits points: l'utilisation des balises "code" rend le post plus lisible et tu peux éditer ton post.

Sinon, je pense qu'il y a effectivement une erreur dans ton code. Qu'essayes-tu de sélectionner (ou de faire) avec "Range("C1" ).End(xlDown).Row 1" ?
Range("C1").End(xlDown).Select sélectionne toute la colonne C, il faut donc que tu définisse exactement ce que tu veux faire à ce niveau de ton code.

je te donne un exemple:

A ce niveau du code je veux coller la donnée de la cellule A3 (par rapport à l'exemple) à C1. Je pourrai utiliser activecell.offset... mais le problème est que comme il ne faut pas copier A5 mais A6 il va me le coller en C4 et non en C3. Je souhaiterai que les lignes copiées se mettent les unes à la suite des autres:

Résultat que je souhaiterai avoir:
(je n'ai pas mis de code pour faire la colonne 4, j'utiliserai une recherchev)

toto 0 tata 2
titi 0 tutu 4
tata 2 lolo 5
tutu 4 lili 3
tyty 0
lolo 5
lulu 0
lili 3


Stade auquel je suis arrivée:

toto 0
titi 0
tata 2 tata 2
tutu 4 tutu 4
tyty 0
lolo 5 lolo 5
lulu 0
lili 3 lili 3

Avec ActiveCell.Offset j'aurai:

toto 0 tata 2
titi 0 tutu 4
tata 2
tutu 4 lolo 5
tyty 0
lolo 5 lili 3
lulu 0
lili 3
Il va sauter une ligne à chaque fois qu'il croisera un 0.


J'espère t'avoir éclairé.

Merci pour tes conseils.
la petite sub peut s'intégrer directement dans la grande ou il faut que je la créée à coté pour l'appeler après dans la grande?

autrement dit peut-on faire:

sub...()
....
....
sub...()
....
....

End Sub
End Sub


ou faut-il que je fasse
sub 1()
...
End Sub


sub 2()
...
(code qui appelle sub1()) -> si cela existe, lequel?
...
End Sub
Expert Programmation

Crée là à côté, sinon il n'y a aucun intérêt à faire une sub supplémentaire :) 

Et pour appeler une sub (appelons la "premierVide"), c'est :
  1. ligne = premierVide("C");

(C est le nom de la colonne où il faut chercher).
Et ta sub premierVide est de la forme:
  1. sub premierVide(col as String)
  2. ...
  3. premierVide = ...
  4. End Sub
Lassé par la pub ? Créez un compte
Tom's guide dans le monde