Sélectionner une plage jusqu'à la dernière ligne

Sélectionner une plage jusqu'à la dernière ligne - VB/VBA/VBS - Programmation

Marsh Posté le 21-10-2014 à 08:44:47    

Bonjour,
Malgré que ce sujet ne soit pas nouveau, je ne trouve pas la réponse à mon problème. Il faut savoir que mes connaissances en vba sont limitées.
J'ai une macro en vba qui tourne sous Word. Celle ci ouvre un fichier Excel (jusque là pas de problème) dans lequel je cherche à copier un tableau dont je ne connais pas le nombre de ligne (A1 à Jx). Enfin je souhaite coller le tableau dans mon document Word.
La fonction de sélection fonctionne bien si je fais cette commande dans Excel mais pas sous Word.  
Ci-dessous un extrait du code où je rencontre le problème. Merci d'avance pour votre aide.
 
Set appexcel = CreateObject("Excel.Application" )
appexcel.Visible = True
Set wbExcel = appexcel.Workbooks.Open("C:\InputDeviceSystem1.xlsx" )
 
derlig = source.Sheets(1).[A65536].End(xlUp).Row
source.Sheets(1).range("A1:J" & derlig).Copy  
Selection.Paste

Reply

Marsh Posté le 21-10-2014 à 08:44:47   

Reply

Marsh Posté le 21-10-2014 à 09:01:36    

 
           Bonjour,
 
           pourtant il y a ce qu'il faut dans ce forum, sujet récurrent …
 
           Si le tableau est un bloc contigu, voir dans l'aide VBA la propriété CurrentRegion
 

Reply

Marsh Posté le 21-10-2014 à 09:15:20    

Salut, de quoi satisfaire ta curiosité http://www.developpez.net/forums/d [...] d-feuille/


---------------
Myanmar 90/91 : http://gadaud.gerard.free.fr/publi [...] index.html
Reply

Marsh Posté le 21-10-2014 à 12:00:31    

 
           Salut Philippe !
 
           Là il s'agit d'un problème de logique de son code mais j'attends qu'il soit balisé conformément aux règles du forum !
 
           Il pourrait aussi utiliser la propriété UsedRange pour effectuer la copie
           ou encore la propriété Range si c'est un tableau défini …
 

Reply

Marsh Posté le 21-10-2014 à 12:07:23    

Merci pour vos réponses.
J'ai déjà essayé CurrentRegion qui fonctionne bien partir d'une macro faite sous Excel mais sous Word je n'y arrive pas.
Si par exemple dans mon code j'utilise range("B3" ).CurrentRegion.Select j'ai une erreur de compilation (sub ou fonction non défini)
 

Reply

Marsh Posté le 21-10-2014 à 13:09:42    

 
           Oui normal si c'est écrit comme le code présenté initialement …
           Merci de l'éditer et d'utiliser l'icône dédiée pour le baliser !
 
           La propriété CurrentRegion n'existe pas dans Word mais ne pose pas de souci dans un code VBA Word via un objet Excel;
           commencer par vérifier la logique et les variables utilisées …
 

Reply

Marsh Posté le 21-10-2014 à 13:25:11    

C'est pas de la mauvaise volonté, mais j'utilise le forum pour la première fois et comme je le précise au début du topic, mes connaissances en vba sont limités, alors les balises pour moi c'est très flou.
J'espère que le code ci dessous répond à vos attentes.
 
1. Set appexcel = CreateObject("Excel.Application" )  
2. appexcel.Visible = True  
3. Set wbExcel = appexcel.Workbooks.Open("C:\InputDeviceSystem1.xlsx" )  
4.
5. derlig = source.Sheets(1).[A65536].End(xlUp).Row  
6. source.Sheets(1).range("A1:J" & derlig).Copy  
7. Selection.Paste

Reply

Marsh Posté le 21-10-2014 à 14:29:52    

 
           Utiliser une icône est si difficile ?!
 
           Sinon à quoi peut bien servir la variable définie en ligne n°3 si elle n'est pas utilisée par ailleurs ?!
           Chercher l'intru lignes n°5 & 6 !
 
           C'est juste de la pure logique indépendante de connaissances liées à un quelconque langage.
           Cela sent du copier / coller sans griller de neurone …
 
           Je voudrais bien voir alors le code fonctionnant sous Excel.
 

