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

ouverture d'un userform automatiquement à l'ouverture d'un class eu

8 réponses
Avatar
clara68
Bonjour,

Je débute en langage VBA et mon problème est le suivant :
j'ai un fichier excel avec dans une colonne un numéro client. Ce numéro peut
revenir sur plusieurs lignes (là déjà c'est galère). J'ai crée un userform
pour sélectionner le numéro client et je voudrais qu'en le sélectionnant la
feuille excel ne m'affiche les données que pour le client sélectionné ( avec
total à la fin mais là ce serait la cerise sur le gâteau, je ne me suis pas
encore penché sur la question...).

Pour le moment j'ai fait :

Private Sub userform_activate()
'définition de la coordonnée du dernier n°client
derniern°client = Range("a2").End(xlDown).Address
'attribution des données source à la combox n°client
n°client.RowSource = "b2:" & derniern°client
'séléction par défaut du premier élément de la liste
n°client.ListIndex = 0
End Sub

Private Sub ok_click()
Selecclient.Hide
'mémorisation des numéros des élements de liste sélectionnés
indexn°client = n°client.ListIndex
Range("b2").Value = n°client.List
End Sub

Private Sub annuler_click()
selectclient.Hide
End Sub

Sub affiche()
sélecn°client.Show
End Sub




mais ça marche pas.

Pouvez vous m'aider ??

Un grand merci pour votre réponse.

clara68

8 réponses

Avatar
JB
Bonjour,

