OVH Cloud OVH Cloud

Souci avec code VBA et liste

17 réponses
Avatar
JK
Bonsoir,
Je m'en remets à vos lumières car je m'arrache la tête.

Dans le fichier joint ( http://cjoint.com/?mCuVVDlN1p ), j'ai un souci de
code VBA.

En effet, dans ce fichier, il y a 4 onglets pour une année et 2 onglets avec
2 listes de personnel.
Le code VBA (fourni par ce forum) fonctionnait à merveille mais il ne veut
plus !!
Il devait puiser tous les noms des listes respectives et imprimer pour
chaque nom l'onglet "1er trimestre" par exemple.
Bizarrement, le pas-à-pas détaillé (F8 dans le module VBA) fonctionne mais
le code ne exécute pas au lancement de la macro.
Il donne une erreur VBA (manque un objet).

Le problème est également qu'au fur et à mesure des fluctuations de
personnel, ces 2 listes bougent et j'étais obligé à chaque fois de les
renommer.

C'est pourquoi il y a un nombre conséquents de noms de liste impossibles à
supprimer d'une part et la difficulté d'exécuter mes 2 macros.

Merci pour votre aide toujours aussi appréciée.

Bonnes fêtes de fin d'année encore.

Jack

7 réponses

1 2
Avatar
JK
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non
Peu importe la feuille dans laquelle je clique, c'est toujours le userform1
qui s'ouvre.
Bizarre, non ??
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non






JK a écrit :
Merci pour ta prompte réponse.
J'ai un message d'erreur en lançant ta macro :
"Erreur exécution '9' - L'indice n'appartient pas à la sélection
En cliquant sur "débogage", je suis renvoyé à la ligne
"Worksheets(sh2).Activate" mis en surbrillance jaune.
Dommage mais ce n'est peut-être pas grand'chose.
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion : Oeun8a$
Bonjour JK et Bonne Année (à tous d'ailleurs)


http://cjoint.com/?bblEPOlCf6


Pour quand le lien n'y sera plus:
j'ai ajouté un userform avec liste mode options et multiselect
Voici les révisions effectuées dans le code:

'''''Module1

Public mylist As Range, sh1 As String, sh2 As String
Sub Selimpression()
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" & mylist.Address
UserForm2.Show
End Sub

'''''userform1

Private Sub CommandButton1_Click()

Dim c As Range
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call Selimpression
End Sub


Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption = ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub

'''''userform2

Private Sub CommandButton1_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(sh1).[F1] = .List(i)
Sheets(sh1).PrintOut
End If
Next
End With
Unload Me
End Sub


Private Sub CommandButton2_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = Not (.Selected(i))
Next
End With
End Sub

Private Sub UserForm_Initialize()
Dim c As Range
ListBox1.Clear
For Each c In mylist.Cells
ListBox1.AddItem c
Next

End Sub

'lSteph

JK a écrit :
Bonjour et bonne année à vous.
Puis-je me permettre une question concernant mon fichier ?
Comment n'imprimer qu'une ou plusieurs feuilles suite au rajout d'un ou
plusieurs noms dans la liste sans avoir à réimprimer toute la liste ?

Merci encore à vous et plus particulièrement à LSteph

Jack

"JK" a écrit dans le message de groupe de
discussion : #
Bonsoir et mille mercis.
C'est GÉNIAL !!!!
Cela fonctionne du tonnerre.
Merci pour ton aide précieuse.
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
Bonsoir,

Ca fonctionne mais pour tes soucis il me semble
ca vient de tes listes qui obligent à les redéfinir et appliquer la
macro à la bonne feuille, car ce n'est pas controlé.

Voici une variante si le contexte reste semblable:

http://cjoint.com/?mDbsbtZDOr


''''''''''''''''''''''''''''''''''''
'''''Thisworkbook
Private Sub Workbook_Open()
MsgBox "doublecliquer dans une feuille pour lancer"

End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal
Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
'''''

'''''Module1
Sub impression(sh1 As String, sh2 As String)
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" & mylist.Address
For Each c In mylist.Cells
Sheets(sh1).[f1] = c
Sheets(sh1).PrintOut
Next
End Sub

'''''
'''''userform1
Private Sub CommandButton1_Click()

Dim c As Range, mylist As Range, sh1 As String, sh2 As String
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call impression(sh1, sh2)
End Sub



Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption = ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub
'''''
''''''''''''''''''''''''''''''''

'lSteph

JK a écrit :
Bonsoir,
Je m'en remets à vos lumières car je m'arrache la tête.

Dans le fichier joint ( http://cjoint.com/?mCuVVDlN1p ), j'ai un
souci de code VBA.

En effet, dans ce fichier, il y a 4 onglets pour une année et 2
onglets avec 2 listes de personnel.
Le code VBA (fourni par ce forum) fonctionnait à merveille mais il
ne veut plus !!
Il devait puiser tous les noms des listes respectives et imprimer
pour chaque nom l'onglet "1er trimestre" par exemple.
Bizarrement, le pas-à-pas détaillé (F8 dans le module VBA)
fonctionne mais le code ne exécute pas au lancement de la macro.
Il donne une erreur VBA (manque un objet).

Le problème est également qu'au fur et à mesure des fluctuations de
personnel, ces 2 listes bougent et j'étais obligé à chaque fois de
les renommer.

C'est pourquoi il y a un nombre conséquents de noms de liste
impossibles à supprimer d'une part et la difficulté d'exécuter mes 2
macros.

Merci pour votre aide toujours aussi appréciée.

Bonnes fêtes de fin d'année encore.

Jack















Avatar
JK
En rechargeant le fichier, j'ai refait des essais.
Le userform 2 ne s'ouvre pas mais j'ai à la cellule F1 de chaque feuille une
liste déroulante comprenant uniquement la liste du personnel d'Ammerschwihr.
Bizarre ?
A+
Jack

"JK" a écrit dans le message de groupe de
discussion : #
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non
Peu importe la feuille dans laquelle je clique, c'est toujours le
userform1 qui s'ouvre.
Bizarre, non ??
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non






JK a écrit :
Merci pour ta prompte réponse.
J'ai un message d'erreur en lançant ta macro :
"Erreur exécution '9' - L'indice n'appartient pas à la sélection
En cliquant sur "débogage", je suis renvoyé à la ligne
"Worksheets(sh2).Activate" mis en surbrillance jaune.
Dommage mais ce n'est peut-être pas grand'chose.
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion : Oeun8a$
Bonjour JK et Bonne Année (à tous d'ailleurs)


http://cjoint.com/?bblEPOlCf6


Pour quand le lien n'y sera plus:
j'ai ajouté un userform avec liste mode options et multiselect
Voici les révisions effectuées dans le code:

'''''Module1

Public mylist As Range, sh1 As String, sh2 As String
Sub Selimpression()
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" & mylist.Address
UserForm2.Show
End Sub

'''''userform1

Private Sub CommandButton1_Click()

Dim c As Range
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call Selimpression
End Sub


Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption = ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub

'''''userform2

Private Sub CommandButton1_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(sh1).[F1] = .List(i)
Sheets(sh1).PrintOut
End If
Next
End With
Unload Me
End Sub


Private Sub CommandButton2_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = Not (.Selected(i))
Next
End With
End Sub

Private Sub UserForm_Initialize()
Dim c As Range
ListBox1.Clear
For Each c In mylist.Cells
ListBox1.AddItem c
Next

End Sub

'lSteph

JK a écrit :
Bonjour et bonne année à vous.
Puis-je me permettre une question concernant mon fichier ?
Comment n'imprimer qu'une ou plusieurs feuilles suite au rajout d'un
ou plusieurs noms dans la liste sans avoir à réimprimer toute la liste
?

Merci encore à vous et plus particulièrement à LSteph

Jack

"JK" a écrit dans le message de groupe de
discussion : #
Bonsoir et mille mercis.
C'est GÉNIAL !!!!
Cela fonctionne du tonnerre.
Merci pour ton aide précieuse.
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
Bonsoir,

Ca fonctionne mais pour tes soucis il me semble
ca vient de tes listes qui obligent à les redéfinir et appliquer la
macro à la bonne feuille, car ce n'est pas controlé.

Voici une variante si le contexte reste semblable:

http://cjoint.com/?mDbsbtZDOr


''''''''''''''''''''''''''''''''''''
'''''Thisworkbook
Private Sub Workbook_Open()
MsgBox "doublecliquer dans une feuille pour lancer"

End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object,
ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
'''''

'''''Module1
Sub impression(sh1 As String, sh2 As String)
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" &
mylist.Address
For Each c In mylist.Cells
Sheets(sh1).[f1] = c
Sheets(sh1).PrintOut
Next
End Sub

'''''
'''''userform1
Private Sub CommandButton1_Click()

Dim c As Range, mylist As Range, sh1 As String, sh2 As String
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call impression(sh1, sh2)
End Sub



Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption =
ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub
'''''
''''''''''''''''''''''''''''''''

'lSteph

JK a écrit :
Bonsoir,
Je m'en remets à vos lumières car je m'arrache la tête.

Dans le fichier joint ( http://cjoint.com/?mCuVVDlN1p ), j'ai un
souci de code VBA.

En effet, dans ce fichier, il y a 4 onglets pour une année et 2
onglets avec 2 listes de personnel.
Le code VBA (fourni par ce forum) fonctionnait à merveille mais il
ne veut plus !!
Il devait puiser tous les noms des listes respectives et imprimer
pour chaque nom l'onglet "1er trimestre" par exemple.
Bizarrement, le pas-à-pas détaillé (F8 dans le module VBA)
fonctionne mais le code ne exécute pas au lancement de la macro.
Il donne une erreur VBA (manque un objet).

Le problème est également qu'au fur et à mesure des fluctuations de
personnel, ces 2 listes bougent et j'étais obligé à chaque fois de
les renommer.

C'est pourquoi il y a un nombre conséquents de noms de liste
impossibles à supprimer d'une part et la difficulté d'exécuter mes
2 macros.

Merci pour votre aide toujours aussi appréciée.

Bonnes fêtes de fin d'année encore.

Jack

















Avatar
LSteph
Curieux, chez moi(2003) il fonctionne impec!
et je n'arrive pas à reproduire l'erreur dont tu parles.

> une liste déroulante comprenant uniquement la liste du personnel
> d'Ammerschwihr.
La liste s'adapte en fonction du dernier choix.

je te le remets au cas où:

http://cjoint.com/?bbtCKK4Pdm





JK a écrit :
En rechargeant le fichier, j'ai refait des essais.
Le userform 2 ne s'ouvre pas mais j'ai à la cellule F1 de chaque feuille
une liste déroulante comprenant uniquement la liste du personnel
d'Ammerschwihr.
Bizarre ?
A+
Jack

"JK" a écrit dans le message de groupe de
discussion : #
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non
Peu importe la feuille dans laquelle je clique, c'est toujours le
userform1 qui s'ouvre.
Bizarre, non ??
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non






JK a écrit :
Merci pour ta prompte réponse.
J'ai un message d'erreur en lançant ta macro :
"Erreur exécution '9' - L'indice n'appartient pas à la sélection
En cliquant sur "débogage", je suis renvoyé à la ligne
"Worksheets(sh2).Activate" mis en surbrillance jaune.
Dommage mais ce n'est peut-être pas grand'chose.
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion : Oeun8a$
Bonjour JK et Bonne Année (à tous d'ailleurs)


http://cjoint.com/?bblEPOlCf6


Pour quand le lien n'y sera plus:
j'ai ajouté un userform avec liste mode options et multiselect
Voici les révisions effectuées dans le code:

'''''Module1

Public mylist As Range, sh1 As String, sh2 As String
Sub Selimpression()
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" & mylist.Address
UserForm2.Show
End Sub

'''''userform1

Private Sub CommandButton1_Click()

Dim c As Range
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call Selimpression
End Sub


Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption = ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub

'''''userform2

Private Sub CommandButton1_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(sh1).[F1] = .List(i)
Sheets(sh1).PrintOut
End If
Next
End With
Unload Me
End Sub


Private Sub CommandButton2_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = Not (.Selected(i))
Next
End With
End Sub

Private Sub UserForm_Initialize()
Dim c As Range
ListBox1.Clear
For Each c In mylist.Cells
ListBox1.AddItem c
Next

End Sub

'lSteph

JK a écrit :
Bonjour et bonne année à vous.
Puis-je me permettre une question concernant mon fichier ?
Comment n'imprimer qu'une ou plusieurs feuilles suite au rajout
d'un ou plusieurs noms dans la liste sans avoir à réimprimer toute
la liste ?

Merci encore à vous et plus particulièrement à LSteph

Jack

"JK" a écrit dans le message de groupe
de discussion : #
Bonsoir et mille mercis.
C'est GÉNIAL !!!!
Cela fonctionne du tonnerre.
Merci pour ton aide précieuse.
Jack

"LSteph" a écrit dans le message de groupe
de discussion :
Bonsoir,

Ca fonctionne mais pour tes soucis il me semble
ca vient de tes listes qui obligent à les redéfinir et appliquer
la macro à la bonne feuille, car ce n'est pas controlé.

Voici une variante si le contexte reste semblable:

http://cjoint.com/?mDbsbtZDOr


''''''''''''''''''''''''''''''''''''
'''''Thisworkbook
Private Sub Workbook_Open()
MsgBox "doublecliquer dans une feuille pour lancer"

End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object,
ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
'''''

'''''Module1
Sub impression(sh1 As String, sh2 As String)
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" &
mylist.Address
For Each c In mylist.Cells
Sheets(sh1).[f1] = c
Sheets(sh1).PrintOut
Next
End Sub

'''''
'''''userform1
Private Sub CommandButton1_Click()

Dim c As Range, mylist As Range, sh1 As String, sh2 As String
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call impression(sh1, sh2)
End Sub



Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption =
ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub
'''''
''''''''''''''''''''''''''''''''

'lSteph

JK a écrit :
Bonsoir,
Je m'en remets à vos lumières car je m'arrache la tête.

Dans le fichier joint ( http://cjoint.com/?mCuVVDlN1p ), j'ai
un souci de code VBA.

En effet, dans ce fichier, il y a 4 onglets pour une année et 2
onglets avec 2 listes de personnel.
Le code VBA (fourni par ce forum) fonctionnait à merveille mais
il ne veut plus !!
Il devait puiser tous les noms des listes respectives et
imprimer pour chaque nom l'onglet "1er trimestre" par exemple.
Bizarrement, le pas-à-pas détaillé (F8 dans le module VBA)
fonctionne mais le code ne exécute pas au lancement de la macro.
Il donne une erreur VBA (manque un objet).

Le problème est également qu'au fur et à mesure des
fluctuations de personnel, ces 2 listes bougent et j'étais
obligé à chaque fois de les renommer.

C'est pourquoi il y a un nombre conséquents de noms de liste
impossibles à supprimer d'une part et la difficulté d'exécuter
mes 2 macros.

Merci pour votre aide toujours aussi appréciée.

Bonnes fêtes de fin d'année encore.

Jack



















Avatar
JK
Toujours le même souci (suis également en version 2003).
A la réception du fichier,
- sur la feuille "1er trimestre" => liste déroulante personnel KB
- sur la feuille "2ème trimestre" => liste déroulante personnel KB
- sur la feuille "3ème trimestre" => liste déroulante personnel Amm
- sur la feuille "4ème trimestre" => liste déroulante personnel Amm

Toujours même message d'erreur ==> voir fichiers joints
http://cjoint.com/?bbux35PjCg
http://cjoint.com/?bbuyMRzvls

A+ et merci encore pour ton aide précieuse
Jack


"LSteph" a écrit dans le message de groupe de
discussion :
Curieux, chez moi(2003) il fonctionne impec!
et je n'arrive pas à reproduire l'erreur dont tu parles.

> une liste déroulante comprenant uniquement la liste du personnel
> d'Ammerschwihr.
La liste s'adapte en fonction du dernier choix.

je te le remets au cas où:

http://cjoint.com/?bbtCKK4Pdm





JK a écrit :
En rechargeant le fichier, j'ai refait des essais.
Le userform 2 ne s'ouvre pas mais j'ai à la cellule F1 de chaque feuille
une liste déroulante comprenant uniquement la liste du personnel
d'Ammerschwihr.
Bizarre ?
A+
Jack

"JK" a écrit dans le message de groupe de
discussion : #
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non
Peu importe la feuille dans laquelle je clique, c'est toujours le
userform1 qui s'ouvre.
Bizarre, non ??
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non






JK a écrit :
Merci pour ta prompte réponse.
J'ai un message d'erreur en lançant ta macro :
"Erreur exécution '9' - L'indice n'appartient pas à la sélection
En cliquant sur "débogage", je suis renvoyé à la ligne
"Worksheets(sh2).Activate" mis en surbrillance jaune.
Dommage mais ce n'est peut-être pas grand'chose.
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion : Oeun8a$
Bonjour JK et Bonne Année (à tous d'ailleurs)


http://cjoint.com/?bblEPOlCf6


Pour quand le lien n'y sera plus:
j'ai ajouté un userform avec liste mode options et multiselect
Voici les révisions effectuées dans le code:

'''''Module1

Public mylist As Range, sh1 As String, sh2 As String
Sub Selimpression()
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" & mylist.Address
UserForm2.Show
End Sub

'''''userform1

Private Sub CommandButton1_Click()

Dim c As Range
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call Selimpression
End Sub


Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption = ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub

'''''userform2

Private Sub CommandButton1_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(sh1).[F1] = .List(i)
Sheets(sh1).PrintOut
End If
Next
End With
Unload Me
End Sub


Private Sub CommandButton2_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = Not (.Selected(i))
Next
End With
End Sub

Private Sub UserForm_Initialize()
Dim c As Range
ListBox1.Clear
For Each c In mylist.Cells
ListBox1.AddItem c
Next

End Sub

'lSteph

JK a écrit :
Bonjour et bonne année à vous.
Puis-je me permettre une question concernant mon fichier ?
Comment n'imprimer qu'une ou plusieurs feuilles suite au rajout d'un
ou plusieurs noms dans la liste sans avoir à réimprimer toute la
liste ?

Merci encore à vous et plus particulièrement à LSteph

Jack

"JK" a écrit dans le message de groupe de
discussion : #
Bonsoir et mille mercis.
C'est GÉNIAL !!!!
Cela fonctionne du tonnerre.
Merci pour ton aide précieuse.
Jack

"LSteph" a écrit dans le message de groupe
de discussion :
Bonsoir,

Ca fonctionne mais pour tes soucis il me semble
ca vient de tes listes qui obligent à les redéfinir et appliquer
la macro à la bonne feuille, car ce n'est pas controlé.

Voici une variante si le contexte reste semblable:

http://cjoint.com/?mDbsbtZDOr


''''''''''''''''''''''''''''''''''''
'''''Thisworkbook
Private Sub Workbook_Open()
MsgBox "doublecliquer dans une feuille pour lancer"

End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object,
ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
'''''

'''''Module1
Sub impression(sh1 As String, sh2 As String)
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" &
mylist.Address
For Each c In mylist.Cells
Sheets(sh1).[f1] = c
Sheets(sh1).PrintOut
Next
End Sub

'''''
'''''userform1
Private Sub CommandButton1_Click()

Dim c As Range, mylist As Range, sh1 As String, sh2 As String
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call impression(sh1, sh2)
End Sub



Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption =
ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub
'''''
''''''''''''''''''''''''''''''''

'lSteph

JK a écrit :
Bonsoir,
Je m'en remets à vos lumières car je m'arrache la tête.

Dans le fichier joint ( http://cjoint.com/?mCuVVDlN1p ), j'ai un
souci de code VBA.

En effet, dans ce fichier, il y a 4 onglets pour une année et 2
onglets avec 2 listes de personnel.
Le code VBA (fourni par ce forum) fonctionnait à merveille mais
il ne veut plus !!
Il devait puiser tous les noms des listes respectives et imprimer
pour chaque nom l'onglet "1er trimestre" par exemple.
Bizarrement, le pas-à-pas détaillé (F8 dans le module VBA)
fonctionne mais le code ne exécute pas au lancement de la macro.
Il donne une erreur VBA (manque un objet).

Le problème est également qu'au fur et à mesure des fluctuations
de personnel, ces 2 listes bougent et j'étais obligé à chaque
fois de les renommer.

C'est pourquoi il y a un nombre conséquents de noms de liste
impossibles à supprimer d'une part et la difficulté d'exécuter
mes 2 macros.

Merci pour votre aide toujours aussi appréciée.

Bonnes fêtes de fin d'année encore.

Jack





















Avatar
LSteph
..
double clique dans une des feuilles choisis un trimestre et une des deux
listes
Amm ou Kb c'est celle là qui sera assignée à la celule F1 de la feuille
trimestrielle choisie.

je ne vais pas mettre une copie écran qui ferait paraître les noms
Contacte moi en bal perso si tu veux enlève "le" devant et relmplace
frite par free



JK a écrit :
Toujours le même souci (suis également en version 2003).
A la réception du fichier,
- sur la feuille "1er trimestre" => liste déroulante personnel KB
- sur la feuille "2ème trimestre" => liste déroulante personnel KB
- sur la feuille "3ème trimestre" => liste déroulante personnel Amm
- sur la feuille "4ème trimestre" => liste déroulante personnel Amm

Toujours même message d'erreur ==> voir fichiers joints
http://cjoint.com/?bbux35PjCg
http://cjoint.com/?bbuyMRzvls

A+ et merci encore pour ton aide précieuse
Jack


"LSteph" a écrit dans le message de groupe de
discussion :
Curieux, chez moi(2003) il fonctionne impec!
et je n'arrive pas à reproduire l'erreur dont tu parles.

> une liste déroulante comprenant uniquement la liste du personnel
> d'Ammerschwihr.
La liste s'adapte en fonction du dernier choix.

je te le remets au cas où:

http://cjoint.com/?bbtCKK4Pdm





JK a écrit :
En rechargeant le fichier, j'ai refait des essais.
Le userform 2 ne s'ouvre pas mais j'ai à la cellule F1 de chaque
feuille une liste déroulante comprenant uniquement la liste du
personnel d'Ammerschwihr.
Bizarre ?
A+
Jack

"JK" a écrit dans le message de groupe de
discussion : #
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non
Peu importe la feuille dans laquelle je clique, c'est toujours le
userform1 qui s'ouvre.
Bizarre, non ??
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non






JK a écrit :
Merci pour ta prompte réponse.
J'ai un message d'erreur en lançant ta macro :
"Erreur exécution '9' - L'indice n'appartient pas à la sélection
En cliquant sur "débogage", je suis renvoyé à la ligne
"Worksheets(sh2).Activate" mis en surbrillance jaune.
Dommage mais ce n'est peut-être pas grand'chose.
A +
Jack

"LSteph" a écrit dans le message de groupe
de discussion : Oeun8a$
Bonjour JK et Bonne Année (à tous d'ailleurs)


http://cjoint.com/?bblEPOlCf6


Pour quand le lien n'y sera plus:
j'ai ajouté un userform avec liste mode options et multiselect
Voici les révisions effectuées dans le code:

'''''Module1

Public mylist As Range, sh1 As String, sh2 As String
Sub Selimpression()
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" &
mylist.Address
UserForm2.Show
End Sub

'''''userform1

Private Sub CommandButton1_Click()

Dim c As Range
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call Selimpression
End Sub


Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption =
ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub

'''''userform2

Private Sub CommandButton1_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(sh1).[F1] = .List(i)
Sheets(sh1).PrintOut
End If
Next
End With
Unload Me
End Sub


Private Sub CommandButton2_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = Not (.Selected(i))
Next
End With
End Sub

Private Sub UserForm_Initialize()
Dim c As Range
ListBox1.Clear
For Each c In mylist.Cells
ListBox1.AddItem c
Next

End Sub

'lSteph

JK a écrit :
Bonjour et bonne année à vous.
Puis-je me permettre une question concernant mon fichier ?
Comment n'imprimer qu'une ou plusieurs feuilles suite au rajout
d'un ou plusieurs noms dans la liste sans avoir à réimprimer
toute la liste ?

Merci encore à vous et plus particulièrement à LSteph

Jack

"JK" a écrit dans le message de
groupe de discussion : #
Bonsoir et mille mercis.
C'est GÉNIAL !!!!
Cela fonctionne du tonnerre.
Merci pour ton aide précieuse.
Jack

"LSteph" a écrit dans le message de
groupe de discussion :
Bonsoir,

Ca fonctionne mais pour tes soucis il me semble
ca vient de tes listes qui obligent à les redéfinir et
appliquer la macro à la bonne feuille, car ce n'est pas controlé.

Voici une variante si le contexte reste semblable:

http://cjoint.com/?mDbsbtZDOr


''''''''''''''''''''''''''''''''''''
'''''Thisworkbook
Private Sub Workbook_Open()
MsgBox "doublecliquer dans une feuille pour lancer"

End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As
Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
'''''

'''''Module1
Sub impression(sh1 As String, sh2 As String)
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" &
mylist.Address
For Each c In mylist.Cells
Sheets(sh1).[f1] = c
Sheets(sh1).PrintOut
Next
End Sub

'''''
'''''userform1
Private Sub CommandButton1_Click()

Dim c As Range, mylist As Range, sh1 As String, sh2 As String
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call impression(sh1, sh2)
End Sub



Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption =
ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub
'''''
''''''''''''''''''''''''''''''''

'lSteph

JK a écrit :
Bonsoir,
Je m'en remets à vos lumières car je m'arrache la tête.

Dans le fichier joint ( http://cjoint.com/?mCuVVDlN1p ), j'ai
un souci de code VBA.

En effet, dans ce fichier, il y a 4 onglets pour une année et
2 onglets avec 2 listes de personnel.
Le code VBA (fourni par ce forum) fonctionnait à merveille
mais il ne veut plus !!
Il devait puiser tous les noms des listes respectives et
imprimer pour chaque nom l'onglet "1er trimestre" par exemple.
Bizarrement, le pas-à-pas détaillé (F8 dans le module VBA)
fonctionne mais le code ne exécute pas au lancement de la macro.
Il donne une erreur VBA (manque un objet).

Le problème est également qu'au fur et à mesure des
fluctuations de personnel, ces 2 listes bougent et j'étais
obligé à chaque fois de les renommer.

C'est pourquoi il y a un nombre conséquents de noms de liste
impossibles à supprimer d'une part et la difficulté
d'exécuter mes 2 macros.

Merci pour votre aide toujours aussi appréciée.

Bonnes fêtes de fin d'année encore.

Jack























Avatar
JK
J'ai enfin compris que j'avais loupé une étape.
Je ne savais pas que les 2 userforms étaient liés.
Je n'avais pas osé cliquer sur "imprimer" car je pensais que cela lançait
l'impression totale de la liste choisie.

Merci à toi pour ta patience !!
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
..
double clique dans une des feuilles choisis un trimestre et une des deux
listes
Amm ou Kb c'est celle là qui sera assignée à la celule F1 de la feuille
trimestrielle choisie.

je ne vais pas mettre une copie écran qui ferait paraître les noms
Contacte moi en bal perso si tu veux enlève "le" devant et relmplace frite
par free



JK a écrit :
Toujours le même souci (suis également en version 2003).
A la réception du fichier,
- sur la feuille "1er trimestre" => liste déroulante personnel KB
- sur la feuille "2ème trimestre" => liste déroulante personnel KB
- sur la feuille "3ème trimestre" => liste déroulante personnel Amm
- sur la feuille "4ème trimestre" => liste déroulante personnel Amm

Toujours même message d'erreur ==> voir fichiers joints
http://cjoint.com/?bbux35PjCg
http://cjoint.com/?bbuyMRzvls

A+ et merci encore pour ton aide précieuse
Jack


"LSteph" a écrit dans le message de groupe de
discussion :
Curieux, chez moi(2003) il fonctionne impec!
et je n'arrive pas à reproduire l'erreur dont tu parles.

> une liste déroulante comprenant uniquement la liste du personnel
> d'Ammerschwihr.
La liste s'adapte en fonction du dernier choix.

je te le remets au cas où:

http://cjoint.com/?bbtCKK4Pdm





JK a écrit :
En rechargeant le fichier, j'ai refait des essais.
Le userform 2 ne s'ouvre pas mais j'ai à la cellule F1 de chaque
feuille une liste déroulante comprenant uniquement la liste du
personnel d'Ammerschwihr.
Bizarre ?
A+
Jack

"JK" a écrit dans le message de groupe de
discussion : #
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non
Peu importe la feuille dans laquelle je clique, c'est toujours le
userform1 qui s'ouvre.
Bizarre, non ??
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non






JK a écrit :
Merci pour ta prompte réponse.
J'ai un message d'erreur en lançant ta macro :
"Erreur exécution '9' - L'indice n'appartient pas à la sélection
En cliquant sur "débogage", je suis renvoyé à la ligne
"Worksheets(sh2).Activate" mis en surbrillance jaune.
Dommage mais ce n'est peut-être pas grand'chose.
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion : Oeun8a$
Bonjour JK et Bonne Année (à tous d'ailleurs)


http://cjoint.com/?bblEPOlCf6


Pour quand le lien n'y sera plus:
j'ai ajouté un userform avec liste mode options et multiselect
Voici les révisions effectuées dans le code:

'''''Module1

Public mylist As Range, sh1 As String, sh2 As String
Sub Selimpression()
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" &
mylist.Address
UserForm2.Show
End Sub

'''''userform1

Private Sub CommandButton1_Click()

Dim c As Range
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call Selimpression
End Sub


Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption =
ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub

'''''userform2

Private Sub CommandButton1_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(sh1).[F1] = .List(i)
Sheets(sh1).PrintOut
End If
Next
End With
Unload Me
End Sub


Private Sub CommandButton2_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = Not (.Selected(i))
Next
End With
End Sub

Private Sub UserForm_Initialize()
Dim c As Range
ListBox1.Clear
For Each c In mylist.Cells
ListBox1.AddItem c
Next

End Sub

'lSteph

JK a écrit :
Bonjour et bonne année à vous.
Puis-je me permettre une question concernant mon fichier ?
Comment n'imprimer qu'une ou plusieurs feuilles suite au rajout
d'un ou plusieurs noms dans la liste sans avoir à réimprimer toute
la liste ?

Merci encore à vous et plus particulièrement à LSteph

Jack

"JK" a écrit dans le message de groupe
de discussion : #
Bonsoir et mille mercis.
C'est GÉNIAL !!!!
Cela fonctionne du tonnerre.
Merci pour ton aide précieuse.
Jack

"LSteph" a écrit dans le message de groupe
de discussion :
Bonsoir,

Ca fonctionne mais pour tes soucis il me semble
ca vient de tes listes qui obligent à les redéfinir et appliquer
la macro à la bonne feuille, car ce n'est pas controlé.

Voici une variante si le contexte reste semblable:

http://cjoint.com/?mDbsbtZDOr


''''''''''''''''''''''''''''''''''''
'''''Thisworkbook
Private Sub Workbook_Open()
MsgBox "doublecliquer dans une feuille pour lancer"

End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object,
ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
'''''

'''''Module1
Sub impression(sh1 As String, sh2 As String)
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" &
mylist.Address
For Each c In mylist.Cells
Sheets(sh1).[f1] = c
Sheets(sh1).PrintOut
Next
End Sub

'''''
'''''userform1
Private Sub CommandButton1_Click()

Dim c As Range, mylist As Range, sh1 As String, sh2 As String
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call impression(sh1, sh2)
End Sub



Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption =
ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub
'''''
''''''''''''''''''''''''''''''''

'lSteph

JK a écrit :
Bonsoir,
Je m'en remets à vos lumières car je m'arrache la tête.

Dans le fichier joint ( http://cjoint.com/?mCuVVDlN1p ), j'ai
un souci de code VBA.

En effet, dans ce fichier, il y a 4 onglets pour une année et 2
onglets avec 2 listes de personnel.
Le code VBA (fourni par ce forum) fonctionnait à merveille mais
il ne veut plus !!
Il devait puiser tous les noms des listes respectives et
imprimer pour chaque nom l'onglet "1er trimestre" par exemple.
Bizarrement, le pas-à-pas détaillé (F8 dans le module VBA)
fonctionne mais le code ne exécute pas au lancement de la
macro.
Il donne une erreur VBA (manque un objet).

Le problème est également qu'au fur et à mesure des
fluctuations de personnel, ces 2 listes bougent et j'étais
obligé à chaque fois de les renommer.

C'est pourquoi il y a un nombre conséquents de noms de liste
impossibles à supprimer d'une part et la difficulté d'exécuter
mes 2 macros.

Merci pour votre aide toujours aussi appréciée.

Bonnes fêtes de fin d'année encore.

Jack

























Avatar
LSteph
;-) ouf je trouvais pas à reproduire l'erreur!

@+



JK a écrit :
J'ai enfin compris que j'avais loupé une étape.
Je ne savais pas que les 2 userforms étaient liés.
Je n'avais pas osé cliquer sur "imprimer" car je pensais que cela
lançait l'impression totale de la liste choisie.

Merci à toi pour ta patience !!
A +
Jack

"LSteph" a écrit dans le message de groupe de
discussion :
..
double clique dans une des feuilles choisis un trimestre et une des
deux listes
Amm ou Kb c'est celle là qui sera assignée à la celule F1 de la
feuille trimestrielle choisie.

je ne vais pas mettre une copie écran qui ferait paraître les noms
Contacte moi en bal perso si tu veux enlève "le" devant et relmplace
frite par free



JK a écrit :
Toujours le même souci (suis également en version 2003).
A la réception du fichier,
- sur la feuille "1er trimestre" => liste déroulante personnel KB
- sur la feuille "2ème trimestre" => liste déroulante personnel KB
- sur la feuille "3ème trimestre" => liste déroulante personnel Amm
- sur la feuille "4ème trimestre" => liste déroulante personnel Amm

Toujours même message d'erreur ==> voir fichiers joints
http://cjoint.com/?bbux35PjCg
http://cjoint.com/?bbuyMRzvls

A+ et merci encore pour ton aide précieuse
Jack


"LSteph" a écrit dans le message de groupe de
discussion :
Curieux, chez moi(2003) il fonctionne impec!
et je n'arrive pas à reproduire l'erreur dont tu parles.

> une liste déroulante comprenant uniquement la liste du personnel
> d'Ammerschwihr.
La liste s'adapte en fonction du dernier choix.

je te le remets au cas où:

http://cjoint.com/?bbtCKK4Pdm





JK a écrit :
En rechargeant le fichier, j'ai refait des essais.
Le userform 2 ne s'ouvre pas mais j'ai à la cellule F1 de chaque
feuille une liste déroulante comprenant uniquement la liste du
personnel d'Ammerschwihr.
Bizarre ?
A+
Jack

"JK" a écrit dans le message de groupe
de discussion : #
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non
Peu importe la feuille dans laquelle je clique, c'est toujours le
userform1 qui s'ouvre.
Bizarre, non ??
A +
Jack

"LSteph" a écrit dans le message de groupe
de discussion :
As tu bien utilisé le classeur que j'ai mis en lien? ==> oui
Es-tu bien passé par le doubleclic dans la feuille? ==> oui
As-tu changé ajouté supprimé des feuilles? ==> non






JK a écrit :
Merci pour ta prompte réponse.
J'ai un message d'erreur en lançant ta macro :
"Erreur exécution '9' - L'indice n'appartient pas à la sélection
En cliquant sur "débogage", je suis renvoyé à la ligne
"Worksheets(sh2).Activate" mis en surbrillance jaune.
Dommage mais ce n'est peut-être pas grand'chose.
A +
Jack

"LSteph" a écrit dans le message de
groupe de discussion : Oeun8a$
Bonjour JK et Bonne Année (à tous d'ailleurs)


http://cjoint.com/?bblEPOlCf6


Pour quand le lien n'y sera plus:
j'ai ajouté un userform avec liste mode options et multiselect
Voici les révisions effectuées dans le code:

'''''Module1

Public mylist As Range, sh1 As String, sh2 As String
Sub Selimpression()
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" &
mylist.Address
UserForm2.Show
End Sub

'''''userform1

Private Sub CommandButton1_Click()

Dim c As Range
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call Selimpression
End Sub


Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption =
ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub

'''''userform2

Private Sub CommandButton1_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
Sheets(sh1).[F1] = .List(i)
Sheets(sh1).PrintOut
End If
Next
End With
Unload Me
End Sub


Private Sub CommandButton2_Click()
Dim i As Long
With ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = Not (.Selected(i))
Next
End With
End Sub

Private Sub UserForm_Initialize()
Dim c As Range
ListBox1.Clear
For Each c In mylist.Cells
ListBox1.AddItem c
Next

End Sub

'lSteph

JK a écrit :
Bonjour et bonne année à vous.
Puis-je me permettre une question concernant mon fichier ?
Comment n'imprimer qu'une ou plusieurs feuilles suite au
rajout d'un ou plusieurs noms dans la liste sans avoir à
réimprimer toute la liste ?

Merci encore à vous et plus particulièrement à LSteph

Jack

"JK" a écrit dans le message de
groupe de discussion : #
Bonsoir et mille mercis.
C'est GÉNIAL !!!!
Cela fonctionne du tonnerre.
Merci pour ton aide précieuse.
Jack

"LSteph" a écrit dans le message de
groupe de discussion :
Bonsoir,

Ca fonctionne mais pour tes soucis il me semble
ca vient de tes listes qui obligent à les redéfinir et
appliquer la macro à la bonne feuille, car ce n'est pas
controlé.

Voici une variante si le contexte reste semblable:

http://cjoint.com/?mDbsbtZDOr


''''''''''''''''''''''''''''''''''''
'''''Thisworkbook
Private Sub Workbook_Open()
MsgBox "doublecliquer dans une feuille pour lancer"

End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As
Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
'''''

'''''Module1
Sub impression(sh1 As String, sh2 As String)
Unload UserForm1
Worksheets(sh2).Activate
Application.ScreenUpdating = False
Set mylist = Range("g1:g" & [g65536].End(xlUp).Row)
ThisWorkbook.Names.Add Name:="lalist", RefersTo:="=" &
mylist.Address
For Each c In mylist.Cells
Sheets(sh1).[f1] = c
Sheets(sh1).PrintOut
Next
End Sub

'''''
'''''userform1
Private Sub CommandButton1_Click()

Dim c As Range, mylist As Range, sh1 As String, sh2 As String
For i = 1 To 6
With Me.Controls("OptionButton" & i)
If i < 5 Then
If .Value Then sh1 = .Caption
Else
If .Value Then sh2 = .Caption

End If
End With
Next
Call impression(sh1, sh2)
End Sub



Private Sub UserForm_Initialize()
Me.Caption = "Choix d'impression"
For i = 1 To 6
Me.Controls("OptionButton" & i).Caption =
ThisWorkbook.Sheets(i).Name
Next
CommandButton1.Caption = "Imprimer"
OptionButton1 = True
OptionButton5 = True
End Sub
'''''
''''''''''''''''''''''''''''''''

'lSteph

JK a écrit :
Bonsoir,
Je m'en remets à vos lumières car je m'arrache la tête.

Dans le fichier joint ( http://cjoint.com/?mCuVVDlN1p ),
j'ai un souci de code VBA.

En effet, dans ce fichier, il y a 4 onglets pour une année
et 2 onglets avec 2 listes de personnel.
Le code VBA (fourni par ce forum) fonctionnait à merveille
mais il ne veut plus !!
Il devait puiser tous les noms des listes respectives et
imprimer pour chaque nom l'onglet "1er trimestre" par exemple.
Bizarrement, le pas-à-pas détaillé (F8 dans le module VBA)
fonctionne mais le code ne exécute pas au lancement de la
macro.
Il donne une erreur VBA (manque un objet).

Le problème est également qu'au fur et à mesure des
fluctuations de personnel, ces 2 listes bougent et j'étais
obligé à chaque fois de les renommer.

C'est pourquoi il y a un nombre conséquents de noms de
liste impossibles à supprimer d'une part et la difficulté
d'exécuter mes 2 macros.

Merci pour votre aide toujours aussi appréciée.

Bonnes fêtes de fin d'année encore.

Jack



























1 2