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 -
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
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:
- Choisir feuille via checkbox (variable sheets
- Bruler feuille de laurier - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Feuille a5 - Guide
- Comment supprimer une feuille sur word - Guide
- Verrouiller cellule excel sans verrouiller la feuille - Guide
5 réponses
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)
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 à +
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 à +
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:
bonne suite
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
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
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
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
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
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:
A+
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question