Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2011, 15h35   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut [Novice] Afficher des données dans plusieurs CheckBox

Bonjour à tous.

Je m'arrache les cheveux avec un problème, j'ai parcouru les tutoriels pendant des heures sans succès.
J'arrive à récupèrer touts les samedis d'une année donnée via un MsgBox.

Mais comment les récupèrer pour les afficher dans plusieurs CheckBox, nomée CheckBox1 à CheckBox53.
Voici le code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  Dim J As Integer, x As Integer, Valeur As Range
  Dim Annee As Integer, Compteur As Integer
 
  On Error GoTo Gestion_Erreur
 
  With Sheets("Prestations")
    .Visible = True
    .Select
    .Cells(1, 1).Select
  End With
 
  Annee = Me.ComboBox1.Value
 
  ' Recherche la première cellule contenant Annee.
  Cells.Find(What:=Annee, After:=ActiveCell, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=True).Select
 
  ' Définir le numéro de ligne de la première cellule contenant Annee.
  x = ActiveCell.Row - 1
 
  ' Boucle sur l'année entière.
  For J = 1 To 365 + IIf((Annee Mod 4 = 0 And Annee Mod 100 <> 0) Or Annee Mod 400 = 0, 1, 0)
    ' Définir la condition pour l'ajout
    If Format(Range("A" & J + x), "dddd") = "samedi" Then ' vérifie une seule condition au lieu de deux
    ' Ajoute les données.
    MsgBox "Première adresse trouvée :  " & ActiveCell.Address & vbCrLf & "Date trouvée :  " & (Range("A" & J + x)) & vbCrLf & "Jour trouvé :  " & Format(Range("A" & J + x), " dddd")
 
   '53 CheckBox nomées de CheckBox1 à CheckBox53
 
    End If
 
 
 
 
  Next J
 Exit Sub
 
Gestion_Erreur:
  If Err.Number = 91 Then
    MsgBox "Cette année n'est pas renseignée !", vbCritical + vbOKOnly, "Erreur"
  End If
Merci à tous de m'avoir lu.
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 15h40   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
bonjour,

et ils sont ou tes checkbox ?

on ne peu pas mettre de checkbox sur un message box ...!
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 16h00   #3
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Bonjour bbil,

Et merci de m'avoir lu et répondu.

Ce MsgBox n'est là que provisoirement.
En fait, j'ai mis un MsgBox uniquement pour avoir la confirmation que le code me donne bien touts les samedis d'une année donnée.
Le MsgBox sera enlevé dès que j'aurais le code pour afficher les données dans les CheckBox.

Merci.
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 16h18   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Ok, mais tes checkbox seront affichées où? dans un UserForm ou sur la feuille elle-même.

Si c'est sur la feuille, tu peux enregistrer une macro où tu ajoutes une checkbox, tu verras ainsi le code nécessaire pour ajouter un checkbox dans une feuille, il te suffira alors de l'intégrer dans ton code.

++

Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 18h15   #5
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Bonsoir, et merci à vous.

Les CheckBox seront affichés dans un UserForm.

Merci.
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 18h18   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
soit un peu plus précis ...
as-tu placé ces checkbox sur ton userform .. dans l'éditeur VB ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 18h35   #7
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Bonsoir,

J'ai 53 CheckBox només "CheckBox1, CheckBox2 .... à CheckBox53)
placés sur l'UserForm nomé : UserForm1

Les CheckBox ne sont pas placé sur la feuille excel, mais bien sur l' UserForm1.

Merci à vous,
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 18h46   #8
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Un code dans ton userForum :

Code :
1
2
3
 
i=1 ' 1 à 53...
Me.Controls("Checkbox" & i ).Value = 1
bbil est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 29/12/2011, 19h22   #9
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Merci bbil,

J'ai testé ton idée mais sans succès.
Ce code affiche le dernier samedi trouvé d'une année dans chaque CheckBox
avec :

Code :
Me.Controls("Checkbox" & i).Caption = i & Range("A" & J + x)
Alors que cela fonctionne bien pour alimenter une ListView avec :

Code :
ListView1.ListItems.Add , , Application.Proper(Format(Range("A" & J + x), " dddd dd mmmm yyyy"))
Merci.
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 19h27   #10
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Un checkbox c'est une case à cocher ... tu veux changer quoi son libellé ?

comment calcule tu ton i ?


