VBA excel, coller cell sans écraser autre ce

Résolu
platinium31 -  
 platinium -
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 ?
Configuration: Windows Vista
Internet Explorer 7.0

5 réponses

  1. platinium
     
    up, personne ne connait la réponse ?
    0
    1. Papou
       
      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
  2. platinium
     
    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
    1. Papou
       
      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
  3. platinium
     
    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
    1. platinium
       
      rectification, c'est selection.paste sur la dernière ligne et non selection.copy
      0
    2. Papou > platinium
       
      Essaies 'sheets(.....).activate' au lieu de 'sheets(.....).select'

      Papou
      0
    3. platinium > Papou
       
      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
    4. Papou > platinium
       
      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
    5. platinium > Papou
       
      Merci papou pour m'avoir aider à résoudre ce problème, ça m'a été d'une grande aide !!!
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. platinium
     
    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