UserForm et ListBox [Résolu]

Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 28 nov. 2011 à 12:58 - Dernière réponse : Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention
- 29 nov. 2011 à 13:25
Bonjour,

je me permets de poster pour un problème que je rencontre dans un formulaire.

Le but est le suivant: renseigner l'utilisateur sur la signification d'acronyms et mots que l'on peut choisir dans des listbox d'un userform. Les résultats sont affichés dans les textbox correspondantes.
L'utilisateur choisit soit "Acronyms" soit "Definitions". Les valeurs de listbox ainsi que les valeurs liées sont stockées dans un fichier excel en local.
Mon problème est que le code est un peu lourd pour excel, cela plante même parfois; mais systématiquement j'obtiens une erreur quand je clique sur différentes valeurs d'acronyms et tente de sélectionner après des définitions (et inversement).

Erreur type: Run time error '-2147417848 (80010108)': Method 'Range' of object '_Worksheet' failed
Arrêt:
Tablo2 = Sheets("Definitions").Range("A1:A20").Value

Le code contient plusieurs procédures:
Sub InitializeListBoxAcronyms()
Dim Tablo1 As Variant
Dim i As Integer
Dim j As Integer
Dim k As Integer
Call CheckActiveSheetAcronyms
Tablo1 = Sheets("Acronyms").Range("A1:A20").Value

Me.ListBoxAcronyms.Clear

For i = 1 To UBound(Tablo1, 1)
    If Me.ListBoxAcronyms.ListCount = 0 Then Me.ListBoxAcronyms.AddItem Tablo1(i, 1)
    k = 0
    For j = 0 To Me.ListBoxAcronyms.ListCount - 1
    If Tablo1(i, 1) = Me.ListBoxAcronyms.List(j) Then
        k = 1
        End If
    Next
    If k = 0 Then Me.ListBoxAcronyms.AddItem Tablo1(i, 1)
Next

End Sub

Sub InitializeListBoxDefinitions()
Dim Tablo2 As Variant
Dim l As Integer
Dim m As Integer
Dim n As Integer
Call CheckActiveSheetDefinitions
Tablo2 = Sheets("Definitions").Range("A1:A20").Value

Me.ListBoxDefinitions.Clear

For l = 1 To UBound(Tablo2, 1)
    If Me.ListBoxDefinitions.ListCount = 0 Then Me.ListBoxDefinitions.AddItem Tablo2(l, 1)
    n = 0
    For m = 0 To Me.ListBoxDefinitions.ListCount - 1
    If Tablo2(l, 1) = Me.ListBoxDefinitions.List(m) Then
        n = 1
        End If
    Next
    If n = 0 Then Me.ListBoxDefinitions.AddItem Tablo2(l, 1)
Next
End Sub

Private Sub ListBoxAcronyms_Change()
Call CheckActiveSheetAcronyms
TextBoxAcronyms.Value = Range("B" & ListBoxAcronyms.ListIndex + 1).Value
End Sub

Private Sub ListBoxDefinitions_Change()
Call CheckActiveSheetDefinitions
TextBoxDefinitions.Value = Range("B" & ListBoxDefinitions.ListIndex + 1).Value
End Sub

Private Sub CheckBoxAcronyms_Click()
CheckBoxAcronyms.Value = True
CheckBoxDefinitions.Value = False
Call AcroDef
Call TestWorkbooksOpened
Call CheckActiveSheetAcronyms
Call InitializeListBoxAcronyms
End Sub

Private Sub CheckBoxDefinitions_Click()
CheckBoxDefinitions.Value = True
CheckBoxAcronyms.Value = False
Call AcroDef
Call TestWorkbooksOpened
Call CheckActiveSheetDefinitions
Call InitializeListBoxDefinitions
End Sub

Sub AcroDef()
If CheckBoxAcronyms.Value = True Then
    FrameAcronyms.Visible = True
    FrameDefinitions.Visible = False
ElseIf CheckBoxDefinitions.Value = True Then
    FrameDefinitions.Visible = True
    FrameAcronyms.Visible = False
ElseIf CheckBoxAcronyms.Value = False Then
    If CheckBoxDefinitions.Value = False Then
        FrameAcronyms.Visible = False
        FrameDefinitions.Visible = False
    End If
End If
End Sub

