Sélection de lignes par Combobox

S

steplof

Guest
Bonsoir à tout le monde

J'ai un petit problème que je n'arrive pas à résoudre...
Je voudrais que mon utilisateur sélectionne facilement une plage de cellules constituée de plusieurs lignes à la suite à recopier dans un autre classeur.

Pour cela j ‘envisageais un userform avec 2 combobox permettant de sélectionner la ligne de départ d’une part et la dernière ligne de la zone à copier d’autre part.

Pour faciliter la vie des users je souhaite que les informations à copier (4 colonnes par ligne) apparaissent dans la combobox

Mon userform ressemble donc à ça

Sélection 1ere ligne : Combobox CBPremLigne
Sélection dernière ligne : Combobox CBDernLigne
OK Annuler

J’initialise ainsi
Private Sub UserForm_Initialize()

Dim VarDerLigneSaisie As Integer
Dim VarPlageLigneSaisies As String

VarDerLigneSaisie = Sheets("Saisie actions").Range("a65536").End(xlUp).Row

VarPlageLigneSaisies = Sheets("Saisie actions").Range("o17:r" & VarDerLigneSaisie).Address
CBPremLigne.ColumnCount = 5
CBPremLigne.RowSource = "Saisie actions!" & VarPlageLigneSaisies
End Sub


Private Sub CBPremLigne_Click()
Dim PremLigneSelect As Integer
PremLigneSelect = UserForm1.CBPremLigne.ListIndex + 18
End Sub
Même style prévu pour CBDernLigne
J’ai un problème avec l’instruction CBPremLigne.RowSource=
Je ne comprends pas pourquoi…
Pouvez vous m ‘éclairer ??
D'avance merci

Steplof
 
@

@+Thierry

Guest
Bonsoir StepLof

Je pense d'emblé (çà s'écrit pas comme çà !! Zut !) Bon je pense Damblé !! non la on dirait la chanson de Matmahta !!... BOn enfin je pense à prime abord ...

Tu dis bien que c'est RowSource qui t'embête... (héhéhé) par contre pour en bas "click" je n'ai pas testé.

Donc dans cette ligne :
CBPremLigne.RowSource = "Saisie actions!" & VarPlageLigneSaisies

C'est pas bon, essaie :
CBPremLigne.RowSource = "Saisie_actions!" & VarPlageLigneSaisies

Et bien sûr tu renommes ta feuille en conséquence..... Quand on vous dit que les accents et les espaces ne sont pas encore acceptés partout.....

Je pense que ICI c'est le KA c'est pour çà qu'il faut prendre soin de ne pas délirer dans vous nommez vos objets... C'est souvent un risque... à vos dépent de longues heures de patience...

Moi j'ai l'avantage d'avoir appris quand 8 caractères étaient le max.... alors !

Dis moi STeplof.... Si tu es encore en ligne....... Suis pas loin !

@+Thierry
 
S

steplof

Guest
Bonjour à tous

@+Thierry, d'emblée je te remercie vivement. ;o))

En effet, le petit _ , vient de me lever une épine du pied qui commençait vraiment à me taper sur les nerfs...
Même si j'ai un excellent prof (suivez mon regard), je suis loin de maitriser les userform, alors si en plus les espaces s'en mêlent... là c'est moi qui m'emmele...

Bon ben je vais pouvoir continuer à démeler.

Encore Merci


Steplof
 
S

steplof

Guest
Re @ tous

bon j'espère avoir retenu la leçon, d'un côté ça me rassure pour le côté compréhension userform...

Encore une petite question,

lorsque je teste les sélections(et surtout les non sélection de cellule) dans mon Private Sub BoutonOk_Click(), j'obtiens un truc qui m'étonne et que j'aimerais comprendre:

Private Sub BoutonOk_Click(),
UserForm1.Hide

'*************Traitement erreur sélection première ligne à copier******
If varselectedPremLigne < 17 Then
MsgBox ("Vous devez cliquer sur une ligne pour la sélectioner")
UserForm1.Show
ListBoxPremLigne.SetFocus
End If
'****Traitement erreur sélection deuxième ligne à copier**************

If varselectedPremLigne > varselectedDernLigne Then

