Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Macro pour copier/coller sur la ligne suivante

Denise Frigon

XLDnaute Nouveau
Bonjour,
J'ai lu plusieurs discussions concernant ce problème mais aucune ne répond à mon problème. J'aurais besoin de votre aide. A ce que je comprends, il y a plusieurs façon de créer une macro pour copier/coller sur la ligne suivante.
Je désire copier plusieurs cellules d'une facture pour faire un historique des factures. Donc pour ne pas avoir a ajouter +1 a chaque commande, j'essaie de donner la commande suivante au debut de la macro: Row = Sheets("historique").Range("A2").End(xlDown).Row + 1. Cette formule ne fonctionne pas. J'ai essayé End(xlUp).Offset(1) et aussi Offset(1,0) et rien n'y fait, dès que je pèse sur le bouton de la macro, l'information précédente est remplacée par la nouvelle.

Y a-t-il une formule magique? je suis débutante avec VBA. merci
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Denise, François,

bienvenue sur le site XLD !

tu as écrit cette instruction : Row = Sheets("historique").Range("A2").End(xlDown).Row + 1 ; oh là ! tu utilises Row en tant que variable alors que c'est un mot-clé (keyword) réservé de VBA ! à la place, utilise par exemple :​

Ligne = Sheets("historique").Range("A2").End(xlDown).Row + 1 ; ou plus simplement :

lig = Sheets("historique").Range("A2").End(xlDown).Row + 1

moi, perso, j'utilise :

lig = Worksheets("historique").[A2].End(4).Row + 1

ou même :

lig = [historique!A2].End(4).Row + 1

c'est plus court, hein ?

ça devrait marcher, mais à condition qu'il n'y aie pas de ligne vide intercalaire entre toutes les autres lignes de données ; c'est pourquoi on préfère habituellement cette autre méthode :​

lig = Worksheets("historique").Cells(Rows.Count, "A").End(xlUp).Row + 1

autre façon de l'écrire :

lig = Worksheets("historique").Cells(Rows.Count, 1).End(3).Row + 1

ça revient à la solution de François, mais avec en plus le nom de la feuille ; d'un autre côté, c'est inutile de préciser le nom de la feuille si cette feuille est la feuille active ; dans ce cas, il suffit de :

lig = Cells(Rows.Count, 1).End(3).Row + 1


ce serait mieux si tu pouvais envoyer ton fichier (sans données confidentielles) ; pour cela, tu peux utiliser le bouton "Joindre un fichier" que tu verras en bas à gauche de ton prochain post en cours d'édition.
soan
 
Dernière édition:

Denise Frigon

XLDnaute Nouveau
Bon matin Soan. Tu as un humour douteux mais ta formule fonctionne, alors je te remercie et joindrai le fichier a l'avenir. Bonne journée.
 

soan

XLDnaute Barbatruc
Inactif
@Denise Frigon

excuse-moi si tu n'as pas aimé mon humour, c'était juste pour blaguer sur le sirop d'érable collant, pas pour ironiser sur les québécois ou les canadiens ; je viens de modifier mon post #3 : j'ai enlevé tout ce qui était blague ; mais ce que j'ai écrit à propos d'éviter d'utiliser un keyword comme nom de variable est très sérieux ; car sinon, VBA s'y perd : même si le keyword Row existe, VBA crée une variable de nom Row qui est au départ initialisée à 0, et c'est sans doute pour ça que ta macro initiale ne marchait pas.

j'suis content qu'ma formule fonctionne, alors si elle a pu t'aider, c'est l'essentiel ! j't'aiderai davantage avec plaisir quand tu auras joint ton fichier. (si c'est dans mes compétences, et si j'suis disponible)

bonne journée à toi aussi.

soan
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…