Private Sub UserForm_Initialize()
Cells.EntireRow.Hidden = False
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([a2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
Me.ComboBox1.List = MonDico.items
'Me.ComboBox1.ListIndex = 0
End Sub

Private Sub ComboBox1_Change()
Cells.EntireRow.Hidden = False
Set c = [A:A].Find(what:=Me.ComboBox1, LookIn:=xlValues)
If Not c Is Nothing And c.Address <> "$A$2" Then Range("A2",
c.Offset(-1, 0)).EntireRow.Hidden = True
Set c = [A:A].Find(Me.ComboBox1, , , , xlByRows, xlPrevious)
If Not c Is Nothing Then Range(c.Offset(1, 0).Address,
[A65000].End(xlUp)).EntireRow.Hidden = True
End Sub

http://cjoint.com/?iAq0MdGNTc

JB
http://boisgontierjacques.free.fr/


On 26 août, 15:56, clara68 wrote:
Bonjour,

Je débute en langage VBA et mon problème est le suivant :
j'ai un fichier excel avec dans une colonne un numéro client. Ce numé ro peut
revenir sur plusieurs lignes (là déjà c'est galère). J'ai crée un userform
pour sélectionner le numéro client et je voudrais qu'en le sélectio nnant la
feuille excel ne m'affiche les données que pour le client sélectionn é ( avec
total à la fin mais là ce serait la cerise sur le gâteau, je ne me suis pas
encore penché sur la question...).

Pour le moment j'ai fait :

Private Sub userform_activate()
'définition de la coordonnée du dernier n°client
derniern°client = Range("a2").End(xlDown).Address
'attribution des données source à la combox n°client
n°client.RowSource = "b2:" & derniern°client
'séléction par défaut du premier élément de la liste
n°client.ListIndex = 0
End Sub

Private Sub ok_click()
Selecclient.Hide
'mémorisation des numéros des élements de liste sélectionnés
indexn°client = n°client.ListIndex
Range("b2").Value = n°client.List
End Sub

Private Sub annuler_click()
selectclient.Hide
End Sub

Sub affiche()
sélecn°client.Show
End Sub

mais ça marche pas.

Pouvez vous m'aider ??

Un grand merci pour votre réponse.

clara68


Avatar
Daniel
Bonjour.
Regarde le classeur joint.
http://cjoint.com/?iArkdrARLL
Daniel
"clara68" a écrit dans le message de
news:
Bonjour,

Je débute en langage VBA et mon problème est le suivant :
j'ai un fichier excel avec dans une colonne un numéro client. Ce numéro
peut
revenir sur plusieurs lignes (là déjà c'est galère). J'ai crée un userform
pour sélectionner le numéro client et je voudrais qu'en le sélectionnant
la
feuille excel ne m'affiche les données que pour le client sélectionné (
avec
total à la fin mais là ce serait la cerise sur le gâteau, je ne me suis
pas
encore penché sur la question...).

Pour le moment j'ai fait :

Private Sub userform_activate()
'définition de la coordonnée du dernier n°client
derniern°client = Range("a2").End(xlDown).Address
'attribution des données source à la combox n°client
n°client.RowSource = "b2:" & derniern°client
'séléction par défaut du premier élément de la liste
n°client.ListIndex = 0
End Sub

Private Sub ok_click()
Selecclient.Hide
'mémorisation des numéros des élements de liste sélectionnés
indexn°client = n°client.ListIndex
Range("b2").Value = n°client.List
End Sub

Private Sub annuler_click()
selectclient.Hide
End Sub

Sub affiche()
sélecn°client.Show
End Sub




mais ça marche pas.

Pouvez vous m'aider ??

Un grand merci pour votre réponse.

clara68


Avatar
JB
Avec filtre auto:

Private Sub UserForm_Initialize()
On Error Resume Next
ActiveSheet.ShowAllData
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([a2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
Me.ComboBox1.List = MonDico.items
'Me.ComboBox1.ListIndex = 0
End Sub

Private Sub ComboBox1_Change()
[A1].AutoFilter Field:=1, Criteria1:=Me.ComboBox1
End Sub

http://cjoint.com/?iArnrkkajW

JB
http://boisgontierjacques.free.fr/

On 26 août, 16:52, JB wrote:
Bonjour,

Private Sub UserForm_Initialize()
Cells.EntireRow.Hidden = False
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([a2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
Me.ComboBox1.List = MonDico.items
'Me.ComboBox1.ListIndex = 0
End Sub

Private Sub ComboBox1_Change()
Cells.EntireRow.Hidden = False
Set c = [A:A].Find(what:=Me.ComboBox1, LookIn:=xlValues)
If Not c Is Nothing And c.Address <> "$A$2" Then Range("A2",
c.Offset(-1, 0)).EntireRow.Hidden = True
Set c = [A:A].Find(Me.ComboBox1, , , , xlByRows, xlPrevious)
If Not c Is Nothing Then Range(c.Offset(1, 0).Address,
[A65000].End(xlUp)).EntireRow.Hidden = True
End Sub

http://cjoint.com/?iAq0MdGNTc

JBhttp://boisgontierjacques.free.fr/

On 26 août, 15:56, clara68 wrote:



Bonjour,

Je débute en langage VBA et mon problème est le suivant :
j'ai un fichier excel avec dans une colonne un numéro client. Ce num éro peut
revenir sur plusieurs lignes (là déjà c'est galère). J'ai cré e un userform
pour sélectionner le numéro client et je voudrais qu'en le sélect ionnant la
feuille excel ne m'affiche les données que pour le client sélection né ( avec
total à la fin mais là ce serait la cerise sur le gâteau, je ne m e suis pas
encore penché sur la question...).

Pour le moment j'ai fait :

Private Sub userform_activate()
'définition de la coordonnée du dernier n°client
derniern°client = Range("a2").End(xlDown).Address
'attribution des données source à la combox n°client
n°client.RowSource = "b2:" & derniern°client
'séléction par défaut du premier élément de la liste
n°client.ListIndex = 0
End Sub

Private Sub ok_click()
Selecclient.Hide
'mémorisation des numéros des élements de liste sélectionnés
indexn°client = n°client.ListIndex
Range("b2").Value = n°client.List
End Sub

Private Sub annuler_click()
selectclient.Hide
End Sub

Sub affiche()
sélecn°client.Show
End Sub

mais ça marche pas.

Pouvez vous m'aider ??

Un grand merci pour votre réponse.

clara68- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
Hervé
Bonsoir Clara,
Une réponse de plus mais pas pour t'embrouiller ;o)
Ici,ldes codes clients sont en colonne B et la feuille se nomme Clients.
L'utilisation d'une collection permet de supprimer les doublons, à l'instar
du Dictionnaire de JB, afin de charger le ComboBox avec des valeurs uniques.
Quand tu effectue un choix dans le combo, un filtrage est fait sur la plage
et le total des lignes visibles (ici la colonne C) est inscrit dans un Label
sur l'UserForm (à mettre !) et tu peux récupérer se résultat de la manière
que tu veux.
Si tu veux que le formulaire s'affiche à l'ouverture du classeur, mets le
code qui suit dans le module du classeur (ThisWorkbook) :
Private Sub Workbook_Open()
UserForm1.Show
End Sub

A mettre dans le module de ton UserForm :
Private Sub UserForm_Initialize()
Dim Col As New Collection
Dim Plage As Range
Dim I As Integer

'les codes clients sont en colonne
'"B" dans la feuille nommée "Clients"
'A adapter !
With Worksheets("Clients")
Set Plage = .Range(.[B2], _
.[B65536].End(xlUp))
End With

On Error Resume Next
For I = 1 To Plage.Rows.Count
Col.Add Plage(I), CStr(Plage(I))
Next

For I = 1 To Col.Count
Me.ComboBox1.AddItem Col(I)
Next I

Set Plage = Nothing
Set Col = Nothing

End Sub

Private Sub ComboBox1_Click()
Dim LaPlage As Range
Dim Total As Double
Dim I As Integer
'défini la plage
Set LaPlage = Plage(Worksheets("Clients"))
'applique un filtrage sur la
'colonne 2 en fonction du code
'choisi dans le ComboBox
With LaPlage
.AutoFilter 2, ComboBox1.Text
'totalise les valeurs de la colonne
'3 des lignes visibles, à adapter !
For I = 1 To LaPlage.Rows.Count
On Error Resume Next 'si du texte ??
If LaPlage.Rows(I).Hidden = False Then
Total = Total + LaPlage.Cells(I, 3)
End If
Next I
'suppression du filtrage si nécessaire ?
'ôter l'apostrophe
'.AutoFilter
End With
'inscrit le résultat dans un Label
'à adapter, une cellule ou 1 MsgBox ?
Label1.Caption = "Total : " & Total

End Sub

Function Plage(Fe As Worksheet) As Range
With Fe
Set Plage = .Range(.Cells(1, 1), _
.Cells( _
.Cells.Find("*", .[A1], -4123, , _
1, 2).Row, _
.Cells.Find("*", .[A1], -4123, , _
2, 2).Column))
End With
End Function

Hervé

"clara68" a écrit dans le message de
news:
Bonjour,

Je débute en langage VBA et mon problème est le suivant :
j'ai un fichier excel avec dans une colonne un numéro client. Ce numéro
peut

revenir sur plusieurs lignes (là déjà c'est galère). J'ai crée un userform
pour sélectionner le numéro client et je voudrais qu'en le sélectionnant
la

feuille excel ne m'affiche les données que pour le client sélectionné (
avec

total à la fin mais là ce serait la cerise sur le gâteau, je ne me suis
pas

encore penché sur la question...).

Pour le moment j'ai fait :

Private Sub userform_activate()
'définition de la coordonnée du dernier n°client
derniern°client = Range("a2").End(xlDown).Address
'attribution des données source à la combox n°client
n°client.RowSource = "b2:" & derniern°client
'séléction par défaut du premier élément de la liste
n°client.ListIndex = 0
End Sub

Private Sub ok_click()
Selecclient.Hide
'mémorisation des numéros des élements de liste sélectionnés
indexn°client = n°client.ListIndex
Range("b2").Value = n°client.List
End Sub

Private Sub annuler_click()
selectclient.Hide
End Sub

Sub affiche()
sélecn°client.Show
End Sub




mais ça marche pas.

Pouvez vous m'aider ??

Un grand merci pour votre réponse.

clara68


Avatar
clara68
Un grand merci à tous pour vos réponse. J'ai essayé les trois solutions.
Merci encore. J'arrive maintenant à filtrer sur le numéro client, c'est
génial !!!
Je juste une question à propos de la solution d'Hervé qui avait intégrer les
totaux des lignes affichées. Quand tu dis :


Quand tu effectue un choix dans le combo, un filtrage est fait sur la plage
et le total des lignes visibles (ici la colonne C) est inscrit dans un Label
sur l'UserForm (à mettre !) et tu peux récupérer se résultat de la manière
que tu veux.

Je n'ai pas compris comment mettre ce label pour récupérer le résultat. Est
ce que tu peux m'éclairer ? Excuse moi si ma question te semble bête, je
débute et pour le moment c'est pas très clair tout ça.

clara68
Avatar
Hervé
Bonsoir Clara,
Ta question ne me semble pas bête du tout, rassure toi ;o)
En fait, je ne sais pas comment tu veux récupérer le total donc j'ai mis un
Label sur l'UserForm tout comme tu l'as fait pour le ComboBox, tu clique
dans la boîte d'outils sur le bouton Label et tu le dessine sur l'UserForm
(par défaut il a le nom Label1) mais tu peux récupérer ce total dans une
cellule, dans une boîte de message au autres, dis nous le(s) total (totaux)
de quelle(s) colonne(s) tu désire et où tu veux ce(s) résultat(s)

Hervé.


"clara68" a écrit dans le message de
news:

Un grand merci à tous pour vos réponse. J'ai essayé les trois solutions.
Merci encore. J'arrive maintenant à filtrer sur le numéro client, c'est
génial !!!
Je juste une question à propos de la solution d'Hervé qui avait intégrer
les

totaux des lignes affichées. Quand tu dis :


Quand tu effectue un choix dans le combo, un filtrage est fait sur la
plage

et le total des lignes visibles (ici la colonne C) est inscrit dans un
Label

sur l'UserForm (à mettre !) et tu peux récupérer se résultat de la manière
que tu veux.

Je n'ai pas compris comment mettre ce label pour récupérer le résultat.
Est

ce que tu peux m'éclairer ? Excuse moi si ma question te semble bête, je
débute et pour le moment c'est pas très clair tout ça.

clara68





Avatar
clara68
Bonsoir Hervé,

En fait, j'aimerais bien mettre le résultat dans une cellule. Je réponds
tardivement parce que pour le moment j'ai une message d'erreur. A priori, y'a
un truc que j'ai pas bien du faire, j'ai pourtant recopié tes données en
adaptant les colonnes où se trouvaient les données mais j'ai un problème avec
"Dim as Integer" (alors que la première fois où j'ai testé ça marchait
....pfff....). Je potasse à fond pour essayer le pourquoi du comment . Si je
n'y arrive pas, je pourrais te demander ?


Bonsoir Clara,
Ta question ne me semble pas bête du tout, rassure toi ;o)
En fait, je ne sais pas comment tu veux récupérer le total donc j'ai mis un
Label sur l'UserForm tout comme tu l'as fait pour le ComboBox, tu clique
dans la boîte d'outils sur le bouton Label et tu le dessine sur l'UserForm
(par défaut il a le nom Label1) mais tu peux récupérer ce total dans une
cellule, dans une boîte de message au autres, dis nous le(s) total (totaux)
de quelle(s) colonne(s) tu désire et où tu veux ce(s) résultat(s)

Hervé.


"clara68" a écrit dans le message de
news:

Un grand merci à tous pour vos réponse. J'ai essayé les trois solutions.
Merci encore. J'arrive maintenant à filtrer sur le numéro client, c'est
génial !!!
Je juste une question à propos de la solution d'Hervé qui avait intégrer
les

totaux des lignes affichées. Quand tu dis :


Quand tu effectue un choix dans le combo, un filtrage est fait sur la
plage

et le total des lignes visibles (ici la colonne C) est inscrit dans un
Label

sur l'UserForm (à mettre !) et tu peux récupérer se résultat de la manière
que tu veux.

Je n'ai pas compris comment mettre ce label pour récupérer le résultat.
Est

ce que tu peux m'éclairer ? Excuse moi si ma question te semble bête, je
débute et pour le moment c'est pas très clair tout ça.

clara68










Avatar
Hervé
Bonsoir Clara,
"Dim as Integer" génère automatiquement une erreur puisque tu n'indique pas
la variable I, il te faut écrire "Dim I As Integer".
Pour avoir le résultat dans une cellule, tu remplace Label1.Caption "Total : " & Total par Range("A1") = Total (A1 est pour l'exemple, tu dois
adapter en fonction de tes besoins)

Hervé.


"clara68" a écrit dans le message de
news:
Bonsoir Hervé,

En fait, j'aimerais bien mettre le résultat dans une cellule. Je réponds
tardivement parce que pour le moment j'ai une message d'erreur. A priori,
y'a

un truc que j'ai pas bien du faire, j'ai pourtant recopié tes données en
adaptant les colonnes où se trouvaient les données mais j'ai un problème
avec

"Dim as Integer" (alors que la première fois où j'ai testé ça marchait
....pfff....). Je potasse à fond pour essayer le pourquoi du comment . Si
je

n'y arrive pas, je pourrais te demander ?


Bonsoir Clara,
Ta question ne me semble pas bête du tout, rassure toi ;o)
En fait, je ne sais pas comment tu veux récupérer le total donc j'ai mis
un


Label sur l'UserForm tout comme tu l'as fait pour le ComboBox, tu clique
dans la boîte d'outils sur le bouton Label et tu le dessine sur
l'UserForm


(par défaut il a le nom Label1) mais tu peux récupérer ce total dans une
cellule, dans une boîte de message au autres, dis nous le(s) total
(totaux)


de quelle(s) colonne(s) tu désire et où tu veux ce(s) résultat(s)

Hervé.


"clara68" a écrit dans le message de
news:

Un grand merci à tous pour vos réponse. J'ai essayé les trois
solutions.



Merci encore. J'arrive maintenant à filtrer sur le numéro client,
c'est



génial !!!
Je juste une question à propos de la solution d'Hervé qui avait
intégrer



les
totaux des lignes affichées. Quand tu dis :


Quand tu effectue un choix dans le combo, un filtrage est fait sur la
plage

et le total des lignes visibles (ici la colonne C) est inscrit dans un
Label

sur l'UserForm (à mettre !) et tu peux récupérer se résultat de la
manière



que tu veux.

Je n'ai pas compris comment mettre ce label pour récupérer le
résultat.



Est
ce que tu peux m'éclairer ? Excuse moi si ma question te semble bête,
je



débute et pour le moment c'est pas très clair tout ça.

clara68