Sub TestWorkbooksOpened()
    Dim Fn As Variant
    Dim wBook As Workbook
     On Error Resume Next
    Set wBook = Workbooks("Glossary.xlsx")
    If wBook Is Nothing Then
        Fn = ThisWorkbook.Path & "\Glossary.xlsx"
        Workbooks.Open Filename:=Fn
    Else
        wBook.Activate
    End If
End Sub
Sub CheckActiveSheetAcronyms()
If ActiveSheet.Name = ("Acronyms") Then
Else: Sheets("Acronyms").Activate
End If
End Sub
Sub CheckActiveSheetDefinitions()
If ActiveSheet.Name = ("Definitions") Then
Else: Sheets("Definitions").Activate
End If
End Sub


Toute personne pouvant m'aider serait la bienvenue car étant débutant, je commence à atteindre mes limites...

Merci d'avance

Jérémy
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 29 nov. 2011 à 13:25
3
Merci
J'ai réussi à me débrouiller! Merci à tous pour votre aide!

Merci Akeen56 3

codes-sources a aidé 87955 internautes ce mois-ci

Commenter la réponse de Akeen56
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 28 nov. 2011 à 14:12
0
Merci
Bonjour,
je ne vais que m'en tenir à l'erreur que tu dénonces, à savoir sur cette ligne :
Tablo2 =  Sheets("Definitions").Range("A1:A20").Value

Cette erreur ne peut survenir que si le classeur actif ne contient pas une feuille nommée "Definitions"

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 28 nov. 2011 à 14:29
0
Merci
Bonjour,
merci pour votre réponse. J'ai vérifié et le fichier "Glossary.xlsx" reste actif et contient bien une feuille "Definitions"...
Un autre idée?
Merci d'avance
Jérémy
Commenter la réponse de Akeen56
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 28 nov. 2011 à 14:46
0
Merci
Un autre idée?

Non (et certainement pas) sur l'erreur que tu dénonces (et sur la ligne que tu montres).
Si, au moment de l'exécution du code, le classeur actif est bien celui qui contient la feuille "Definitions", la ligne montrée ne saurait provoquer l'erreur dénoncée.
Et il n'y aura pas d'autre avis possible à ce propos !
Maintenant : quand tu écris :
J'ai vérifié et le fichier "Glossary.xlsx" reste actif

Tu as vérifié cela comment ?
Es-tu certain de ce que tu n'as pas activé un autre classeur ? (il n'y en a qu'un seul, qui peut être actif à un instant t).



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 28 nov. 2011 à 14:59
0
Merci
RE bonjour,

ma précédente réponse a dû ne pas vous plaire apparemment... J'en suis bien désolé.

J'ai testé que le fichier restait actif en vérifiant le focus lors des différentes étapes de l'exécution du code. J'ai même rajouter une procédure pour que ce fichier soit actif avant la ligne qui pose problème.

Sub CheckActiveWorkbookGlossary()
If ActiveWorkbook.Name = ("Glossary.xlsx") Then
MsgBox "ok"
Else: Workbooks("Glossary.xlsx").Activate
End If
End Sub


Le focus reste à chaque instant sur ce fichier Glossaire, mais je peux toujours me tromper.

Je reste à votre entière disposition pour tout complément d'information

Jérémy
Commenter la réponse de Akeen56
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 28 nov. 2011 à 15:35
0
Merci
Salut

Pour être sûr que ta commande arrive à l'objet, autant le nommer.
Dans TestWorkbooksOpened, tu ouvres ton classeur en l'associant à l'objet wBook : Très bien. Mais comme cet objet est dimensionné dans la Sub, son existence prend fin au sortir de la Sub.
--> Déplace le Dim dans la partie Déclaration de ta feuille : l'objet restera valide

Puisqu'on a un objet qui pointe vers un classeur, les syntaxes du genre
Tablo1 = Sheets("Acronyms").Range("A1:A20").Value
doivent être remplacées par
Tablo1 = wBook. Sheets("Acronyms").Range("A1:A20").Value

La variable L minuscule est à bannir des codes car elle ressemble trop au chiffre 1.

Pourquoi vouloir utiliser un tableau (de Variant) puisque ce tableau n'a qu'une durée de vie limitée à la Sub --> Travaille plutôt directement avec tes cellules et/ou avec la méthode .Offset :
Dim oRange As Range
For Each oRange In wBook.Sheets("Acronyms").Range("A1:A20")
    MsgBox oRange.Value
Next

