Adresse cellule active Excel

Signaler
Messages postés
118
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 janvier 2019
-
Messages postés
118
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 janvier 2019
-
Bonjour,

Je n'arrive pas à trouver le code pour récupérer l'adresse d'une cellule active d'une feuille Excel elle-même active.

Je n'importe pas de référence Excel car ça va de la version 97-2000 à 2010.
Je fais plutôt:
Dim appExcel, Classeur, Feuille, Cellue as Object
appExcel=GetObjet(,"Excel.Application")
Classeur=appExcel.ActiveWorkbook
Feuille=Classeur.ActiveSheet

Mais le code Cellule=Feuille.ActiveCell ne fonctionne pas!

Quelqu'un peut-il m'aider?
Merci

PS: je travail avec VB.net 2008 Express Edition.

7 réponses

Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
4
Bonjour,

Pour récupérer une adresse d'une celle c'est activecell.address qui te renverre $a$1 par exemple..


L'expérience, c'est une connerie par jour, mais jamais la même..
Messages postés
118
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 janvier 2019
1
Bonjour lolokun,

Ce code fonctionnerai sous VBA ou en important une référence Excel.
Seulement, je travail sous VB.net et je n'importe aucune référence pour les raisons cités dans le post précédant.

L'avantage de ne travailler qu'avec des Object est qu'on peut travailler dans n'importe quelle version d'Excel, Word, etc...

Dans cette configuration, la commande ActiveCell donne l'erreur suivante:
Le membre public 'ActiveCell' du type 'Worksheet' est introuvable.

Merci quand d'avoir essayé... ;-)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
Salut

"ne fonctionne pas" ne veut rien dire.
Si tu as une erreur, dis-nous laquelle

Commence par dimensionner correctement tes variables.
Puisque ton fichier doit fonctionner sut plusieurs versions de Excel, impossible de les dimensionner complètement :
Dim appExcel as Object, Classeur as Object, Feuille as Object, Cellue as Object
Vois si cela change quelque chose

Deuxième chose :
Classeur , Feuille ou Cellule étant des objets (et pas des variables), il te faut mettre Set devant la ligne d'affectation :
Set Classeur=appExcel.ActiveWorkbook
Set Feuille=Classeur.ActiveSheet
Il faudra bien sûr faire pareil pour le code qui ne fonctionne pas :
Set Cellule=Feuille.ActiveCell

Astuce :
Bien que tu ne puisses pas faire référence directement aux objets Excel (à cause des version), quand tu développes, déclare proprement tes variables avec la référence complète, genre :
Dim Classeur As Workbook
Une fois que cela fonctionne sur ta machine, mets les Dim en commentaire et ressort tes Dim As Object

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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
Désolé, en VB.Net, il n'y a plus de Set
Messages postés
118
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 janvier 2019
1
Salut jack,

Holààà! La catégorie à changé. Pourquoi?
Encore une fois, je travail sous VB.NET 2008 et non en langage dérivé VBA, auquel cas je n'aurai pas posté. L'objectif étant de piloter Excel via une petite application externe développée en vb.net.

Je vais essayé de te répondre.
1ère chose:
en vb.net la décalaration de variables de même type peut se faire de la façon suivante: Dim bidule, machin, chose As Integer

2ème chose:
en vb.net, la commande Set disparait

3ème chose:
Puisque je ne peux importer les références Excel, je ne peux écrire:
Dim Classeur As Workbook. Normal, je ne suis pas en VBA.

Merci quand même... ;-)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
Oui, désolé pour la catégorie, ta syntaxe GetObjet n'étant pas courante en .Net (il y a surement mieux)

Si, tu peux écrire Dim Classeur As ExcelTruc.Workbook, mais dans ce cas, tu dois ajouter une référence à Excel et cette référence sera celle de la version de ta machine.
Quand tu déplaceras ton appli sur une machine avec une version différente, tu risques d'avoir des problèmes de compatibilité.
Je pense qu'il faudrait que tu te renseignes de ce côté là.
Messages postés
118
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
16 janvier 2019
1
Pas grave pour la catégorie, l'important est que quelqu'un puisse me répondre.

C'est justement l'utilisation d'Object qui me facilitait la vie. D'ailleurs, avec des Object, les méthodes de pilotage d'Excel diffèrent assez peu de celles avec références ou même en VBA.

Exemple, pour récupérer la valeur d'une cellule il suffit d'écrire:
Dim Valeur = maFeuille.Cells(Ligne, Colonne).Value pour peu qu'on gère les cas où le résultat est Nothing
Ou bien pour y écrire dedans:
maFeuille.Cells(Ligne, Colonne).Value = Valeur
La méthode maFeuille.Cells.Item(Ligne, Colonne).value est identique.

De la même manière on peut faire la mise en page, etc...
Dans ce cas, puisqu'on peut écrire ActiveWorkbook, ActiveSheet, pourquoi pas ActiveCell?