[Catégorie modifiée .Net -> VBA] Macro-Excel 2003 : Copier la dernière ligne var

xalinys Messages postés 6 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 25 mai 2011 - 20 mai 2011 à 10:25
xalinys Messages postés 6 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 25 mai 2011 - 25 mai 2011 à 16:51
Bonjour,

Au secours ! J'ai besoin d'aide car je suis débutante et que j'ai atteint les limites de ma tentative de compréhension du langage VBA dans la problématique suivante :

Mon problème :
J'ai un classeur Excel 2003 avec plusieurs onglets nommé selon un code client donné et contenant l'historique des actions faites chez le client en question.
Sur un onglet récap, j'ai une liste de ces client en colonne A.
J'essaie de créer une macro pour copier la dernière ligne de chaque onglet client (qui est variable) dans ce premier onglet de suivi sur la ligne qui correspond au client en question et coller l'information à partir de la colonne N de cette ligne.
NB : Il peut y avoir une cinquantaine d'onglets.

Le but est de pouvoir suivre quelle est la dernière action faite chez chacun de nos clients.

J'ai essayé, compiler des pistes trouvées sur divers forum et je m'arrache les cheveux.
Ci-dessous la macro tenté au stade où je me suis arrêtée de désespoir :

Sub Paste_last_comment()
'

Dim Client As String
vclient = Sheets("Suivi top 30").Range("A2:A100").Value

For Each vclient In ActiveWorkbook.Sheets
'If (vclient <> "suivi top 30") Then
Sheets("vclient").Range("A65000").Select
Selection.End(xlUp).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy

Sheets("Suivi top 30").Activate
ActiveCell.Range("N1").Select
Selection.End(xlDown).Row 1
ActiveSheet.Paste

Next vclient

End Sub

Bon j'ai conscience d'être un peu à côté de la plaque, c'est pourquoi je vous serais reconnaissante si quelqu'un pouvait m'aider.

Merci d'avance.
Xalinys

5 réponses

xalinys Messages postés 6 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 25 mai 2011
20 mai 2011 à 10:29
Sheets("Suivi top 30").Activate
ActiveCell.Range("N1").Select
Selection.End(xlDown).Row 1
ActiveSheet.Paste


NB : J'ai écrit cette partie parce que je ne sais pas comment faire référence à la cellule : "colonne N/ligne correspondant au client" pour coller l'information copier dans l'onglet de ce client.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 mai 2011 à 10:50
Salut

Et quelle est ta question, voire même, quel ton problème ?
La notion de "ça marche pas" ne suffit pas.

Apprends à déboguer et suivre ce que fait ton programme, ligne à ligne :
- F9 sur une ligne de code
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
xalinys Messages postés 6 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 25 mai 2011
20 mai 2011 à 11:14
Bonjour Jack,

Dans un sens large, mon problème est que je n'ai jamais appris VBA. Je m'y suis mise toute seule il y a peu et je ne comprends pas encore tout le vocabulaire, la syntaxe ou même parfois la logique. Quant au débogage, j'ai fait ce que tu as dit mais là c'est un grand trou noir aussi dans mon cerveau

Je n'arrive pas ici par exemple à trouver la syntaxe qui dit "colle les données sur la ligne correspondante au nom de l'onglet d'où l'on a copié l'info mais à partir de la colonne N". En excel je pense que ce serait un mix impossible entre recherche"v" (dont le v serait ici "onglet") et index...

Donc ce n'est pas une notion de "ça ne marche pas", ni de mauvaise volonté, mais plutôt une notion de "comment écrire l'ordre pour qu'il soit compris par VBA".

Par exemple, lors de l'exécution, j'ai un bogue sur Sheets("vclient").Range("A65000").Select, pourtant c'est un mix d'élément qui fonctionne ailleurs. J'ai fait pleins d'essais et toujours rien...

Merci d'avance pour ton aide.
Xalinys
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 mai 2011 à 13:26
Pas de souci, Xalinys, mais faut bien détailler ton problème.
Pense aussi à l'enregistreur de macro, exemple à partir de ce que tu décris :

"Copier la dernière ligne d'une feuille"
Il te faut donc retrouver cette dernière ligne (non vide).
Manuellement, ça se retrouve facilement en cliquant que la première cellule puis en faisant Ctrl-Fin --> Enregistreur de macro.
La cellule sera sélectionnée - tu n'as plus qu'à ressortir le n° de la ligne avec Selection.Row, puis à sélectionner la ligne entière --> Enregistreur de macro.

"...la dernière ligne de chaque onglet client"
Ta boucle
For Each vclient In ActiveWorkbook.Sheets
semble toute indiquée.

"... et coller l'information à partir de la colonne N de cette ligne."
Si tu as copier une ligne entière, tu ne pourras pas coller dans une seule cellule. Il faut revoir ce que tu as à copier-coller.

Le code que tu nous montres semble correct et bien pensé.
Reste à savoir pourquoi tu considères qu'il ne marche pas - c'est là où tu n'es pas claire.
Que reproches-tu à ce code ?
Que fait-il ?
Que ne fait-il pas ?
As-tu suivi, pas-à-pas avec le débogage et la touche F8, ce que fait ton programme ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
xalinys Messages postés 6 Date d'inscription vendredi 3 décembre 2010 Statut Membre Dernière intervention 25 mai 2011
25 mai 2011 à 16:51
Bonjour Jack,

Merci pour ton aide.
Le problème était que une fois copiée, ma macro ne parvenait pas à retrouver les coordonnées sur la bonne ligne de l'onglet de récap où coller l'info : "Colonne N : ligne vclient" donc elle ne collait rien bug.

Mais j'ai trouvé la solution : J'ai plutôt écrit ma formule dans l'autre sens en disant :
"cellule x de ma ligne vclient = valeur de la cellule Y située sur la dernière ligne non vide de l'onglet correspondant à vclient" --> cela évite le copier / coller et la recherche de l'ordonnée dans le récap.

Tes conseils (même si j'ai mis un long moment à comprendre comment utiliser le débogage) m'ont bien aidée. Je te remercie encore.

Biz
Xalinys
0
Rejoignez-nous