Vala
Jack, =fr 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)
Commenter la réponse de cs_Jack
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 28 nov. 2011 à 16:01
0
Merci
Bonjour Jack,
merci pour ta réponse. Au risque d'être ridicule, peux-tu me préciser exactement où je dois placer la déclaration. Je commence à m'y perdre dans ce qui est mon premier développement, est-ce dans:
- la feuille Acronyms
- la feuille Definition
- la page de code pour le userform
- la page relative au workbook Glossary
- la page relative au workbook d'où je lance mon userform?
Je vais suivre tes recommandations pour la variable L.
En effet le choix d'un tableau de variant n'est pas optimal, je vais tester...
Merci encore
Commenter la réponse de Akeen56
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 28 nov. 2011 à 16:59
0
Merci
La partie "Déclarations" se trouve tout en haut de ta page de code.
Selon que ta variable doive avoir une portée locale (visible de la feuille de code en cours) ou une portée générale (visible de toutes les pages de code), il faudra remplacer le Dim par un Private ou Public
Je ne me rappelle plus si les variables Public sont acceptées dans la page de code d'une feuille : déplace-la alors dans un module (quelconque), mais toujours dans la partie Déclarations.

Si ce n'est déjà fait, je te conseille fortement de rendre obligatoire la déclaration des variables (menu Options, onglet Général de l'IDE - interface de programmation).
Cela ajoute la ligne
Option Explicit
en tête des nouvelles pages de code - il te faudra l'ajouter à la main sur les pages existantes.
C'est une option qui parait lourde et chiante au début, mais elle t'oblige à penser aux types précis des variables et à leur étendue d'action.

Apprends aussi à déboguer, à suivre ce que fait ton programme :
- F9 sur une ligne de code; elle change de couleur
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
Commenter la réponse de cs_Jack
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 28 nov. 2011 à 18:51
0
Merci
Merci Jack pour ta réponse, j'ai pu modifier un peu le code et en apprendre plus grâce à toi.

Je ne génère maintenant plus de bugs, par contre quand je regarde mon workbook "Glossary.xlsx" pendant l'exécution du changement d'un mode à l'autre (i.e. Acronyms à Définition et vice-versa), je remarque que les feuilles "Acronyms" et "Definitions" s'activent successivement et frénétiquement avant de se stabiliser pour afficher le nouveau mode. Il va sans dire que le "switch" prend du temps dans ce cas.

Serait-ce dû à la lourdeur du code ou à une boucle qui se créée quelque-part? Peut-on résoudre le problème avec un updateScreen off?
Dernière question: Suis-je obligé de faire apparaître mon workbook "Glossary.xlsx" pendant l'utilisation des Listboxes contenant les valeurs des feuilles du workbook?

Si je ne peux trouver de solution pour accélérer le code je commencerai à penser à un remaniement en profondeur de celui-ci...

Merci d'avance pour votre aide

Jérémy

Voici le code en dessous:

Public wBook As Workbook
Public aSheet As Worksheet
Public Fn As Variant
'________________________________________________________________________________________
'Initialisation de la liste des acronyms
Sub InitializeListBoxAcronyms()
Dim Tablo1 As Variant
Dim i As Integer
Dim j As Integer
Dim k As Integer

Call CheckActiveSheetAcronyms
Call CheckActiveWorkbookGlossary

Tablo1 = Range("A1:A20").Value

For i = 1 To UBound(Tablo1, 1)
    If Me.ListBoxAcronyms.ListCount = 0 Then Me.ListBoxAcronyms.AddItem Tablo1(i, 1)
    k = 0
    For j = 0 To Me.ListBoxAcronyms.ListCount - 1
    If Tablo1(i, 1) = Me.ListBoxAcronyms.List(j) Then
        k = 1
        End If
    Next
    If k = 0 Then Me.ListBoxAcronyms.AddItem Tablo1(i, 1)
Next
End Sub
'________________________________________________________________________________________
'Initialisation de la liste des définitions
Sub InitializeListBoxDefinitions()
Dim Tablo2 As Variant
Dim p As Integer
Dim m As Integer
Dim n As Integer

Call CheckActiveSheetDefinitions
Call CheckActiveWorkbookGlossary

Tablo2 = Range("A1:A20").Value