MsgBox ("la dernière ligne ne doit pas être avant la première ou vous n'avez pas cliquer sur la ligne choisie pour la sélectionner")
UserForm1.Show
ListBoxDernLigne.SetFocus
End If

Msgbox(varselectedPremLigne)
msgbox(varselectedDernLigne)

end sub

Là si je fais une erreur et donc que je réaffiche l'userorm, j'obtiens mon msgbox avec ma premiere ligne sélectionnée et ma dernière ligne sélectionnée autant de fois que j'ai réaffiché l'userform
Pourquoi?


Merci.

Steplof
 
@

@+Thierry

Guest
Salut StepLof

Sans voir le code entier c'est difficile... Juste une question pourquoi
msgbox ("toto") ?
çà c'est si par exemple tu fais une variable sur une le retour de données d'un inputbox
exemple
Toto = InputBox("Entrer un chiffre")
MaVar = MonAutreVar + Toto

Donc déjà les ((())) servent à quoi dans ce code ?
MsgBox "Toto"
suffit non ?

Pour le reste sans savoir les initialisations de Variable je suis aveugle.

@+Thierry
 
S

steplof

Guest
Re salut @tous


Au sujet de la syntaxe, ravi d'apprendre que msgbox "toto", suffit voilà qui m'explique peut être l'inexplicable incapacité que j'avais à affecter d'autres paramètres à mes msgbox....(vais tester ça aussi)

Pour la raison logique des msgbox c'était juste pendant mes tests pour vérifier que ça me renvoyait bien ce que je voulais à savoir le numéro de ligne de ma feuille excel correspondant à la valeur sélectionnée dans l'userform.
Mais j'ai été surpris de constater que ça me les renvoyait x fois(autant de fois que j'avais réaffiché l'userform...
En fait il me semble qu'il y a un problème de réinitialisation...

En fait c'était la suite de ce matin sauf qu'entre temps les combobox sont devenus des listbox... ça tu l'avais sans doute compris.

Bon voici tout le code lié à mon userform
Je le soumets volontiers aux critiques en tout genre

L'objectif est que l'utilisateur choisisse facilement les lignes à recopier dans un autre classeur
Les donées à copier vont de la plage 017:r17 à .....

Public varselectedDernLigne As Integer
Public varselectedPremLigne As Integer

Private Sub UserForm_Initialize()
Dim VarDerLigneSaisie As Integer
Dim VarPlageLigneSaisies As String

VarDerLigneSaisie = Sheets("Saisie_actions").Range("a65536").End(xlUp).Row
VarPlageLigneSaisies = Sheets("Saisie_actions").Range("o17:r" & VarDerLigneSaisie).Address
ListBoxPremLigne.ColumnCount = 4
ListBoxPremLigne.RowSource = "Saisie_actions!" & VarPlageLigneSaisies
ListBoxPremLigne.ColumnWidths = "80;280;80;80"
ListBoxDernLigne.ColumnCount = 4
ListBoxDernLigne.ColumnWidths = "80;280;80;80"
ListBoxDernLigne.RowSource = "Saisie_actions!" & VarPlageLigneSaisies


End Sub

Private Sub BoutonAnnuler_Click()
UserForm1.Hide
End Sub

Private Sub BoutonOk_Click()
Dim zoneacopier As String
Dim p4ouvert As Boolean

UserForm1.Hide

'*************Traitement erreur sélection première ligne à copier: ligne non saisie*************
If varselectedPremLigne < 17 Then
MsgBox ("Vous devez cliquer sur une ligne pour la sélectioner")
UserForm1.Show
ListBoxPremLigne.SetFocus
End If
'****Traitement erreur sélection deuxième ligne à copie: ligne non saisie ou avant la*************
'**************************numero ligne saisie avant premiere ligne sélectionnée**************

If varselectedPremLigne > varselectedDernLigne Then

MsgBox ("la dernière ligne ne doit pas être avant la première ou vous n'avez pas cliquer sur la ligne choisie pour la sélectionner")
UserForm1.Show
ListBoxDernLigne.SetFocus
End If
'ici je m'étonne du fait que j'ai décrit dans mon post
à savoir l'affichage plusieurs fois de mes msgbox je ne comprends pas pourquoi...

