[VBA] Portée des variables
Résolu/Fermé
modjibe
Messages postés
45
Date d'inscription
vendredi 20 juillet 2007
Statut
Membre
Dernière intervention
25 avril 2008
-
24 juil. 2007 à 12:22
Utilisateur anonyme - 25 juil. 2007 à 15:21
Utilisateur anonyme - 25 juil. 2007 à 15:21
A voir également:
- [VBA] Portée des variables
- Portee wifi - Guide
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Ombre portée illustrator - Forum Illustrator
10 réponses
choubaka
Messages postés
39409
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
24 décembre 2024
2 104
24 juil. 2007 à 12:28
24 juil. 2007 à 12:28
salut
et avec la fonction "Call" et des fonctions publiques de type "Get" te renvoyant ce que tu dois utiliser ???
ça donnerait un truc du genre : "Call MyDocument.getSomething()"
et avec la fonction "Call" et des fonctions publiques de type "Get" te renvoyant ce que tu dois utiliser ???
ça donnerait un truc du genre : "Call MyDocument.getSomething()"
Utilisateur anonyme
24 juil. 2007 à 17:02
24 juil. 2007 à 17:02
Bonjour,
l'instruction [ Set appExcel = CreateObject("Excel.Application") ] crée
un pointeur sur l'objet [ appExcel <> Nothing ] mais toujours = ""
L'entrée du programme doit passer par une routine d'initialisation dans laquel vous
effectuer les affectations par défaut ! Celles-ci seront alors visible pour tous le code subséquent
l'instruction [ Set appExcel = CreateObject("Excel.Application") ] crée
un pointeur sur l'objet [ appExcel <> Nothing ] mais toujours = ""
L'entrée du programme doit passer par une routine d'initialisation dans laquel vous
effectuer les affectations par défaut ! Celles-ci seront alors visible pour tous le code subséquent
Public appExcel As Variant Sub Main() Initialisation ... End Sub
modjibe
Messages postés
45
Date d'inscription
vendredi 20 juillet 2007
Statut
Membre
Dernière intervention
25 avril 2008
3
25 juil. 2007 à 09:42
25 juil. 2007 à 09:42
La solution de Lupin marche très bien ! Merci Lupin ! Mon programme est un peu plus joli et clair pour celui qui le reprendra ;-)
choubaka
Messages postés
39409
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
24 décembre 2024
2 104
24 juil. 2007 à 12:58
24 juil. 2007 à 12:58
et bien tu peux essayer de créer une fonction de type sub qui te renvoye en parmaètre le module ou l'objet (en référence ...) sur lequel tu peux travailler...
c'est de l'orienté objet déguisé ;-)
c'est de l'orienté objet déguisé ;-)
modjibe
Messages postés
45
Date d'inscription
vendredi 20 juillet 2007
Statut
Membre
Dernière intervention
25 avril 2008
3
24 juil. 2007 à 13:07
24 juil. 2007 à 13:07
Ca m'étonne qu'il n'y ait pas une méthode plus simple mais je vais essayer !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
choubaka
Messages postés
39409
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
24 décembre 2024
2 104
24 juil. 2007 à 13:23
24 juil. 2007 à 13:23
c'est peut être moi qui suis tordu aussi ;-)
choubaka
Messages postés
39409
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
24 décembre 2024
2 104
24 juil. 2007 à 17:13
24 juil. 2007 à 17:13
ça c'est déjà moins tordu :-DDDD
honte à moi ..
honte à moi ..
Utilisateur anonyme
24 juil. 2007 à 19:00
24 juil. 2007 à 19:00
re :
peut-être mais je puis te dire en connaissance de cause que le type effectué par l'instruction
Set est très difficile à capter puisque contextuel. Ne vous sentez point diminuer sir choubaka,
votre diligence est déjà rayonnant de soleil :-)
autre point, il y a une énorme différence sur l'instruction Set par le typage de la variable
Dim MaVar As Variant
Set MaVar = CreateObject("Excel.Application")
Dim Autre As PowerPoint.Application
Set Autre = CreateObject("Excel.Application")
avec ces deux variables vous atteindrez l'e classeur excel mais certaines instructions vont
fonctionner et pas d'autres. Lorsque le type est Variant, il devient un objet de scripting
(pas la même librairie, une librairie plus modeste) avec des propriétés et méthodes plus
restreinte.
Cordialement
Lupin
peut-être mais je puis te dire en connaissance de cause que le type effectué par l'instruction
Set est très difficile à capter puisque contextuel. Ne vous sentez point diminuer sir choubaka,
votre diligence est déjà rayonnant de soleil :-)
autre point, il y a une énorme différence sur l'instruction Set par le typage de la variable
Dim MaVar As Variant
Set MaVar = CreateObject("Excel.Application")
Dim Autre As PowerPoint.Application
Set Autre = CreateObject("Excel.Application")
avec ces deux variables vous atteindrez l'e classeur excel mais certaines instructions vont
fonctionner et pas d'autres. Lorsque le type est Variant, il devient un objet de scripting
(pas la même librairie, une librairie plus modeste) avec des propriétés et méthodes plus
restreinte.
Cordialement
Lupin
modjibe
Messages postés
45
Date d'inscription
vendredi 20 juillet 2007
Statut
Membre
Dernière intervention
25 avril 2008
3
25 juil. 2007 à 09:20
25 juil. 2007 à 09:20
J'essaie ça et je vous tiens au courant, mais ça a l'air pas mal ;)
Mais le type Variant il est conseillé ?
Et entrée du programme ça veut dire à l'ouverture de fichier ? de chaque fonction ?
Mais le type Variant il est conseillé ?
Et entrée du programme ça veut dire à l'ouverture de fichier ? de chaque fonction ?
Utilisateur anonyme
25 juil. 2007 à 15:08
25 juil. 2007 à 15:08
re :
en fait, si je ne m'abuse, vous piloter excel à partir de Word.
Donc l'objet [ Excel.Application ] n'est pas référencé par défaut sous Word.
Lorsque vous déclaré une variable de type objet : Public appExcel As Object
Word connait déjà beaucoup d'objet mais pas celui que vous lui présenté :
Set appExcel = CreateObject("Excel.Application")
Il sera peut-être capable de faire un bout de chemin mais tôt ou tard, une instruction va déconner.
si vous typé la variable par :
Dim appExcel As Excel.Application
vous devrez charger la références sous VBE de Word [ Microsoft Excel xx.x Objects Library ].
Ce qui rend votre application moins transportable sur d'autres postes, mais avec beaucoup
plus d'aisance pour manoeuvrer l'objet.
Si vous typé le variable en type Variant, vous entrez dans la gamme des objets de "scripting", en référence consulter Visual Basic Scripting Host. Par défaut en VBS toutes les variables ne sont
pas typé puisque native en Variant
[ Dim appExcel ] = [ Dim appExcel As Variant ].
Le VBS s'écrit dans le bloc note, vous trouverez en exemple ici-même dans ce forum que j'ai codé en recherchant le mot clé : [ ARBORESCENCE_Sous_EXCEL ]. Je pilote Excel depuis le bloc-note!
Donc ainsi déclaré, l'aisance de manoeuvre est moins présence mais le code est transposable
d'un poste à l'autre sans manipulation.
Je souligne aussi toutefois, qu'il est possible par VBA de vérifier la présence de la référence,
de la charger si celle-ci est manquante. J'ai fait le même type de manoeuvre pour mon classeur [ VizioXLA que j'ai publié sur excel-download. Il faut un peut de recherche mais ça se construit.
Il y a aussi une autre tournure de déclaration dont je suis moins familier :
Dim appExcel As New Excel.Application
Je n'en ai jamais eu spécifiquement besoin et je ne pourrais vraiment définir la nuance
je cède la main ici :-) et bien entendu pour ce que j'en ai dit, je n'ai utiliser que des mots ...
Cordialement
Lupin
Lupin
en fait, si je ne m'abuse, vous piloter excel à partir de Word.
Donc l'objet [ Excel.Application ] n'est pas référencé par défaut sous Word.
Lorsque vous déclaré une variable de type objet : Public appExcel As Object
Word connait déjà beaucoup d'objet mais pas celui que vous lui présenté :
Set appExcel = CreateObject("Excel.Application")
Il sera peut-être capable de faire un bout de chemin mais tôt ou tard, une instruction va déconner.
si vous typé la variable par :
Dim appExcel As Excel.Application
vous devrez charger la références sous VBE de Word [ Microsoft Excel xx.x Objects Library ].
Ce qui rend votre application moins transportable sur d'autres postes, mais avec beaucoup
plus d'aisance pour manoeuvrer l'objet.
Si vous typé le variable en type Variant, vous entrez dans la gamme des objets de "scripting", en référence consulter Visual Basic Scripting Host. Par défaut en VBS toutes les variables ne sont
pas typé puisque native en Variant
[ Dim appExcel ] = [ Dim appExcel As Variant ].
Le VBS s'écrit dans le bloc note, vous trouverez en exemple ici-même dans ce forum que j'ai codé en recherchant le mot clé : [ ARBORESCENCE_Sous_EXCEL ]. Je pilote Excel depuis le bloc-note!
Donc ainsi déclaré, l'aisance de manoeuvre est moins présence mais le code est transposable
d'un poste à l'autre sans manipulation.
Je souligne aussi toutefois, qu'il est possible par VBA de vérifier la présence de la référence,
de la charger si celle-ci est manquante. J'ai fait le même type de manoeuvre pour mon classeur [ VizioXLA que j'ai publié sur excel-download. Il faut un peut de recherche mais ça se construit.
Il y a aussi une autre tournure de déclaration dont je suis moins familier :
Dim appExcel As New Excel.Application
Je n'en ai jamais eu spécifiquement besoin et je ne pourrais vraiment définir la nuance
je cède la main ici :-) et bien entendu pour ce que j'en ai dit, je n'ai utiliser que des mots ...
Cordialement
Lupin
Lupin
Utilisateur anonyme
25 juil. 2007 à 15:21
25 juil. 2007 à 15:21
re :
et pour l'entrée du programme, sous word c'est la routine :
dans le Module [ ThisDocument ]
sous Excel, dans le module [ ThisWorkbook ]
et ainsi de suite pour chaque joliciel de la suite office, quoique access est particulier.
en entrée de programme veut dire qu'avant d'utiliser tes objets, la première routine
quelquel soit qui doit toucher l'objet devra au préalable appeller l'initialisation.
et si tu gére des évènements je suggère un simple [ Flag ] (Drapeau) que tu installe
en début de chaque function/routine.
Cordialement
Lupin
et pour l'entrée du programme, sous word c'est la routine :
dans le Module [ ThisDocument ]
Private Sub Document_New() End Sub Private Sub Document_Open() End Sub
sous Excel, dans le module [ ThisWorkbook ]
Private Sub Workbook_Open() End Sub
et ainsi de suite pour chaque joliciel de la suite office, quoique access est particulier.
en entrée de programme veut dire qu'avant d'utiliser tes objets, la première routine
quelquel soit qui doit toucher l'objet devra au préalable appeller l'initialisation.
et si tu gére des évènements je suggère un simple [ Flag ] (Drapeau) que tu installe
en début de chaque function/routine.
Public Drapeau As Boolean Sub Exemple () If Not( Drapeau ) Then Drapeau = Initialise End If ... End Sub Function Initialise () As Boolean Initialise = True Set appExcel ... Set cellExcel ... End Function
Cordialement
Lupin
24 juil. 2007 à 12:41