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
Bonjour Denise, François,

bienvenue sur le site XLD ! :)

je suppose que tu es québécoise. (ou tout au moins du Canada) 😜 comment j'ai deviné ? oh, pour rien ! en général c'est vous qui devez peser très fortement sur une touche pour qu'elle s'enfonce ; nous, en général, il nous suffit d'appuyer simplement sur la touche, même légèrement ; des fois, j'ai l'impression qu'au Canada, vous avez dû faire couler par mégarde du sirop d'érable sur le clavier ! du coup, les touches sont tellement collantes qu'elles ont du mal à être enfoncées... 😁


tu as écrit cette instruction : Row = Sheets("historique").Range("A2").End(xlDown).Row + 1 ; oh, malheureuse ! 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 ? (et t'auras moins d'touches à peser ! 😄)

ç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


pour une formule magique, ce serait mieux si tu pouvais envoyer ton fichier (de préférence sans sirop d'érable, et sans données confidentielles) ; pour cela, tu peux peser sur le bouton "Joindre un fichier" que tu verras en bas à gauche de ton prochain post en cours d'édition ; mais peut-être que la magie a déjà opéré et que c'est plus nécessaire ? 🍀


edit : tu as écrit : « dès que je pèse sur le bouton de la macro » ; mais nous, c'est pareil pour le bouton d'une macro et pour une touche : on appuie aussi sur le bouton, sans peser dessus. 😜 vous mettez du sirop d'érable même sur l'écran ? 😱 ça sert comme papier attrape-mouches, ou comme papier tue-mouches ? 🤣 j'imagine le moment de la revente de l'ordi : « qui veut acheter un PC tout gluant ? » (oh, tiens ! y'a des grizzlis parmi les acheteurs ! ils ont confondu le sirop d'érable avec du miel ! 🤣🤣🤣)
soan
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

Statistiques des forums

Discussions
312 104
Messages
2 085 344
Membres
102 865
dernier inscrit
FreyaSalander