'la partie ci-après est la copie dans autre classeur
Sheets(1).Activate
zoneacopier = "o" & varselectedPremLigne & ":r" & varselectedDernLigne
p4ouvert = False
For Each w In Workbooks
Select Case UCase$(w.Name)
Case UCase$("p4.xls")
p4ouvert = True
End Select

If p4ouvert = False Then Workbooks.Open Filename:="E:\P4.xls"

ThisWorkbook.Activate

Range(zoneacopier).Select
Selection.Copy
Windows("P4.xls").Activate
Sheets("0 communes").Range("A14").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ActiveCell.Select

End Sub

Private Sub ListBoxDernLigne_Change() 'là je n'ai pas bien vu la diff entre click et change les 2 ont semblé fonctioner...
varselectedDernLigne = UserForm1.ListBoxDernLigne.ListIndex + 17

End Sub

Private Sub ListBoxPremLigne_Change()'idem ici
varselectedPremLigne = UserForm1.ListBoxPremLigne.ListIndex + 17
If varselectedPremLigne < 17 Then
MsgBox ("Vous devez cliquer sur une ligne pour la sélectioner")
ListBoxPremLigne.SetFocus
End If

End Sub


Merci encore de votre aide

Steplof
 
@

@+Thierry

Guest
Bonsoir StepLof
Bonsoir le Forum

Compliquée ton histoire..... Surtout sans avoir le classeur

Remplace déjà tous les "UserForm1.Hide" par "Unload Userform1"......
Même si çà plante ailleurs ceci aura déjà l'avantage de voir ci c'est à cause d'un variable à l'intérieur du Userform que ça te rebalance ton MsgBox...

si çà marche toujours pas je ne vois pas plus car je n'ai pas envie de re-fabriquer un USF avec ce code... Alors fais une mimi démo du problème !! (moi je fais bien des mini démo de solutions !!! lol)

...
@+Thierry
 
S

steplof

Guest
Bonsoir @ tous

Bon ben voilà une petite version allégée de mon appli qui conserve la surprenante (pour moi) répétition des msgbox en sortie d'userform

j'Espère que ça te permettra d'y voir clair...

Merci pour tout et le reste...
Bonne fin de week-end (vacances peut être...)

Steplof
 

Pièces jointes

  • DEMOusfBizarre.zip
    30.5 KB · Affichages: 51
@

@+Thierry

Guest
Comme çà pas de soucis !

Private Sub BoutonOk_Click()
Dim zoneacopier As String
Dim p4ouvert As Boolean

'UserForm1.Hide

'*************Traitement erreur sélection première ligne à copier: ligne non saisie*************
If varselectedPremLigne < 17 Then
MsgBox "Vous devez cliquer sur une ligne pour la sélectioner"
' UserForm1.Show
ListBoxPremLigne.SetFocus
End If
'****Traitement erreur sélection deuxième ligne à copie: ligne non saisie ou avant la*************
'**************************numero ligne saisie avant premiere ligne sélectionnée**************

If varselectedPremLigne > varselectedDernLigne Then

MsgBox ("la dernière ligne ne doit pas être avant la première ou vous n'avez pas cliquer sur la ligne choisie pour la sélectionner")
' UserForm1.Show
ListBoxDernLigne.SetFocus
End If

MsgBox varselectedPremLigne
MsgBox varselectedDernLigne


End Sub

Pourquoi jouer à cache cache avec le UserForm ???
lol
Bon vé au lit moi (oui fin de vacances)
@+Thierry
 
S

steplof

Guest
RE(re)(re)...
Le chat est de retour... lol

Ben même avec unload ça me renvoie en plusieurs fois les msgbox... après des erreurs. (essayé avec sélection_click et sélection_change).

C'est quand même bizarre que les mêmes variables me renvoient des valeurs diférentes... +je réfléchis au problème moins je le comprends....

Petite précision anecdotique, faut virer les setfocus qui entrainent une erreur puisque ce ne sont plus des combo(comme envisagées au départ) mais des listbox ...

Muchas Gracias...

Steplof(dans les ténèbres)
 

Discussions similaires

Statistiques des forums

Discussions
314 020
Messages
2 104 663
Membres
109 098
dernier inscrit
azooma