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

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

10 réponses

1 2
Avatar
Daniel.C
Bonsoir.
Tes macros fonctionnent chez moi. Quel est le message exact ?
Cordialement.
Daniel

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
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
Bonjour
Merci pour la réponse.
Quand je lance la 2ème macro, j'ai l'impression des 2 premier noms de la la
liste 1 mais que les noms sans le reste (prénom, grade, service).
Je ne comprends pas !
A+
Jack

"Daniel.C" a écrit dans le message de groupe de
discussion : #
Bonsoir.
Tes macros fonctionnent chez moi. Quel est le message exact ?
Cordialement.
Daniel

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
Bonjour,

normal c'est ainsi que tu l'as défini,
regarde donc ma réponse de 0:33
au cas où tu ne la verrais pas
je remet le cjoint: http://cjoint.com/?mDbsbtZDOr

--
lSteph

JK a écrit :
Bonjour
Merci pour la réponse.
Quand je lance la 2ème macro, j'ai l'impression des 2 premier noms de la
la liste 1 mais que les noms sans le reste (prénom, grade, service).
Je ne comprends pas !
A+
Jack

"Daniel.C" a écrit dans le message de groupe
de discussion : #
Bonsoir.
Tes macros fonctionnent chez moi. Quel est le message exact ?
Cordialement.
Daniel

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
Bonsoir
Merci pour ton fichier et tes lumières.
Je n'ai pas eu l'occasion de le tester mais je le ferai demain. Promis !
A +
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
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
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
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
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
As tu bien utilisé le classeur que j'ai mis en lien?
Es-tu bien passé par le doubleclic dans la feuille?
As-tu changé ajouté supprimé des feuilles?



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