For p = 1 To UBound(Tablo2, 1)
    If Me.ListBoxDefinitions.ListCount = 0 Then Me.ListBoxDefinitions.AddItem Tablo2(p, 1)
    n = 0
    For m = 0 To Me.ListBoxDefinitions.ListCount - 1
    If Tablo2(p, 1) = Me.ListBoxDefinitions.List(m) Then
        n = 1
        End If
    Next
    If n = 0 Then Me.ListBoxDefinitions.AddItem Tablo2(p, 1)
Next
End Sub

'________________________________________________________________________________________
'Changement lors d'une sélection de valeur d'Acronym
Private Sub ListBoxAcronyms_Change()
Call CheckActiveSheetAcronyms
TextBoxAcronyms.Value = Range("B" & ListBoxAcronyms.ListIndex + 1).Value
End Sub
'________________________________________________________________________________________
'Changement lors d'une sélection de valeur de Définition
Private Sub ListBoxDefinitions_Change()
Call CheckActiveSheetDefinitions
TextBoxDefinitions.Value = Range("B" & ListBoxDefinitions.ListIndex + 1).Value
End Sub
'________________________________________________________________________________________
'Gestion du click sur la checkbox Acronyms
Private Sub CheckBoxAcronyms_Click()
CheckBoxAcronyms.Value = True
CheckBoxDefinitions.Value = False
Call AcroDef
Call TestWorkbooksOpened
Call CheckActiveSheetAcronyms
Call InitializeListBoxAcronyms
End Sub
'________________________________________________________________________________________
'Gestion du click sur la checkbox Definitions
Private Sub CheckBoxDefinitions_Click()
CheckBoxDefinitions.Value = True
CheckBoxAcronyms.Value = False
Call AcroDef
Call TestWorkbooksOpened
Call CheckActiveSheetDefinitions
Call InitializeListBoxDefinitions
End Sub
'________________________________________________________________________________________
' Affichage des Checkboxes (l'un ou l'autre)
Sub AcroDef()
If CheckBoxAcronyms.Value = True Then
    FrameAcronyms.Visible = True
    FrameDefinitions.Visible = False
ElseIf CheckBoxDefinitions.Value = True Then
    FrameDefinitions.Visible = True
    FrameAcronyms.Visible = False
ElseIf CheckBoxAcronyms.Value = False Then
    If CheckBoxDefinitions.Value = False Then
        FrameAcronyms.Visible = False
        FrameDefinitions.Visible = False
    End If
End If
End Sub
'________________________________________________________________________________________
' Verification du Workbook Glossaire ouvert
Sub TestWorkbooksOpened()
    On Error Resume Next
    Set wBook = Workbooks("Glossary.xlsx")
    If wBook Is Nothing Then
        Fn = ThisWorkbook.Path & "\Glossary.xlsx"
        Workbooks.Open Filename:=Fn
    Else
        wBook.Activate
    End If