il ne faut pas utiliser Range sans présicer la feuille concernée
Code :
Thisworkbook.sheets("Feuil1").range(".....
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 19h40   #11
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Merci bbil,

La feuille est sélectionnée en début de code par :

Code :
1
2
3
4
5
With Sheets("Prestations")
    .Visible = True
    .Select
    .Cells(1, 1).Select
  End With
Comme cité plus haut, cela fonctionne pour afficher les données dans une ListView avec :

Code :
ListView1.ListItems.Add , , Application.Proper(Format(Range("A" & J + x), " dddd dd mmmm yyyy"))
Comment boucler sur les checkBox pour y afficher les données trouvée par

Merci
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 20h04   #12
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par fasedan Voir le message
Merci bbil,

La feuille est sélectionnée en début de code par :
...
Sélectionné une feuille c'est juste bon pour faire un diaporama ...

prolonge ton With jusqu'as la fin de ton code et rajoute un point devant tout tes range et autre cells...


pour renseigner tes check-box tu as déjà une boucle incrémente la valeur de ta variable i à chaque nouveau samedi trouvé...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 20h59   #13
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Merci bbil,

J'ai éssayé, mais cela ne fonctionne pas....

Je m'arrache les cheveux avec ce code........

Encore merci.
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 21h08   #14
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Place le code modifié, ça nous permettra de voir sur quoi tu butes.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 21h32   #15
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Merci à tous pour votre patience.

Je vous met le code entier car je n'y arrive pas.

Le but est d'envoyer dans chaque CheckBox (ici 53) nomée CheckBox1 à CheckBox53, chaque samedi trouvé pour une année donnée.
Les CheckBox se trouvent sur un UserForm

Sur la feuille nomée "Prestations" en ("A1") se trouve les dates et en ("B1") les jours semaines

exemple:

A1 B1
01/01/2011 samedi
02/01/2011 dimanche
03/01/2011 lundi
etc....

Voici le code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Private Sub Btn_Valider_Click()
  Lbl_info.Caption = "Sélectionnez dans la liste les samedis à prester pour l'année " & " " & Format(Now, "yyyy") & "."
  ' Ouvre la feuille ("Prestations"), la rend visible et la selectionne.
  Dim J As Integer, x As Integer, i As Integer, Valeur As Range
  Dim Annee As Integer, Compteur As Integer
 
  On Error GoTo Gestion_Erreur
 
  ' Ouvre la feuille ("Liste_Jours_Feries"), la rend visible et la selectionne.
  With Sheets("Prestations")
    .Visible = True
    .Select
    .Cells(1, 1).Select
  End With
 
  Annee = Me.ComboBox1.Value
 
  ' Recherche la première cellule contenant Annee.
  Cells.Find(What:=Annee, After:=ActiveCell, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=True).Select
 
  ' Définir le numéro de ligne de la première cellule contenant Annee.
  x = ActiveCell.Row - 1
 
  ' Boucle sur l'année entière.
  For J = 1 To 365 + IIf((Annee Mod 4 = 0 And Annee Mod 100 <> 0) Or Annee Mod 400 = 0, 1, 0)
  For i = 1 To 53
 
    ' Définir la condition pour l'ajout des Items
    If Format(Range("A" & J + x), "dddd") = "samedi" Then ' vérifie une seule condition au lieu de deux, plus rapide…
    ' Ajoute les données.
    'MsgBox "Première adresse trouvée :  " & ActiveCell.Address & vbCrLf & "Date trouvée :  " & (Range("A" & J + x)) & vbCrLf & "Jour trouvé :  " & Format(Range("A" & J + x), " dddd")
 
        Me.Controls("Checkbox" & i).Caption = Range("A" & J + x)
 
                   End If
    Next i
  Next J
 
 Exit Sub
 
Gestion_Erreur:
  If Err.Number = 91 Then
    MsgBox "Cette année n'est pas renseignée !", vbCritical + vbOKOnly, "Erreur"
  End If
End Sub
Encore merci à tous.
fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 21h40   #16
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
tu n'as pas besoin de ta boucle for i ... pour incrémenter i le code est :

Code :
1
2
3
 
i = i +1
  Me.Controls("Checkbox" & i).Caption = Sheets("Prestations").Range("A" & J + x)
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2011, 22h10   #17
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Mille merci à tous,

La réponse de bbil m'a sorti de ma dépression.
Cela fonctionne parfaitement.

Encore merci à bbil est à Developpez.com

fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h15.


 
 
 
 
Partenaires

Hébergement Web