Choisir la dernière ligne vide

Bonjour à tous,

j'ai un tableau de saisie qui génère des données dans une base existante. J'ai réalisé une macro qui insère une ligne et copie les données de la feuille saisie. Le problème est que mon travail artisanale ne fonctionne pas. En effet, l'insertion de ligne ne fonctionne pas et la copie vient effacer une ligne déjà existante. L'idéal serait de sélectionner la dernière ligne vide pour copier les données. Après, j'intègrerai un tri en fonction des besoins pour être tranquille. Pour plus de précision, je vous joint le morceau de macro concerné.

Sheets("base").Select:

Je vais sur la base insérer une ligne

Range("A3").Select

Selection.EntireRow.Insert

Sheets("saisie").Select: J

Je vais dans la feuille de saisie copier les données à insérer.

Range("K2:S2").Select

Selection.Copy

Sheets("base").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks

_Copie spéciale, même valeurs que l’origine

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=False

Range("A3").Select

End Sub

Un sauveteur peut-il modifier cette macro pour arriver aux besoins exprimés ci-dessus pour le grand noyé des macros que je suis?

Merci d'avance et cordialement à tous

Elfi

Bonsoir

Je ne suis pas sûre, mais je modifierai

Range("K2:S2").Select

Par

Range("K2", Range("K65536").End(xlUp)).Select

Amicalement

Nad

Bonsoir,

Bonsoir, Nad

si tu veux toujours conserver tes dernières données dans la ligne 3 de ta feuille "base", essaie ce code :

Sub copie()
With Sheets("base")
    .Rows(3).Insert
    Sheets("saisie").Range("K2:S2").Copy
    .[A3].PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    .[A3].PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End With
End Sub

Bonsoir à tous,

On peut aussi faire ceci si on n'est pas sur la feuille BASE.

With Sheets("base")
    .Select
With .Range("A3")
    .EntireRow.Insert
Sheets("saisie").Range("K2:S2").Copy
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
End With
End With

Bonne nuit

Dan

Bonsoir, Dan

et quelle est la différence, mis à part, que je n'ai pas enlevé les attributs facultatifs?

Et que sans être sur l'onglet nommé "base", le .Select est facultatif....

Amicalement

Edit :

Sub copie()
With Sheets("base")
    .Rows(3).Insert
    Sheets("saisie").Range("K2:S2").Copy
    .[A3].PasteSpecial Paste:=xlPasteValues
    .[A3].PasteSpecial Paste:=xlPasteFormats
End With
End Sub

Salut le forum

Chacun à sa façon de programmer

Sub Copie()
Sheets("saisie").Range("K2:S2").Copy
  With Sheets("base")
    .Rows(3).Insert
      With .Range("A3")
        .PasteSpecial Paste:=xlPasteValues
        .PasteSpecial Paste:=xlPasteFormats
      End With
  End With
    Application.CutCopyMode = False
End Sub

Fonctionne bien aussi.

Mytå

Bonsoir, Mytå

le fait d'insérer, après une copie, insère les cellules copiées....

Donc, ce code ne semble pas répondre à la question.....

A moins que je ne me trompe.....

Edit : dans les premiers essais effectués, avec ton code, il me semble que j'ai parlé trop vite, toutes mes excuses......

Edit 2 : en poursuivant les essais, si tu as des commentaires, ou des listes de validation dans tes cellules, icelles sont recopiées......

Donc, il n'y a pas que les valeurs, ni les formats, de recopiés.......

Re,

Felix, il m'est arrivé quelques fois d'avoir un plantage lorsqu'une macro était exécutée depuis une autre feuille. Pas dans le cas de copie de cellules d'une feuille à l'autre mais justement dans le fait d'insérer une ligne ou effectuer certaines opérations. D'où le "Select" mis dans mon code qui est plutôt une précaution.

Amicalement

Dan

hello à tous

je ne suis pas fan de VBA, mais je rappelle un conseil valable pour toute programmation :

- il faut absolument commenter son code

ainsi, on comprendrait immédiatement le rôle de

"Select" mis dans mon code qui est plutôt une précaution

(j'ai copié ci-dessus une phrase de Nad, qu'il ne m'en tienne pas rigueur. C'est valable du plus modeste au plus doué d'entre nous )

amitiés scripteuses

Bonjour à tous.

Etant néophyte, j'ai apprécié les differentes façons d'aborder le sujet qui m'ont été fournies. J'ai opté pour la solution de Mytha mais les autres sont tout aussi efficaces. cela m'a servi à répondre à Jeremy25, sur un besoin que j'avais eu moi-même il y a quelques temps. A ce titre, merci d'aller voir si ma réponse est correcte.

Toutes vos suggestions sont extrêmement formatrices. Je pense d'ailleurs que c'est un peu l'essence même de ce forum.

Conclusion, un grand bravo à tous et mille remerciements.

Bien cordialement,

Elfi.

Salut le forum

Plabrousse, tu aurais du ajouter un commentaire, d'ou venait la macro.

Mais cela n'est pas grave, le problème c'est que je ne documente pas mes codes.

Sub Copie()
'Macro par Mytå
'Sur http://forum.excel-pratique.com
'Pour la cause, je vais commenter le code de ma macro

'On copy la plage K2 à S2 de la feuille "saisie"
Sheets("saisie").Range("K2:S2").Copy
'Avec la feuille "base" on va faire des actions
  With Sheets("base")
'On insère une ligne
    .Rows(3).Insert
'On fait le copier sur la feuille "base" des valeurs
      With .Range("A3")
        .PasteSpecial Paste:=xlPasteValues 'Ici les valeurs
        .PasteSpecial Paste:=xlPasteFormats 'Et ici les formats
      End With
'Travail terminé
  End With
'On efface le mode Copier
    Application.CutCopyMode = False
End Sub

Mytå

P.S. J'espère que la personne sera comblé, sans nommer de nom !

Rechercher des sujets similaires à "choisir derniere ligne vide"