End Sub
'________________________________________________________________________________________
' Verification de la feuille ouverte pour Acronyms
Sub CheckActiveSheetAcronyms()
If ActiveSheet.Name = ("Acronyms") Then
Else: Sheets("Acronyms").Activate
End If
End Sub
'________________________________________________________________________________________
' Verification de la feuille ouverte pour Definition
Sub CheckActiveSheetDefinitions()
If ActiveSheet.Name = ("Definitions") Then
Else: Sheets("Definitions").Activate
End If
End Sub
'________________________________________________________________________________________
' Verification du workbook Glossary actif
Sub CheckActiveWorkbookGlossary()
If ActiveWorkbook.Name = ("Glossary.xlsx") Then
Else: Workbooks("Glossary.xlsx").Activate
End If
End Sub
Commenter la réponse de Akeen56
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 28 nov. 2011 à 19:04
0
Merci
Tout cela est entre autre dû à ta "manière" de travailler (à grands renforts de Activate.
On ne travaille pas ainsi, mais par pointeurs ===>> exemple :
Workbooks("hhhhhhh").Worksheets("knxvxx").Range("A3").Value

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 28 nov. 2011 à 22:33
0
Merci
Bonsoir ucfoutu,
en effet je ne m'y suis pas pris de la manière. Du coup, si je veux maintenant passer par des pointers, la question que je me pose est la suivante: Faut-il avoir systématiquement des workbooks ouverts pour pouvoir pointer dessus? De même pour des worksheets activées? Y'aurait-t-il une manière de faire référence à des cellules d'une feuille en évitant de jongler avec les activations (avec plusieurs Workbooks pour aller chercher les données).
En ne sachant pas, je me permets de poser des questions.
Merci d'avance
Commenter la réponse de Akeen56
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 28 nov. 2011 à 22:38
0
Merci
Dans l'exemple que je te proposais à 15h35, as-tu vu un seul Activate ?
Commenter la réponse de cs_Jack
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 28 nov. 2011 à 22:48
0
Merci
Merci Jack. Donc encore une question pour être bien sûr, je peux pointer sur des cellules sans avoir besoin de m'assurer que la feuille de provenance est activée...?
Je devrais bientôt pouvoir arrêter avec mes questions
Commenter la réponse de Akeen56
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 29 nov. 2011 à 00:46
0
Merci
Bonsoir,

j'ai essayé d'avancer un peu dans ce code qui me pose problème

L'erreur est la suivante: Run-Time error '1004' Application-defined or object-defined error
Ligne: TextBoxAcronyms.Value = wBook.Worksheets("Acronyms").Range("B" & ListBoxAcronyms.ListIndex + 1).Value

Merci pour votre aide
Public wBook As Workbook
Public aSheet As Worksheet
Public Fn As String

'Initialisation de la liste des acronyms
Sub InitializeListBoxAcronyms()
Dim i As Integer
Call TestWorkbooksOpened
For i = 1 To Range("A65536").End(xlUp).Row
        If Not IsEmpty(Range("A" & i)) Then
            ListBoxAcronyms.Value = wBook.Worksheets("Acronyms").Range("A" & i).Value
        End If
Next
End Sub
'________________________________________________________________________________________
'Initialisation de la liste des définitions
Sub InitializeListBoxDefinitions()
Dim i As Integer
Call TestWorkbooksOpened
For i = 1 To Range("A65536").End(xlUp).Row
        If Not IsEmpty(Range("A" & i)) Then
            ListBoxDefinitions.Value = wBook.Worksheets("Definition").Range("A" & i).Value
        End If
Next
End Sub

'________________________________________________________________________________________
'Changement lors d'une sélection de valeur d'Acronym
Private Sub ListBoxAcronyms_Change()
Call TestWorkbooksOpened
TextBoxAcronyms.Value = wBook.Worksheets("Acronyms").Range("B" & ListBoxAcronyms.ListIndex + 1).Value
End Sub
'________________________________________________________________________________________
'Changement lors d'une sélection de valeur de Définition
Private Sub ListBoxDefinitions_Change()
TextBoxDefinitions.Value = wBook.Worksheets("Definition").Range("B" & ListBoxDefinitions.ListIndex + 1).Value
End Sub
'________________________________________________________________________________________
'Gestion du click sur la checkbox Acronyms
Private Sub CheckBoxAcronyms_Click()
CheckBoxAcronyms.Value = True
CheckBoxDefinitions.Value = False
Call InitializeListBoxAcronyms
Call AcroDef
End Sub
'________________________________________________________________________________________
'Gestion du click sur la checkbox Definitions
Private Sub CheckBoxDefinitions_Click()
CheckBoxDefinitions.Value = True
CheckBoxAcronyms.Value = False
Call InitializeListBoxDefinitions
Call AcroDef
End Sub
'________________________________________________________________________________________
' Affichage des Checkboxes (l'un ou l'autre)
Sub AcroDef()
If CheckBoxAcronyms.Value = True Then
    FrameAcronyms.Visible = True
    FrameDefinitions.Visible = False
ElseIf CheckBoxDefinitions.Value = True Then
    FrameDefinitions.Visible = True
    FrameAcronyms.Visible = False
ElseIf CheckBoxAcronyms.Value = False Then
    If CheckBoxDefinitions.Value = False Then
        FrameAcronyms.Visible = False
        FrameDefinitions.Visible = False
    End If
End If
End Sub


Sub TestWorkbooksOpened()
     On Error Resume Next
    Set wBook = Workbooks.Open(ThisWorkbook.Path & "\Glossary.xlsx")
    If wBook Is Nothing Then
        Fn = ThisWorkbook.Path & "\Glossary.xlsx"
        Workbooks.Open Filename:=Fn
    Else
        wBook.Activate
    End If
End Sub
Commenter la réponse de Akeen56
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 29 nov. 2011 à 11:36
0
Merci
Bonjour,

j'ai changé un peu de stratégie mais je suis toujours coincé avec la variable wBook, qui lève une erreur type "script out of range"
Systématiquement je dois aussi accepter de réouvrir le fichier Glossary.xlsx. Où pourais-je le fermé?

Merci pour votre aide. Dur Dur de débuter

Cordialement

Jérémy

Public Fn As String
Public wBook As Workbook

Sub MultiPage1_Change()
If Me.MultiPage1.Value = 0 Then 
ElseIf Me.MultiPage1.Value = 4 Then 'Glossary
Me.MultiPage3.Visible = True
Me.MultiPage3.Value = 0
Call MultiPage3_Change
End If
End Sub

Sub MultiPage3_Change()
    'On Error Resume Next
    Fn = ThisWorkbook.Path & "\Glossary.xlsx"
    Set wBook = Workbooks(ThisWorkbook.Path & "\Glossary.xlsx")
    MsgBox wBook
    If wBook Is Nothing Then
        Workbooks.Open Filename:=Fn
    Else
        wBook.Activate
    End If
If Me.MultiPage3.Value = 0 Then 'Acronyms
    Call InitializeListBoxAcronyms
ElseIf Me.MultiPage3.Value = 1 Then 'Definitions
    Call InitializeListBoxDefinitions
End If
End Sub

Sub InitializeListBoxAcronyms()
Dim Tablo1 As Variant
Dim p As Integer
Dim m As Integer
Dim n As Integer
Sheets("Acronyms").Activate
Tablo1 = Sheets("Acronyms").Range("A1:A20").Value
For p = 1 To UBound(Tablo1, 1)
    If Me.ListBoxAcronyms.ListCount = 0 Then Me.ListBoxAcronyms.AddItem Tablo1(p, 1)
    n = 0
    For m = 0 To Me.ListBoxAcronyms.ListCount - 1
    If Tablo1(p, 1) = Me.ListBoxAcronyms.List(m) Then
        n = 1
        End If
    Next
    If n = 0 Then Me.ListBoxAcronyms.AddItem Tablo1(p, 1)
Next
End Sub
Sub InitializeListBoxDefinitions()
Dim Tablo2 As Variant
Dim p As Integer
Dim m As Integer
Dim n As Integer
Sheets("Definitions").Activate
Tablo2 = Sheets("Definitions").Range("A1:A20").Value
For p = 1 To UBound(Tablo2, 1)
    If Me.ListBoxDefinitions.ListCount = 0 Then Me.ListBoxDefinitions.AddItem Tablo2(p, 1)
    n = 0
    For m = 0 To Me.ListBoxDefinitions.ListCount - 1
    If Tablo2(p, 1) = Me.ListBoxDefinitions.List(m) Then
        n = 1
        End If
    Next
    If n = 0 Then Me.ListBoxDefinitions.AddItem Tablo2(p, 1)
Next
End Sub

Sub ListBoxAcronyms_Change()
'Sheets("Acronyms").Activate
TextBoxAcronyms.Value = Range("B" & ListBoxAcronyms.ListIndex + 1).Value
End Sub

Private Sub ListBoxDefinitions_Change()
'Sheets("Definitions").Activate
TextBoxDefinitions.Value = Range("B" & ListBoxDefinitions.ListIndex + 1).Value
End Sub

Commenter la réponse de Akeen56
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 29 nov. 2011 à 11:49
0
Merci
ton classeur est ouvert et donc déjà dans la collection WorkBooks ===>>
Set wBook = Workbooks("Glossary.xlsx")


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Akeen56 14 Messages postés vendredi 28 octobre 2011Date d'inscription 29 novembre 2011 Dernière intervention - 29 nov. 2011 à 12:31
0
Merci
Merci pour ta réponse ucfoutu, ça marche bien comme ça maintenant. dernier point et j'aurai atteint mon but. J'aimerai fermer le fichier Glossary.xlsx quand je ne suis pas dans la page Glossary du multipage1, j'ai essayé avec le code suivant pour le multipage1:

ElseIf Not Me.MultiPage1.Value = 4 Then 'Glossary
'On Error Resume Next
    Set wBook = Workbooks("Glossary.xlsx")
    If wBook Is Nothing Then
    Else: wBook.Close
    End If


Ceci ne fait pas grand chose. Une idée sur comment fermer le fichier automatiquement lors du changement de page du multipage1 (avec do not save changes)?

Merci pour votre ténacité!
Commenter la réponse de Akeen56

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.