Reply

Marsh Posté le 21-10-2014 à 14:41:08    

Il est clair que je m'appui sur bon nombre de forum pour obtenir le résultat que je veux car comme indiqué mes connaissances sont limités, mais ça a au moins le mérite d'essayer.
Pour info, ce que je demande est une petite partie du code (qui pour le reste fonctionne, mais peut être pas écris dans les règles de l'art) où il y a eu de nombreuses heures passées et de nombreux neurones de griller !
Il aurai peut être était pus simple de me die où se situe l'icone.

Reply

Marsh Posté le 21-10-2014 à 14:41:55    

Il est clair que je m'appui sur bon nombre de forum pour obtenir le résultat que je veux car comme indiqué mes connaissances sont limités, mais ça a au moins le mérite d'essayer.
Pour info, ce que je demande est une petite partie du code (qui pour le reste fonctionne, mais peut être pas écris dans les règles de l'art) où il y a eu de nombreuses heures passées et de nombreux neurones de griller !
Il aurai peut être était pus simple de me die où se situe l'icone.

Reply

Marsh Posté le 21-10-2014 à 14:41:55   

Reply

Marsh Posté le 22-10-2014 à 10:14:55    

 
            La solution est pourtant là :

Marc L a écrit :

Sinon à quoi peut bien servir la variable définie en ligne n°3 si elle n'est pas utilisée par ailleurs ?!
Chercher l'intru lignes n°5 & 6 !

            Il s'agit de respecter enfin la hiérarchie objet : Application / Objet / méthode ou propriété …
 

Marc L a écrit :

commencer par vérifier la logique et les variables utilisées …

            Suivre le code en mode pas à pas via la touche F8 puis vérifier dans la fenêtre des Variables locales le contenu des variables …
 
            Sinon :

Marc L a écrit :

Je voudrais bien voir alors le code fonctionnant sous Excel.

            Donc à partir d'un code fonctionnel sous Excel, ce sera facile de le passer sous Word …
 

Reply

Marsh Posté le 22-10-2014 à 12:09:34    

Bonjour,
Après plusieurs heures passées et malgré que la solution soit peut être évidente, je n'arrive toujours pas écrire la hiérarchie objet (application, workbook, worksheet, ...) pour que cela fonctionne.
 
Je m'inspire du code qui fonctionne actuellement avec un tableau "figé", mais toujours sans succès. Ci dessous le code mais malheureusement toujours pas balisé. Pouvez vous me donner l'icone pour le faire et me donner une piste ?
 
Set appexcel = CreateObject("Excel.Application" )  
appexcel.Visible = True  
Set wbExcel = appexcel.Workbooks.Open("C:\InputDeviceSystem1.xlsx" )  
 
objExcel.Sheets("Feuil1" ).range("A1:J50" ).Activate
Set objTri = objExcel.Sheets("Feuil1" ).range("A1:J50" )
objTri.range("A1:J50" ).Copy

Reply

Marsh Posté le 22-10-2014 à 14:28:58    

 
            C'est l'icône dont l'infobulle indique : « Insérer du code … » !
 
            Activate ne sert à rien, mais là c'est encore un code (incomplet) sous Word …
 

Reply

Marsh Posté le 22-10-2014 à 14:48:14    

Je ne vois pas d'icone avec info bulle "insérer du code" désolé.
Ce que je ne vous avez pas copié est la ligne ci dessous.
 
Dim objExcel, objFichier, objTri
 
Avec cette ligne cela fonctionne, j'ai besoin de la même chose mais avec un tableau "non figé".

Reply

Marsh Posté le 22-10-2014 à 16:18:25    

 
            Si le tableau est un bloc contigu de A1 à Jx, la colonne K étant vide, remplacer le Range initial par Range("A1" ).CurrentRegion
 

Reply

Marsh Posté le 22-10-2014 à 16:43:09    

MERCI car maintenant ça fonctionne. Pour aller un peu plus loin dans le détail, cette macro dans sa version global permet de rechercher des mots dans un fichier Word et de les remplacer par des photos ou des tableaux, que je redimensionne. J'insert des lignes en couleurs, des textes en gras ...
Je peux vous assurer qu'il y a eu un paquet de neurones grillés dans ce programme.
Encore merci !
Par contre, je ne vois toujours l'icone pour baliser le code.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed