Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conflits entre macros

14 réponses
Avatar
Jean-Paul V
Bonjour à tous
Erreur 13
Je reprends mon problème en partant d’un fichier plus simple proposé par
MichDenis que j’ai modifié afin qu’il se rapproche plus de ce que je souhaite
faire.
J’ai une base de données avec 3 colonnes.
1ère colonne des compositeurs
2 ème la liste des œuvres disponible
3 ème les photo nommée *.jpg
Pour un compositeur et une œuvre je peux avoir plusieurs interprétations
donc plusieurs*.jpg

J’ai un Userform qui à l’ouverture présente 3 listes en cascades qui se
mettent à jour à l’ouverture ( Compositeur ; Œuvres ; CD nommés*.jpg ) .A
l’ouverture le premier compositeur est sélectionné ; ce qui entraine la 1ère
œuvre dispo de ce compositeur est sélectionnée dans la liste 2 et le 1 er
disque disponible de cette œuvre .
Le Userform a une image, je souhaite que celle-ci se mette à jour à chaque
nouvelle sélection de liste .
A l’ouverture je cherche donc à mettre le 1er *.jpg de la première Œuvre du
premier Compositeur

Pour ce faire j’ai dans Userform un TextBox nommé Photo censé se mettre à
jour à chaque changement d’une des 3 listes et montrer le fichier *.jpg à
mettre dans mon Image.
Pourquoi UserForm_Initialize se plante lorsque je rajoute mon TextBox sur :
Me.ListBox2.List = Application.Transpose(X.Items) de la Macro
UserForm_Initialize alors que ce n’est pas dans l’ initialisation du Userform

Private Sub UserForm_Initialize()
Dim Rg As Range, X As Object
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) Then 'C.Offset(0, -2) = choixnom Then
X.Add CStr(C), CStr(C)
End If
Next
Me.ListBox1.List = Application.Transpose(X.Items)
ligne = 1
majFiche
Me.ListBox1.ListIndex = 0
End Sub

Private Sub ListBox1_Click()
'Nouveau solution MichDenis pour éviter doublons dans liste des oeuvres
si plusieurs interprétations
Dim Rg As Range, C As Range
Dim X As Object
Me.ListBox2.Clear
Me.ListBox3.Clear
With Sheets("Feuil1")
ligne = .[A:A].Find(ListBox1, LookIn:=xlValues).Row
' majFiche
Set Rg = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With
'Pour remplir sans doublons le contrôle ChoixOeuvre des données
'en colonnes c:c
'------------------------
Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) And C.Offset(0, -1) = ListBox1 Then
X.Add CStr(C), CStr(C)
'majFiche 'ajouté
End If
Next
'--------------------------
'Affecte au contrôle la liste trouvée
Me.ListBox2.List = Application.Transpose(X.Items) ‘ se plante ici ???
majFiche
Me.ListBox2.ListIndex = 0
End Sub
Si vous supprimez dans le Userform le TextBox la macro ne se plante plus à
l’ouverture attention j’ai besoine de ce TextBox pour d’autres applications.

1 ) que faut-il changer au fichier pour que cela ne se plante pas ?
2) comment écrire la macro MajFiche qui met à jour la Photo ‘macro en
construction et neutralisée.
Voir http://cjoint.com/?gDqlbKPULM

@+ j'espère

--
Jean-Paul V

10 réponses

1 2
Avatar
Péhemme
Bonjour à toi,
Si tu :
a) déplaces les 5 lignes de ton commentaire (Feuil1) en G7 par exemple (=>
tout sauf colonne A)
b) dans Private Sub ListBox2_Click(), mets la dernière ligne à -1 au lieu de
0 :
Me.ListBox3.ListIndex = -1
Cela fait-il avancer le smilblick ?
Si je puis me permettre, je mettrai un bouton "Quitter" pour sortir de la
Userform au lieu de cliquer sur "la croix"
Michel



"Jean-Paul V" a écrit dans le message
de news:
Bonjour à tous
Erreur 13
Je reprends mon problème en partant d’un fichier plus simple proposé par
MichDenis que j’ai modifié afin qu’il se rapproche plus de ce que je
souhaite
faire.
J’ai une base de données avec 3 colonnes.
1ère colonne des compositeurs
2 ème la liste des œuvres disponible
3 ème les photo nommée *.jpg
Pour un compositeur et une œuvre je peux avoir plusieurs interprétations
donc plusieurs*.jpg

