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 08/01/2012, 15h55   #1
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
Par défaut UserForm un peu particulier

Bonjour,

je cherche de l'aide sur la création d'un UserForm un peu particulier, et k'avoue n'avoir rien trouvé sur la toile ou sur ce site qui conviennent à mes attentes.

Voici ce que je voudrais réaliser.

Un Userform comportant une checkBox sous forme de liste.

L’intitulé et le nombre des lignes seraient issus directement d'une feuille de mon classeur. Pour l’exemple je dirais comme nom de feuille Feuil1.

Les intitulé des box se situeraient dans la colonne F.

Je voudrais également que se créer automatiquement la liste suivant des critères spécifiques : Début de la boucle à partir de la cellule F12 et fin de la boucle dès qu'elle rencontre le mot (Pour l'exemple) "FIN" situé dans la colonne F mais dans n'importe quelle ligne. De plus il faudrait que cette liste récupère en titre les données issues de la cellule F11

J'aurais donc une colonne telle que :

F11 "LE TITRE"
F12 "LUNDI"
F13 "MARDI"
F14 "MERCREDI"
F15 "JEUDI"
F16 "VENDREDI"
F17 "SAMEDI"
F18 "DIMANCHE"
F19 "LUNDI"
F20 "FIN"

Ce qui me donnera une liste avec case à cocher :

LE TITRE

o LUNDI
o MARDI
o MERCREDI
o JEUDI
o VENDREDI
o SAMEDI
o DIMANCHE
o LUNDI

Le but étant de travailler sur des tableaux qui n'ont pas tous le même nombre de lignes.

Puis suivant si la checkbox et cochée ou non, inscrire le nombre 1 ou 0 dans la colonne A dont la cellule correspondrait à la ligne d'où provienne les informations.

Espérant m'être fait comprendre je me tiens à votre disposition pour tout compléments d'infos.

Merci à tous pour votre aide

PS : Je suis débutant, merci de votre indulgence.

David
Ile de la Réunion
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 16h11   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 921
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 921
Points : 7 241
Points : 7 241
Bonjour,

Tu pourrais faire cela en utilisant une Listbox avec sa propriété ListStyle = 1 (fmListStyleOption => Case a cocher)

Pour charger les données dans la listbox, tu utiliseras la propriété Rowsource
Code :
Listbox1.Rowsource = "Feuil3!F12:F18
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 16h27   #3
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
Bonjour Jérôme,

un grand merci ça marche impec, et c'est simple que je n'en reviens pas

J'ai trouvé comment m’arrêter à la ligne comportant la valeur FIN :

Code :
1
2
3
4
5
6
7
8
Dim x As Range, s As String
s = "FIN"
 
Sheets("Feuil3").Select 'Rajouté car le form se lance sur une autre feuille
 
Set x = Range("F:F").Find(s, , xlValues, xlWhole, , , False)
If Not x Is Nothing Then numligne = x.Row
NumLigneFin = x.Row - 1
En revanche comment procéder pour inscrire un 1 ou un 0 suivant les cases qui sont cochées ?

Merci

David
Ile de la Réunion
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 17h38   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 921
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 921
Points : 7 241
Points : 7 241
Regardes sur ce post tu devrais y trouver la solution

http://www.developpez.net/forums/d11...nt-specifique/
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 18h24   #5
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
Jérôme,

j'ai regardé ton code, tenter de l'adapter à mon besoin, mais sans résultat.

Comment faire cela ?

Merci

David
Ile de la Réunion
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 19h29   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 921
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 921
Points : 7 241
Points : 7 241
Dans ta liste on retrouve 2 fois Lundi. Est ce normal ?

Dans le cas ou c'est normal on ne peut pas faire la recherche de la valeur pour trouver la ligne


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CommandButton1_Click()
 
Dim i As Integer
 
For i = 0 To ListBox1.ListCount - 1
 
    If ListBox1.Selected(i) = True Then
        Range("A" & i + 12).Value = 1
    Else
        Range("A" & i + 12).Value = ""
    End If
 
Next i
 
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 20h06   #7
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
Re,

merci oui c'est impeccable, ça fonctionne. Non le lundi est un exemple, mais je n'ai pas de doublon dans ma colonne.

Par contre quand je clique sur la dernière ligne j'obtient un décalage.

Je m'explique ma dernière ligne se trouve par exemple dans la cellule F250

Si je la coche, je devrais voir s'afficher un 1 dans la ligne A250, or cela s'affiche dans la ligne A251.

En revanche si je coche la première situé en F12 c'est bien la cellule A12 qui est affublée d'un 1.

Pourquoi ?

David
Ile de la Réunion

Bon j'ai déjà trouvé le problème, en fait c'est la ligne F14 qui n'apparait pas dans ma liste et qui donc créée le décallage.

Mais pourquoi cette ligne est masquée ??

Voici mon 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
Private Sub UserForm_Initialize()
 
 
s = "FIN"
 
 
 
Set xli = Range("Feuil3!F:F").Find(s, , xlValues, xlWhole, , , False)
If Not xli Is Nothing Then numligne = xli.Row
NumFin = xli.Row - 1
 
Me.listbox1.ColumnHeads = True
 
listbox1.RowSource = "Feuil3!F11:F" & NumFin
 
'On boucle sur cette liste pour sélectionner les noms déja actifs
For i = 0 To listbox1.ListCount - 1
 
    If InStr(ActiveCell.Value, listbox1.List(i, 0)) > 0 And listbox1.List(i, 0) <> "" Then
        listbox1.Selected(i) = True
    End If
Next i
 
End Sub
Merci
breizhgen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 20h16   #8
Nouveau Membre du Club
 
Inscription : août 2006
Messages : 86
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : août 2006
Messages : 86
Points : 29
Points : 29
J'ai trouvé, l'erreur venait du fait que je demandais une ligne d'entête et que cette ligne en fait était fusionner sur deux lignes !!

La ligne qui faisait le décallage se trouvait être la ligne fusionnée avec le titre !

Pb résolu et chapeau bas à toi Jérôme pour ton coup de main

Merci Encore

David
Ile de la Réunion
breizhgen 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 08h56.


 
 
 
 
Partenaires

Hébergement Web