VBA excel, coller cell sans écraser autre ce

Résolu/Fermé
platinium31 - 9 juil. 2007 à 20:48
 platinium - 23 août 2007 à 22:18
Bonjour,

Je travaille sur excel. A partir d'une case à cocher, je souhaite copier puis coller un résultat dans une cellule,au sein d'un tableau. Ce tableau représente un récapitulatif des options cochées, je ne sais donc pas à l'avance dans quelle ligne (mais je sais dans quelle colonne) copier ce résultat. Je voudrais donc que mon résultat se copie sous la dernière cellule occupée.
Voici le début de mon code :

Private Sub liencamion_Click()
If choixbeton.granulometrie.Value = True Then
Sheets("type de bétons-mortiers").Range("e17").Copy

Sheets("devis").Range("f16").PasteSpecial Paste:=xlPasteValuesAndNumberFormats


Les intitulés du tabeau sont sur la ligne 16, je ne parviens pas à faire descendre ma cellule automatiquement en descendant d'une ligne à chaque option cochée ou non.
Pouvez-vous m'aider ?
A voir également:

5 réponses

Up !
0
up, personne ne connait la réponse ?
0
Bonsoir,

Tu peux utiliser une des deux lignes suivantes dans ta macro :

ActiveCell.End(xlDown).Offset(1, 0).Select (après avoir sélectionné une cellule remplie dans la colonne concernée)

ou bien :

Range("c1").End(xlDown).Offset(1, 0).Select (remplace "c1" par la colonne adéquate)

Cordialement.

Papou
0
merci papou pour ta réponse,

mais cela ne fonctionne pas.
J'ai donc tenté ceci :

Sheets("type de bétons-mortiers").Range("e17").Copy
Sheets("devis").Select
Range("f16").Select
ActiveCell.End(xlDown).Offset(1, 0).Select => erreur sur cette ligne
Selection.Copy

j'ai également essayé ceci,

Sheets("type de bétons-mortiers").Range("e17").Copy
Sheets("devis").Select
Range("f16").End(xlDown).Offset(1, 0).Select => erreur sur cette ligne
Selection.Copy

Sans succès. pour rappel, je n'ai pas de tableau prédéfini, ce sont les diverses selections qui le formeront.
que faire ?
0
Bonsoir Platinium,

Est-ce que la cellule 'f16' contient quelquechose ?
Si elle est vide, cela provoque effectivement une erreur.
Le mieux est de définir la 1ère cellule non vide de la colonne 'f' pour que cela fonctionne sans problème.
J'ai testé, ça marche.
Tiens-moi au courant.

Cordialement.

Papou
0
oui, la cellule f16 (de la feuille finale "devis")contient l'intitulé "prix vente ttc".
la cellule e17 de la feuille initiale "type de bétons-mortiers" est une somme.

il y a toujours un bog.
0
rectification, c'est selection.paste sur la dernière ligne et non selection.copy
0
Papou > platinium
12 juil. 2007 à 00:50
Essaies 'sheets(.....).activate' au lieu de 'sheets(.....).select'

Papou
0
platinium > Papou
12 juil. 2007 à 08:47
Merci papou de t'interesser à mon blocage,

la commande activate ne semble pas modifier grand chose,

sur
Sheets("type de bétons-mortiers").Range("e17").Copy
Sheets("devis").Activate
Sheets("devis").Range("f16").End(xlDown).Offset(1, 0).Select =>
ActiveCell.Paste

toujours la même erreur : "erreur d'execution 1004, erreur définie par l'application ou par l'objet"
Je ne sais pas quoi faire, j'ai regardé d'autres codes avec do...loop mais sans succès. je suis un tout nouveau débutant !
0
Papou > platinium
12 juil. 2007 à 09:27
Bonjour Platinium,

Je ne vois pas d'erreur flagrante (sur l'exemple pris chez moi, ça fonctionne).
Au fait, quelle version d'Excel utilises-tu ?
Si tu le veux, tu peux m'envoyer ton fichier (sans données confidentielles) à cette adresse :

papou79@hotmail.fr

Cordialement.

Papou
0
platinium > Papou
12 juil. 2007 à 19:25
Merci papou pour m'avoir aider à résoudre ce problème, ça m'a été d'une grande aide !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonjour Nouskiller,

Voici la solution, que j'avais eu grâce à papou :
pour ma part, voici comment ça fonctionne :
dans le code concernant mon bouton, il y a :

lg = Sheets("devis").Range("a15").End(xlDown).Row + 1
intersectransport lg, "b10", "b61", "b62", "a64", "b10", "e10", "f5", "b63", "g7"

'lg signifie que la ligne sera intégré après la dernière ligne occupée (End(xlDown).Row + 1), puis que chaque cellule sera intégré d'un cran vers la droite. Pour ma part dans mon devis, j'ai plusieurs infos : prix d'achat, px de vente, désignation, ....
'intersectectransport est le nom de la fonction créée dans un module, qui défini l'emplacement des cellules b10, b61 ...

le module se présente comme ceci :

Sub intersectransport(lg As Integer, cell1 As String, Cell2 As String, Cell3 As String, Cell4 As String, Cell5 As String, Cell6 As String, Cell7 As String, Cell8 As String, Cell9 As String)
Sheets("devis").Cells(lg, 1) = Sheets("tarif livraison").Range(cell1) * 15
Sheets("devis").Cells(lg, 2) = Sheets("type de bétons-mortiers").Range(Cell2)
Sheets("devis").Cells(lg, 3) = Sheets("type de bétons-mortiers").Range(Cell3)
Sheets("devis").Cells(lg, 4) = Sheets("type de bétons-mortiers").Range(Cell4)
Sheets("devis").Cells(lg, 5) = Sheets("tarif livraison").Range(Cell5) * Sheets("type de bétons-mortiers").Range("b59").Value
Sheets("devis").Cells(lg, 6) = Sheets("tarif livraison").Range(Cell6)
'Sheets("devis").Cells(lg, 7) = Sheets("choixcamion").Range(Cell7)
Sheets("devis").Cells(lg, 8) = Sheets("type de bétons-mortiers").Range(Cell8)
Sheets("devis").Cells(lg, 9) = Sheets("devis").Cells(lg, 6) * Sheets("devis").Cells(lg, 7) 'pour calcul du total

End Sub


pour que cela fonctionne, il te faudra peut-être placer dans les cellules au-dessus du titre de chaque colonne des espaces (donc dans la ligne 15). J'espère que cela pourra t'être utile !
0