J’ai un Userform qui à l’ouverture présente 3 listes en cascades qui se
mettent à jour à l’ouverture ( Compositeur ; Œuvres ; CD nommés*.jpg ) .A
l’ouverture le premier compositeur est sélectionné ; ce qui entraine la
1ère
œuvre dispo de ce compositeur est sélectionnée dans la liste 2 et le 1 er
disque disponible de cette œuvre .
Le Userform a une image, je souhaite que celle-ci se mette à jour à chaque
nouvelle sélection de liste .
A l’ouverture je cherche donc à mettre le 1er *.jpg de la première Œuvre
du
premier Compositeur

Pour ce faire j’ai dans Userform un TextBox nommé Photo censé se mettre à
jour à chaque changement d’une des 3 listes et montrer le fichier *.jpg à
mettre dans mon Image.
Pourquoi UserForm_Initialize se plante lorsque je rajoute mon TextBox sur
:
Me.ListBox2.List = Application.Transpose(X.Items) de la Macro
UserForm_Initialize alors que ce n’est pas dans l’ initialisation du
Userform

Private Sub UserForm_Initialize()
Dim Rg As Range, X As Object
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) Then 'C.Offset(0, -2) = choixnom Then
X.Add CStr(C), CStr(C)
End If
Next
Me.ListBox1.List = Application.Transpose(X.Items)
ligne = 1
majFiche
Me.ListBox1.ListIndex = 0
End Sub

Private Sub ListBox1_Click()
'Nouveau solution MichDenis pour éviter doublons dans liste des oeuvres
si plusieurs interprétations
Dim Rg As Range, C As Range
Dim X As Object
Me.ListBox2.Clear
Me.ListBox3.Clear
With Sheets("Feuil1")
ligne = .[A:A].Find(ListBox1, LookIn:=xlValues).Row
' majFiche
Set Rg = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With
'Pour remplir sans doublons le contrôle ChoixOeuvre des données
'en colonnes c:c
'------------------------
Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) And C.Offset(0, -1) = ListBox1 Then
X.Add CStr(C), CStr(C)
'majFiche 'ajouté
End If
Next
'--------------------------
'Affecte au contrôle la liste trouvée
Me.ListBox2.List = Application.Transpose(X.Items) ‘ se plante ici ???
majFiche
Me.ListBox2.ListIndex = 0
End Sub
Si vous supprimez dans le Userform le TextBox la macro ne se plante plus
à
l’ouverture attention j’ai besoine de ce TextBox pour d’autres
applications.

1 ) que faut-il changer au fichier pour que cela ne se plante pas ?
2) comment écrire la macro MajFiche qui met à jour la Photo ‘macro en
construction et neutralisée.
Voir http://cjoint.com/?gDqlbKPULM

@+ j'espère

--
Jean-Paul V


Avatar
Péhemme
Ahrr!
Au temps pour moi, je viens de comprendre ton problème
Oublie mon précédent message.
Michel

"Jean-Paul V" a écrit dans le message
de news:
Bonjour à tous
Erreur 13
Je reprends mon problème en partant d’un fichier plus simple proposé par
MichDenis que j’ai modifié afin qu’il se rapproche plus de ce que je
souhaite
faire.
J’ai une base de données avec 3 colonnes.
1ère colonne des compositeurs
2 ème la liste des œuvres disponible
3 ème les photo nommée *.jpg
Pour un compositeur et une œuvre je peux avoir plusieurs interprétations
donc plusieurs*.jpg

J’ai un Userform qui à l’ouverture présente 3 listes en cascades qui se
mettent à jour à l’ouverture ( Compositeur ; Œuvres ; CD nommés*.jpg ) .A
l’ouverture le premier compositeur est sélectionné ; ce qui entraine la
1ère
œuvre dispo de ce compositeur est sélectionnée dans la liste 2 et le 1 er
disque disponible de cette œuvre .
Le Userform a une image, je souhaite que celle-ci se mette à jour à chaque
nouvelle sélection de liste .
A l’ouverture je cherche donc à mettre le 1er *.jpg de la première Œuvre
du
premier Compositeur

Pour ce faire j’ai dans Userform un TextBox nommé Photo censé se mettre à
jour à chaque changement d’une des 3 listes et montrer le fichier *.jpg à
mettre dans mon Image.
Pourquoi UserForm_Initialize se plante lorsque je rajoute mon TextBox sur
:
Me.ListBox2.List = Application.Transpose(X.Items) de la Macro
UserForm_Initialize alors que ce n’est pas dans l’ initialisation du
Userform

Private Sub UserForm_Initialize()
Dim Rg As Range, X As Object
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) Then 'C.Offset(0, -2) = choixnom Then
X.Add CStr(C), CStr(C)
End If
Next
Me.ListBox1.List = Application.Transpose(X.Items)
ligne = 1
majFiche
Me.ListBox1.ListIndex = 0
End Sub

Private Sub ListBox1_Click()
'Nouveau solution MichDenis pour éviter doublons dans liste des oeuvres
si plusieurs interprétations
Dim Rg As Range, C As Range
Dim X As Object
Me.ListBox2.Clear
Me.ListBox3.Clear
With Sheets("Feuil1")
ligne = .[A:A].Find(ListBox1, LookIn:=xlValues).Row
' majFiche
Set Rg = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With
'Pour remplir sans doublons le contrôle ChoixOeuvre des données
'en colonnes c:c
'------------------------
Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) And C.Offset(0, -1) = ListBox1 Then
X.Add CStr(C), CStr(C)
'majFiche 'ajouté
End If
Next
'--------------------------
'Affecte au contrôle la liste trouvée
Me.ListBox2.List = Application.Transpose(X.Items) ‘ se plante ici ???
majFiche
Me.ListBox2.ListIndex = 0
End Sub
Si vous supprimez dans le Userform le TextBox la macro ne se plante plus
à
l’ouverture attention j’ai besoine de ce TextBox pour d’autres
applications.

1 ) que faut-il changer au fichier pour que cela ne se plante pas ?
2) comment écrire la macro MajFiche qui met à jour la Photo ‘macro en
construction et neutralisée.
Voir http://cjoint.com/?gDqlbKPULM

@+ j'espère

--
Jean-Paul V


Avatar
Péhemme
Non, je ne comprends pas.
Chez moi ton Userform fonctionne (sous réserve des observations de mon 1er
message).
Si, par exemple, je clique sur :
Mozart
Requiem
la listbox3 fait bien apparaître les 3 pochettes disponibles.
Il te reste à mettre à jour ton Texbox lors du click (choix) dans ta
listbox3 et, ce faisant, charger la photo portant cette référence.
Michel


"Jean-Paul V" a écrit dans le message
de news:
Bonjour à tous
Erreur 13
Je reprends mon problème en partant d’un fichier plus simple proposé par
MichDenis que j’ai modifié afin qu’il se rapproche plus de ce que je
souhaite
faire.
J’ai une base de données avec 3 colonnes.
1ère colonne des compositeurs
2 ème la liste des œuvres disponible
3 ème les photo nommée *.jpg
Pour un compositeur et une œuvre je peux avoir plusieurs interprétations
donc plusieurs*.jpg

J’ai un Userform qui à l’ouverture présente 3 listes en cascades qui se
mettent à jour à l’ouverture ( Compositeur ; Œuvres ; CD nommés*.jpg ) .A
l’ouverture le premier compositeur est sélectionné ; ce qui entraine la
1ère
œuvre dispo de ce compositeur est sélectionnée dans la liste 2 et le 1 er
disque disponible de cette œuvre .
Le Userform a une image, je souhaite que celle-ci se mette à jour à chaque
nouvelle sélection de liste .
A l’ouverture je cherche donc à mettre le 1er *.jpg de la première Œuvre
du
premier Compositeur

Pour ce faire j’ai dans Userform un TextBox nommé Photo censé se mettre à
jour à chaque changement d’une des 3 listes et montrer le fichier *.jpg à
mettre dans mon Image.
Pourquoi UserForm_Initialize se plante lorsque je rajoute mon TextBox sur
:
Me.ListBox2.List = Application.Transpose(X.Items) de la Macro
UserForm_Initialize alors que ce n’est pas dans l’ initialisation du
Userform

Private Sub UserForm_Initialize()
Dim Rg As Range, X As Object
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) Then 'C.Offset(0, -2) = choixnom Then
X.Add CStr(C), CStr(C)
End If
Next
Me.ListBox1.List = Application.Transpose(X.Items)
ligne = 1
majFiche
Me.ListBox1.ListIndex = 0
End Sub

