Choisir feuille via checkbox (variable sheets

Résolu
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -  
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voilà que j'ai pratiquement terminé mon documents mais je bloque sur la dernière étape.
Voila', je me sers d'un userform pour aller chercher des infos dans d'autres feuilles... ça fonctionne une feuille à la fois mais si je veux choisir la feuille ou aller chercher les infos à afficher dans ma lisbox selon le checkbox choisi..ça fonctionne pas..Si quelqu'un a une idée..
Je sais que mon problème vient surement de ma déclaration de variable...
C'est pour le userform

Voici mon code et je joins mon fichier


Option Explicit

Private Sub checkbox_Change()
Dim sCd As Worksheet ' s pour Sheets et Cd pour crédit
Dim sCd1 As Worksheet
Dim sCd2 As Worksheet
Dim sCd3 As Worksheet
Set sCd = worksheets("RBC") ' détermine que S pour sheet et Cd veut dire Feuille RBC
Set sCd1 = worksheets("OR")
Set sCd2 = worksheets("Affaire")
Set sCd3 = worksheets("Lancy")
If CheckBox_RBC = True Then
worksheets = sCd
If CheckBox_Affaire = True Then
worksheets = sCd1
If CheckBox_or = True Then
worksheets = sCd2
If CheckBox_lancy = True Then
worksheets = sCd3

With ListBox1
.ColumnCount = 7
.ColumnWidths = "45 pt;35 pt;70 pt;60 pt;30 pt;55 pt;35pt"
.Clear
LabelInfo.Caption = " Les dates doivent être comprises entre le ''" _
& worksheets.Range("A2").Value & "'' et le ''" & worksheets.Range("A1000").End(xlUp).Rows & "''."

DTPicker_Du.Value = worksheets.Range("A2")
DTPicker_Au.Value = worksheets.Range("A1000")
End With
End If
End Sub
Private Sub DTPicker_Du_Change()

DTPicker_Du.MinDate = worksheets.Range("A2")
DTPicker_Du.MaxDate = worksheets.Range("A1000").End(xlUp).Rows

End Sub
Private Sub DTPicker_Au_Change()

Dim x As Range

ListBox1.Value = Format(ListBox1, "yyyy-mm-jj")
ListBox1.Clear

With ListBox1
For Each x In worksheets.Range("A2:A" & Range("A1000").End(xlUp).Row)
If x.Value >= DTPicker_Du.Value And x.Value <= DTPicker_Au.Value Then
.AddItem x(1, 1)
.List(.ListCount - 1, 1) = x(1, 2)
.List(.ListCount - 1, 2) = x(1, 3)
.List(.ListCount - 1, 3) = x(1, 4)
.List(.ListCount - 1, 4) = x(1, 5)
.List(.ListCount - 1, 5) = x(1, 6)
.List(.ListCount - 1, 6) = x(1, 7)
End If
Next x
End With

End Sub


https://www.cjoint.com/?BDxumLgYMFn
A voir également:

5 réponses

Paf
 
Re,

quelques modifications:
avec les checkbox on peut sélectionner tout ou rien; si rien il faut gérer la sortie; si tout, il faut gérer la récupération dans chaque feuille sélectionnée.
j'ai donc remplacé par des optionbutton
dans le change de chaque optionbutton: Call MajForm ce qui évite d'avoir à cliquer quelque part sur la Userform pour déclencher l'action
MajForm est une sub qui remplace la Sub Userform_click() ( à supprimer)
Private Sub MajForm()
Dim x

If OptionButton1.Value = True Then nomfeuille = "RBC"
If OptionButton2.Value = True Then nomfeuille = "Affaire"
If OptionButton3.Value = True Then nomfeuille = "OR"
If OptionButton4.Value = True Then nomfeuille = "Lancy"

LabelInfo.Caption = "Les dates doivent être comprises entre le " _
& Worksheets(nomfeuille).Range("A2").Value & " et le " & Worksheets(nomfeuille).Range("A1000").End(xlUp).Rows & "."

DTPicker_Du.Value = Worksheets(nomfeuille).Range("A2")
DTPicker_Au.Value = Worksheets(nomfeuille).Range("A1000").End(xlUp).Rows

With ListBox1
.Clear
.Value = Format(ListBox1, "yyyy-mm-jj")
.Clear
.ColumnCount = 7
.ColumnWidths = "45 pt;35 pt;70 pt;60 pt;30 pt;55 pt;35pt"
.Clear

For Each x In Worksheets(nomfeuille).Range("A2:A" & Range("A1000").End(xlUp).Row)
    If x.Value >= DTPicker_Du.Value And x.Value <= DTPicker_Au.Value Then
        .AddItem x(1, 1)
        .List(.ListCount - 1, 1) = x(1, 2)
        .List(.ListCount - 1, 2) = x(1, 3)
        .List(.ListCount - 1, 3) = x(1, 4)
        .List(.ListCount - 1, 4) = x(1, 5)
        .List(.ListCount - 1, 5) = x(1, 6)
        .List(.ListCount - 1, 6) = x(1, 7)
    End If
Next x

End With

End Sub

j'ai supprimé les End If reportés en fin de sub qui étaient mal placés au niveau logique ; s'il n'y a qu'une action sur la même ligne que then on peut s'en affranchir.

J'ai déclaré la variable nomfeuille en public pour qu'elle soit visible des différentes sub qui en ont besoin (DTPicker_Au_Change(), DTPicker_Du_Change() ).
Dans ces sub il faut penser à modifier les worksheets.Range .

Par ailleurs il faut vérifier :
que dans les feuilles (RBC, Affaires....) les lignes commencent bien en ligne 2
qu'il n'y ait pas de ligne vide insérée
que les lignes soient dans l'ordre chronologique :

Je pense avoir fais le tour ?

Bonne suite ou à +
1
Paf
 
bonsoir,
sans avoir éplucher le code, je note:

tu ne dois pas utiliser worksheets comme nom de variable puisque c'est un mot réservé VBA .
la syntaxe pour utiliser worksheets est worksheets(index de la feuille) ou worksheets("nom de la feuille") ou worksheets(variable contenant le nom de la feuille)

tu devrais avoir, par exemple,après déclaration de la variable NomFeuille en string:
...
If CheckBox_RBC = True Then
NomFeuille = "RBC"
If CheckBox_Affaire = True Then
NomFeuille = "Affaire"
If CheckBox_or = True Then
NomFeuille = "Or"
If CheckBox_lancy = True Then
NomFeuille = "Lancy"
...
...
DTPicker_Du.Value = worksheets(NomFeuille).Range("A2") 
...


bonne suite
0
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
 
Bonjour

merci pour le tuyau! ça me semble plein de logique.. Je ne comprends pas pourquoi ça ne fonctionne pas?!


Option Explicit

Private Sub Userform_click()
Dim nomfeuille As String

With ListBox1
.ColumnCount = 7
.ColumnWidths = "45 pt;35 pt;70 pt;60 pt;30 pt;55 pt;35pt"
.Clear
If CheckBox_RBC.Value = True Then
nomfeuille = "RBC"
If CheckBox_Affaire.Value = True Then
nomfeuille = "Affaire"
If CheckBox_or.Value = True Then
nomfeuille = "OR"
If CheckBox_lancy.Value = True Then
nomfeuille = "Lancy"

LabelInfo.Caption = " Les dates doivent être comprises entre le ''" _
& worksheets(nomfeuille).Range("A2").Value & "'' et le ''" & worksheets(nomfeuille).Range("A1000").End(xlUp).Rows & "''."

DTPicker_Du.Value = worksheets(nomfeuille).Range("A2")
DTPicker_Au.Value = worksheets(nomfeuille).Range("A1000")
End If
End If
End If
End If
End With
End Sub
Private Sub DTPicker_Du_Change()
Dim nomfeuille As String

If CheckBox_RBC = True Then
nomfeuille = "RBC"
If CheckBox_Affaire = True Then
nomfeuille = "Affaire"
If CheckBox_or = True Then
nomfeuille = "Or"
If CheckBox_lancy = True Then
nomfeuille = "Lancy"

DTPicker_Du.MinDate = worksheets(nomfeuille).Range("A2")
DTPicker_Du.MaxDate = worksheets(nomfeuille).Range("A1000").End(xlUp).Rows
End If
End Sub
Private Sub DTPicker_Au_Change()

Dim x As Range
Dim nomfeuille As String

If CheckBox_RBC = True Then
nomfeuille = "RBC"
If CheckBox_Affaire = True Then
nomfeuille = "Affaire"
If CheckBox_or = True Then
nomfeuille = "Or"
If CheckBox_lancy = True Then
nomfeuille = "Lancy"

ListBox1.Value = Format(ListBox1, "yyyy-mm-jj")
ListBox1.Clear

With ListBox1
For Each x In worksheets(nomfeuille).Range("A2:A" & Range("A1000").End(xlUp).Row)
If x.Value >= DTPicker_Du.Value And x.Value <= DTPicker_Au.Value Then
.AddItem x(1, 1)
.List(.ListCount - 1, 1) = x(1, 2)
.List(.ListCount - 1, 2) = x(1, 3)
.List(.ListCount - 1, 3) = x(1, 4)
.List(.ListCount - 1, 4) = x(1, 5)
.List(.ListCount - 1, 5) = x(1, 6)
.List(.ListCount - 1, 6) = x(1, 7)
End If
Next x
End With
End If
End If
End If
End If
End Sub
Private Sub ListBox1_Change()
Dim i As Byte
Dim cible As Integer
Dim Resultat As Double

cible = ListBox1.ListCount

For i = 1 To cible
Resultat = Resultat + ListBox1.List(i - 1, 4)
Next

TextBox4.Value = Resultat
End Sub

Private Sub CommandButton2_Click()

End

End Sub
0
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
 
Bonjour

encore merci! toutefois je ne vois pas :
dans le change de chaque optionbutton: Call MajForm ce qui évite d'avoir à cliquer quelque part sur la Userform pour déclencher l'action

le change ?? C'est une propriété.. je vois pas ça?

merci à l'avance
Mélanie
0
Paf
 
bonsoir,
je n'ai pas été clair sur ce coup!

chaque objet dispose d'évènements dont change; tu l'as utilisé à plusieurs reprises : Private Sub ListBox1_Change(), Private Sub DTPicker_Au_Change(), Private Sub DTPicker_Du_Change(), et dans ton premier post : Private Sub checkbox_Change()

C'est la même chose pour les Optionbutton:
Private Sub OptionButton4_Change()
    Call MajForm
End Sub

Private Sub OptionButton3_Change()
    Call MajForm
End Sub

Private Sub OptionButton2_Change()
    Call MajForm
End Sub

Private Sub OptionButton1_Change()
    Call MajForm
End Sub


A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
 
Bonsoir!

Un énorme merci! Désolé je suis pas vite vite des fois... je commence alors des fois je cherche trop loin! C'est pas toujours compliqué!

encore merci ça fonctionne à merveille!

Mélanie
0