[Résolu] Equivalence VB de Range et Value

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
picsou59gg
Fraîchement OOthentifié
Messages : 5
Inscription : 26 mai 2007 07:06

[Résolu] Equivalence VB de Range et Value

Message par picsou59gg »

Bonjour à tous
Etant un récent utilisateur de OOo, J'ai du mal à assimiler la programmation dans les applications.

Quel serait l'équivalent de la procédure Visual Basic suivante utilisée dans Excel?

Prendre la valeur de la Cellule A1 de la feuille1 (Isue d'une formule) et la transporter dans la cellule A1 de la feuille2

Code : Tout sélectionner

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Worksheets("Feuille2").Range("A1").Value = _
Worksheets("Feuille1").Range("A1").Value
End Sub
Merci
Cordialement
Modérateur a écrit :
Le titre de votre question n'était pas assez explicite et nous l'avons modifié. En effet, lors d'une recherche, ce sujet risquait de passer inaperçu et donc de ne pas aider d'autres personnes ayant le même problème que vous.

Voici des astuces pour avoir un titre optimum :
http://user.services.openoffice.org/fr/ ... .html#1002

La prochaine fois, pensez à bien choisir les termes du titre de votre question. Merci de votre collaboration
Modérateur a écrit :Merci de mettre les balises code
Dernière modification par picsou59gg le 27 mai 2007 18:30, modifié 3 fois.
Windows XP SP2 - OOo V2.1
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour et bienvenue sur ce forum

thisComponent représente le document courant
Sheets est la collection des feuilles
getByName est une méthode permettant d'accéder à un objet par son nom
getCellRangeByName permet d'accéder à une plage (voire une seule cellule) par son nom

Exemple :

Code : Tout sélectionner

sub ExoSaisieCellules
dim ExoClasseur as Object, ExoFeuille as Object

ExoClasseur = thisComponent
ExoFeuille=ExoClasseur.Sheets.getByName("Feuille1")
ExoFeuille.getCellRangeByName("A1").string="Texte exemple"
ExoFeuille.getCellRangeByName("A2").formulaLocal="28/06/06"
ExoFeuille.getCellRangeByName("A3").value=2310
ExoFeuille.getCellRangeByName("A4").formula="=today()"
ExoFeuille.getCellRangeByName("A5").formulaLocal="=aujourdhui()"

end sub

Cette section du forum comprend de nombreux autres exemples de mise en oeuvre. Utiliser la recherche sur ces termes
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: Visual Basic

Message par bm92 »

picsou59gg a écrit :Quel serait l'équivalent de la procédure Visual Basic suivante utilisée dans Excel?
Bonjour et bienvenue dans le forum,

La programmation OpenOffice est assez différente de VBA Excel, et moins évidente.
Pour plus d'information, lis le post-it L'essentiel pour programmer efficacement.

Il faut comprendre qu'on ne peut pas te traduire toutes tes macros, il te faudra apprendre les bases.
Pour répondre plus précisément à ta question:

La notion de Range existe dans l'API, mais est différente d'Excel. Aussi ta macro ne peut pas être codée ni utilisée telle quelle avec l'argument Target As Range.

L'instruction suivante dans ta macro peut se traduire par:

Code : Tout sélectionner

Dim monDoc as object, f1 as object, f2 as object
dim cell1 as object, cell2 as object

monDoc = thisComponent
f1 = monDoc.Sheets.getByName("Feuille1")
f2 = monDoc.Sheets.getByName("Feuille2")
cell1 = f1.getCellRangeByName("A1")
cell2 = f2.getCellRangeByName("A1")
cell2.Value = cell1.Value
Comme tu le vois, l'API OpenOffice est parfois un petit peu lourd :?

______
Bernard
picsou59gg
Fraîchement OOthentifié
Messages : 5
Inscription : 26 mai 2007 07:06

Message par picsou59gg »

Rebonjour à tous
Merci pour vos réponses,
J'ai transposé le code de bm92.
cela fonctionne en tant que macro dont l'éxécution ne peut se faire que par une commande quelconque (Bouton).
Mais comment faire pour qu'elle s'éxécute automatiquement?

Dés que l'on entre une valeur dans cell1, elle se transpose automatiquement dans cell2

Merci encore
@+
Windows XP SP2 - OOo V2.1
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Pas besoin de macro pour cela : dans Cell2 taper la formule :

Code : Tout sélectionner

=Feuille1.A1
si Cell1 est la cellule A1 de la feuille1...

Si vraiment on veut passer par une macro, il faut utiliser un listener gestionnaire d'événements).

Voir par exemple :
http://user.services.openoffice.org/fr/ ... =7405#7405

Rechercher sur "listener" pour obtenir d'autres exemples
picsou59gg
Fraîchement OOthentifié
Messages : 5
Inscription : 26 mai 2007 07:06

Message par picsou59gg »

Merci à tous,
Je vais me contenter du code de bm92 que je vais adapter à toutes les sauces
Cordialement
@+
Windows XP SP2 - OOo V2.1