Private Sub ListBox1_Click()
'Nouveau solution MichDenis pour éviter doublons dans liste des oeuvres
si plusieurs interprétations
Dim Rg As Range, C As Range
Dim X As Object
Me.ListBox2.Clear
Me.ListBox3.Clear
With Sheets("Feuil1")
ligne = .[A:A].Find(ListBox1, LookIn:=xlValues).Row
' majFiche
Set Rg = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With
'Pour remplir sans doublons le contrôle ChoixOeuvre des données
'en colonnes c:c
'------------------------
Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) And C.Offset(0, -1) = ListBox1 Then
X.Add CStr(C), CStr(C)
'majFiche 'ajouté
End If
Next
'--------------------------
'Affecte au contrôle la liste trouvée
Me.ListBox2.List = Application.Transpose(X.Items) ‘ se plante ici ???
majFiche
Me.ListBox2.ListIndex = 0
End Sub
Si vous supprimez dans le Userform le TextBox la macro ne se plante plus
à
l’ouverture attention j’ai besoine de ce TextBox pour d’autres
applications.

1 ) que faut-il changer au fichier pour que cela ne se plante pas ?
2) comment écrire la macro MajFiche qui met à jour la Photo ‘macro en
construction et neutralisée.
Voir http://cjoint.com/?gDqlbKPULM

@+ j'espère

--
Jean-Paul V


Avatar
Jean-Paul V
Bonjour Péhemme

J'ai déplacé le commentaire bizarrement cela ne gênait pas le fichier sans
TextBox qui lui correspond à ma demande.
J'ai essayé de remplacer les 0 par -1 dans le fichier avec TextBox cela ne
se plante pas mais à l'ouverture les premiers de chaque liste ne sont pas
sélectionnés, ce qui est normal car -1 veut dire pas de sélection, cela ne
répond pas à ma demande.

Bonne soirée


--
Jean-Paul V


"Péhemme" wrote:

Non, je ne comprends pas.
Chez moi ton Userform fonctionne (sous réserve des observations de mon 1er
message).
Si, par exemple, je clique sur :
Mozart
Requiem
la listbox3 fait bien apparaître les 3 pochettes disponibles.
Il te reste à mettre à jour ton Texbox lors du click (choix) dans ta
listbox3 et, ce faisant, charger la photo portant cette référence.
Michel


"Jean-Paul V" a écrit dans le message
de news:
> Bonjour à tous
> Erreur 13
> Je reprends mon problème en partant d’un fichier plus simple proposé par
> MichDenis que j’ai modifié afin qu’il se rapproche plus de ce que je
> souhaite
> faire.
> J’ai une base de données avec 3 colonnes.
> 1ère colonne des compositeurs
> 2 ème la liste des œuvres disponible
> 3 ème les photo nommée *.jpg
> Pour un compositeur et une œuvre je peux avoir plusieurs interprétations
> donc plusieurs*.jpg
>
> J’ai un Userform qui à l’ouverture présente 3 listes en cascades qui se
> mettent à jour à l’ouverture ( Compositeur ; Œuvres ; CD nommés*.jpg ) .A
> l’ouverture le premier compositeur est sélectionné ; ce qui entraine la
> 1ère
> œuvre dispo de ce compositeur est sélectionnée dans la liste 2 et le 1 er
> disque disponible de cette œuvre .
> Le Userform a une image, je souhaite que celle-ci se mette à jour à chaque
> nouvelle sélection de liste .
> A l’ouverture je cherche donc à mettre le 1er *.jpg de la première Œuvre
> du
> premier Compositeur
>
> Pour ce faire j’ai dans Userform un TextBox nommé Photo censé se mettre à
> jour à chaque changement d’une des 3 listes et montrer le fichier *.jpg à
> mettre dans mon Image.
> Pourquoi UserForm_Initialize se plante lorsque je rajoute mon TextBox sur
> :
> Me.ListBox2.List = Application.Transpose(X.Items) de la Macro
> UserForm_Initialize alors que ce n’est pas dans l’ initialisation du
> Userform
>
> Private Sub UserForm_Initialize()
> Dim Rg As Range, X As Object
> With Feuil1
> Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
> End With
>
> Set X = CreateObject("Scripting.Dictionary")
> For Each C In Rg
> If Not X.Exists(CStr(C.Value)) Then 'C.Offset(0, -2) = choixnom Then
> X.Add CStr(C), CStr(C)
> End If
> Next
> Me.ListBox1.List = Application.Transpose(X.Items)
> ligne = 1
> majFiche
> Me.ListBox1.ListIndex = 0
> End Sub
>
> Private Sub ListBox1_Click()
> 'Nouveau solution MichDenis pour éviter doublons dans liste des oeuvres
> si plusieurs interprétations
> Dim Rg As Range, C As Range
> Dim X As Object
> Me.ListBox2.Clear
> Me.ListBox3.Clear
> With Sheets("Feuil1")
> ligne = .[A:A].Find(ListBox1, LookIn:=xlValues).Row
> ' majFiche
> Set Rg = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
> End With
> 'Pour remplir sans doublons le contrôle ChoixOeuvre des données
> 'en colonnes c:c
> '------------------------
> Set X = CreateObject("Scripting.Dictionary")
> For Each C In Rg
> If Not X.Exists(CStr(C.Value)) And C.Offset(0, -1) = ListBox1 Then
> X.Add CStr(C), CStr(C)
> 'majFiche 'ajouté
> End If
> Next
> '--------------------------
> 'Affecte au contrôle la liste trouvée
> Me.ListBox2.List = Application.Transpose(X.Items) ‘ se plante ici ???
> majFiche
> Me.ListBox2.ListIndex = 0
> End Sub
> Si vous supprimez dans le Userform le TextBox la macro ne se plante plus
> à
> l’ouverture attention j’ai besoine de ce TextBox pour d’autres
> applications.
>
> 1 ) que faut-il changer au fichier pour que cela ne se plante pas ?
> 2) comment écrire la macro MajFiche qui met à jour la Photo ‘macro en
> construction et neutralisée.
> Voir http://cjoint.com/?gDqlbKPULM
>
> @+ j'espère
>
> --
> Jean-Paul V




Avatar
MichDenis
Bonjour Jean-Paul,



Voici le code de ton formulaire

'----------------------------------------
Private Sub ListBox1_Click()

Dim Rg As Range, C As Range
Dim Y As Object, T As String

Me.ListBox2.Clear
Me.ListBox3.Clear
With Sheets("Feuil1")
ligne = .[A:A].Find(ListBox1, LookIn:=xlValues).Row
' majFiche
Set Rg = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With

'Pour remplir sans doublons le contrôle ChoixOeuvre des données
'en colonnes c:c
'------------------------
Set Y = CreateObject("Scripting.Dictionary")
If Me.ListBox1.ListIndex = -1 Then
Me.ListBox1.ListIndex = 0
End If

T = Me.ListBox1.List(ListBox1.ListIndex)
For Each C In Rg
If Not Y.Exists(CStr(C.Value)) And C.Offset(0, -1) = T Then
Y.Add CStr(C), CStr(C)
'majFiche 'ajouté
End If
Next
'--------------------------
'Affecte au contrôle la liste trouvée

Me.ListBox2.List = Application.Transpose(Y.items)
majFiche
ListBox2_Click
'NB Bien que cette instruction
'vient après majFiche majFiche montre la 1ère Oeuvre
Set Y = Nothing
End Sub

'----------------------------------------
Private Sub ListBox2_Click()
Dim T As String, P As String
If Me.ListBox2.ListIndex = -1 Then
Me.ListBox2.ListIndex = 0
End If
T = Me.ListBox2.List(ListBox2.ListIndex)
Set f = Sheets("Feuil1")
' Me.ChoixDisque.Clear
Me.ListBox3.Clear
P = Me.ListBox1.List(Me.ListBox1.ListIndex)
For Each C In f.Range("B1", f.[A65000].End(xlUp))

If UCase(C.Value) = UCase(P) And C.Offset(0, 1) = T Then
Me.ListBox3.AddItem C.Offset(0, 2)
ligne = C.Offset(0, 2).Row
Photo = C.Offset(0, 2)
' majFiche 'affiche la photo ne fonctionne pas encore
End If
Next C
'**************************************
'AJOUTÉE
ListBox3_Click
'**************************************
End Sub
'----------------------------------------
Sub majFiche()
' Me.Photo = "BACH37779.jpg"

' Me.Photo = Sheets("Feuil1").Cells(ligne, 3)
' If photo <> "" Then
' On Error Resume Next
' ChDrive Left(ActiveWorkbook.Path, 1)
' ChDir ActiveWorkbook.Path
' UserForm1.Image1.PictureSizeMode = fmPictureSizeModeZoom
' Me.Image1.Picture = LoadPicture(photo)
' Else
' Me.Image1.Picture = LoadPicture
' End If
End Sub
'----------------------------------------


Private Sub ListBox3_Click()
Dim P As String

If Me.ListBox3.ListCount > 0 Then
If Me.ListBox3.ListIndex = -1 Then
Me.ListBox3.ListIndex = 0 ' positionne sur le 1er
End If
End If
P = Me.ListBox3.List(Me.ListBox3.ListIndex)
ligne = Sheets("Feuil1").[C:C].Find(ListBox3, LookIn:=xlValues).Row
majFiche 'est sans effet
If P <> "" Then
Me.Image1.Picture = LoadPicture(ThisWorkbook.Path & "" & P)
End If

End Sub
'----------------------------------------
Private Sub UserForm_Initialize()
Dim Rg As Range, X As Object
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) Then
X.Add CStr(C), CStr(C)
End If
Next
Me.ListBox1.List = Application.Transpose(X.items)
ligne = 1
'majFiche

ListBox1_Click
Set X = Nothing
End Sub
'----------------------------------------




"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour à tous
Erreur 13
Je reprends mon problème en partant d’un fichier plus simple proposé par
MichDenis que j’ai modifié afin qu’il se rapproche plus de ce que je souhaite
faire.
J’ai une base de données avec 3 colonnes.
1ère colonne des compositeurs
2 ème la liste des œuvres disponible
3 ème les photo nommée *.jpg
Pour un compositeur et une œuvre je peux avoir plusieurs interprétations
donc plusieurs*.jpg

J’ai un Userform qui à l’ouverture présente 3 listes en cascades qui se
mettent à jour à l’ouverture ( Compositeur ; Œuvres ; CD nommés*.jpg ) .A
l’ouverture le premier compositeur est sélectionné ; ce qui entraine la 1ère
œuvre dispo de ce compositeur est sélectionnée dans la liste 2 et le 1 er
disque disponible de cette œuvre .
Le Userform a une image, je souhaite que celle-ci se mette à jour à chaque
nouvelle sélection de liste .
A l’ouverture je cherche donc à mettre le 1er *.jpg de la première Œuvre du
premier Compositeur

Pour ce faire j’ai dans Userform un TextBox nommé Photo censé se mettre à
jour à chaque changement d’une des 3 listes et montrer le fichier *.jpg à
mettre dans mon Image.
Pourquoi UserForm_Initialize se plante lorsque je rajoute mon TextBox sur :
Me.ListBox2.List = Application.Transpose(X.Items) de la Macro
UserForm_Initialize alors que ce n’est pas dans l’ initialisation du Userform

Private Sub UserForm_Initialize()
Dim Rg As Range, X As Object
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) Then 'C.Offset(0, -2) = choixnom Then
X.Add CStr(C), CStr(C)
End If
Next
Me.ListBox1.List = Application.Transpose(X.Items)
ligne = 1
majFiche
Me.ListBox1.ListIndex = 0
End Sub

Private Sub ListBox1_Click()
'Nouveau solution MichDenis pour éviter doublons dans liste des oeuvres
si plusieurs interprétations
Dim Rg As Range, C As Range
Dim X As Object
Me.ListBox2.Clear
Me.ListBox3.Clear
With Sheets("Feuil1")
ligne = .[A:A].Find(ListBox1, LookIn:=xlValues).Row
' majFiche
Set Rg = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With
'Pour remplir sans doublons le contrôle ChoixOeuvre des données
'en colonnes c:c
'------------------------
Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) And C.Offset(0, -1) = ListBox1 Then
X.Add CStr(C), CStr(C)
'majFiche 'ajouté
End If
Next
'--------------------------
'Affecte au contrôle la liste trouvée
Me.ListBox2.List = Application.Transpose(X.Items) ‘ se plante ici ???
majFiche
Me.ListBox2.ListIndex = 0
End Sub
Si vous supprimez dans le Userform le TextBox la macro ne se plante plus à
l’ouverture attention j’ai besoine de ce TextBox pour d’autres applications.

1 ) que faut-il changer au fichier pour que cela ne se plante pas ?
2) comment écrire la macro MajFiche qui met à jour la Photo ‘macro en
construction et neutralisée.
Voir http://cjoint.com/?gDqlbKPULM

@+ j'espère

--
Jean-Paul V
Avatar
Jean-Paul V
Bonjour MichDenis

Dans un premier temps j'ai cru que ça ne marchait pas car ça ce plantait
puis je me suis rappelé que il fallait que ce soit sur C: sinon rajouter ce
que vous m'aviez indiqué.
Sur C : ça ne se plante plus mais bizarrement pour Mozart ce qui est affiché
dans l'image est bien la première qui est affichée, mais le TexBox indique le
dernier disque à l'ouverture .Et si on clique sur le deuxième la Maj du
TexBox ne se fait pas
Comme je sature je vais étudier le Pb demain.Merci encore.
--
Jean-Paul V


"MichDenis" wrote:

Bonjour Jean-Paul,



Voici le code de ton formulaire

'----------------------------------------
Private Sub ListBox1_Click()

Dim Rg As Range, C As Range
Dim Y As Object, T As String

Me.ListBox2.Clear
Me.ListBox3.Clear
With Sheets("Feuil1")
ligne = .[A:A].Find(ListBox1, LookIn:=xlValues).Row
' majFiche
Set Rg = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With

'Pour remplir sans doublons le contrôle ChoixOeuvre des données
'en colonnes c:c
'------------------------
Set Y = CreateObject("Scripting.Dictionary")
If Me.ListBox1.ListIndex = -1 Then
Me.ListBox1.ListIndex = 0
End If

T = Me.ListBox1.List(ListBox1.ListIndex)
For Each C In Rg
If Not Y.Exists(CStr(C.Value)) And C.Offset(0, -1) = T Then
Y.Add CStr(C), CStr(C)
'majFiche 'ajouté
End If
Next
'--------------------------
'Affecte au contrôle la liste trouvée

Me.ListBox2.List = Application.Transpose(Y.items)
majFiche
ListBox2_Click
'NB Bien que cette instruction
'vient après majFiche majFiche montre la 1ère Oeuvre
Set Y = Nothing
End Sub

'----------------------------------------
Private Sub ListBox2_Click()
Dim T As String, P As String
If Me.ListBox2.ListIndex = -1 Then
Me.ListBox2.ListIndex = 0
End If
T = Me.ListBox2.List(ListBox2.ListIndex)
Set f = Sheets("Feuil1")
' Me.ChoixDisque.Clear
Me.ListBox3.Clear
P = Me.ListBox1.List(Me.ListBox1.ListIndex)
For Each C In f.Range("B1", f.[A65000].End(xlUp))

If UCase(C.Value) = UCase(P) And C.Offset(0, 1) = T Then
Me.ListBox3.AddItem C.Offset(0, 2)
ligne = C.Offset(0, 2).Row
Photo = C.Offset(0, 2)
' majFiche 'affiche la photo ne fonctionne pas encore
End If
Next C
'**************************************
'AJOUTÉE
ListBox3_Click
'**************************************
End Sub
'----------------------------------------
Sub majFiche()
' Me.Photo = "BACH37779.jpg"

' Me.Photo = Sheets("Feuil1").Cells(ligne, 3)
' If photo <> "" Then
' On Error Resume Next
' ChDrive Left(ActiveWorkbook.Path, 1)
' ChDir ActiveWorkbook.Path
' UserForm1.Image1.PictureSizeMode = fmPictureSizeModeZoom
' Me.Image1.Picture = LoadPicture(photo)
' Else
' Me.Image1.Picture = LoadPicture
' End If
End Sub
'----------------------------------------


Private Sub ListBox3_Click()
Dim P As String

If Me.ListBox3.ListCount > 0 Then
If Me.ListBox3.ListIndex = -1 Then
Me.ListBox3.ListIndex = 0 ' positionne sur le 1er
End If
End If
P = Me.ListBox3.List(Me.ListBox3.ListIndex)
ligne = Sheets("Feuil1").[C:C].Find(ListBox3, LookIn:=xlValues).Row
majFiche 'est sans effet
If P <> "" Then
Me.Image1.Picture = LoadPicture(ThisWorkbook.Path & "" & P)
End If

End Sub
'----------------------------------------
Private Sub UserForm_Initialize()
Dim Rg As Range, X As Object
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) Then
X.Add CStr(C), CStr(C)
End If
Next
Me.ListBox1.List = Application.Transpose(X.items)
ligne = 1
'majFiche

ListBox1_Click
Set X = Nothing
End Sub
'----------------------------------------




"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour à tous
Erreur 13
Je reprends mon problème en partant d’un fichier plus simple proposé par
MichDenis que j’ai modifié afin qu’il se rapproche plus de ce que je souhaite
faire.
J’ai une base de données avec 3 colonnes.
1ère colonne des compositeurs
2 ème la liste des œuvres disponible
3 ème les photo nommée *.jpg
Pour un compositeur et une œuvre je peux avoir plusieurs interprétations
donc plusieurs*.jpg

J’ai un Userform qui à l’ouverture présente 3 listes en cascades qui se
mettent à jour à l’ouverture ( Compositeur ; Œuvres ; CD nommés*.jpg ) .A
l’ouverture le premier compositeur est sélectionné ; ce qui entraine la 1ère
œuvre dispo de ce compositeur est sélectionnée dans la liste 2 et le 1 er
disque disponible de cette œuvre .
Le Userform a une image, je souhaite que celle-ci se mette à jour à chaque
nouvelle sélection de liste .
A l’ouverture je cherche donc à mettre le 1er *.jpg de la première Œuvre du
premier Compositeur

Pour ce faire j’ai dans Userform un TextBox nommé Photo censé se mettre à
jour à chaque changement d’une des 3 listes et montrer le fichier *.jpg à
mettre dans mon Image.
Pourquoi UserForm_Initialize se plante lorsque je rajoute mon TextBox sur :
Me.ListBox2.List = Application.Transpose(X.Items) de la Macro
UserForm_Initialize alors que ce n’est pas dans l’ initialisation du Userform

Private Sub UserForm_Initialize()
Dim Rg As Range, X As Object
With Feuil1
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) Then 'C.Offset(0, -2) = choixnom Then
X.Add CStr(C), CStr(C)
End If
Next
Me.ListBox1.List = Application.Transpose(X.Items)
ligne = 1
majFiche
Me.ListBox1.ListIndex = 0
End Sub

Private Sub ListBox1_Click()
'Nouveau solution MichDenis pour éviter doublons dans liste des oeuvres
si plusieurs interprétations
Dim Rg As Range, C As Range
Dim X As Object
Me.ListBox2.Clear
Me.ListBox3.Clear
With Sheets("Feuil1")
ligne = .[A:A].Find(ListBox1, LookIn:=xlValues).Row
' majFiche
Set Rg = .Range("B1:B" & .Range("B65536").End(xlUp).Row)
End With
'Pour remplir sans doublons le contrôle ChoixOeuvre des données
'en colonnes c:c
'------------------------
Set X = CreateObject("Scripting.Dictionary")
For Each C In Rg
If Not X.Exists(CStr(C.Value)) And C.Offset(0, -1) = ListBox1 Then
X.Add CStr(C), CStr(C)
'majFiche 'ajouté
End If
Next
'--------------------------
'Affecte au contrôle la liste trouvée
Me.ListBox2.List = Application.Transpose(X.Items) ‘ se plante ici ???
majFiche
Me.ListBox2.ListIndex = 0
End Sub
Si vous supprimez dans le Userform le TextBox la macro ne se plante plus à
l’ouverture attention j’ai besoine de ce TextBox pour d’autres applications.

1 ) que faut-il changer au fichier pour que cela ne se plante pas ?
2) comment écrire la macro MajFiche qui met à jour la Photo ‘macro en
construction et neutralisée.
Voir http://cjoint.com/?gDqlbKPULM

@+ j'espère

--
Jean-Paul V




Avatar
MichDenis
Le fichier exemple complet : http://cjoint.com/?gDvbVn74Ej
Avatar
MichDenis
Voici une approche beaucoup plus intéressante utilisant
une référence supplémentaire :
"Microsoft activex data object 2.8 librairy"

Le code est beaucoup plus simple et rapide...

http://cjoint.com/?gDwIZURMDr




"MichDenis" a écrit dans le message de groupe de discussion :
eoF0jwO#
Le fichier exemple complet : http://cjoint.com/?gDvbVn74Ej


-----------------------------------------------------------------------------
Our Peering Groups change
Visit : http://spacesst.com/peerin
Avatar
MichDenis
Dernière petite retouche : http://cjoint.com/?gDx6vJmtbs
Avatar
Jean-Paul V
MichDenis bonjour !

C'est parfait, tous les Pb sont résolus bravo ! ! !
Chapeau bas .

Bonne journée


--
Jean-Paul V


"MichDenis" wrote:

Dernière petite retouche : http://cjoint.com/?gDx6vJmtbs








1 2