Se connecter / S'enregistrer
Votre question

Aide vba coller la cellule sur une cellule au dessus

Tags :
  • coller
  • Programmation
Dernière réponse : dans Programmation
23 Mai 2011 16:20:38

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

a c 145 L Programmation
23 Mai 2011 16:56:25

Montre nous ton code, l'erreur ne doit pas être bien grave ;) 
m
0
l
24 Mai 2011 09:15:17

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
m
0
l
Contenus similaires
24 Mai 2011 09:19:43

Désolé le "sub ligne_suivante()" s'est collé avant mon texte...!
il est placé évidemment avant "Sheets ("Feuil2").Select"

m
0
l
a c 145 L Programmation
24 Mai 2011 10:56:52

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.
m
0
l
24 Mai 2011 11:33:58

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é.

m
0
l
a c 145 L Programmation
24 Mai 2011 12:09:04

Il faut en fait que lorsque tu arrives à une cellule à recopier, tu parcoures ta colonne C pour trouver la première ligne vide.

Je te conseille de faire une petite sub pour ça, qui te renverra le N° de cette ligne.
m
0
l
24 Mai 2011 12:20:09

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
m
0
l
a c 145 L Programmation
24 Mai 2011 14:33:49

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
m
0
l
31 Mai 2011 09:05:09

Bonjour Crazycat,

J'ai réussi à faire ce que je voulais.
Merci pour ton aide. :-)

m
0
l
a c 145 L Programmation
31 Mai 2011 09:28:06

De rien, je t'ai juste donné une piste, bravo à toi !
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS