combobox et userform

Emmanuelle95

XLDnaute Junior
Bonjour à tous,

Bon j'ai de nouveau un souci.
J'ai un fichier utilisateur que voici: http://cjoint.com/?eupAIcYir5

Toutes les cellules en jaune devront être renseignées.

Je m'intéresse pour l'instant uniquement qu'à la partie "choix des déblais".
Sous la partie type, je cherche à créer des listes déroulantes.
Dans ces listes déroulantes devra figurer tous les noms des feuilles de mon classeur Décharge. http://cjoint.com/?eupEz61NmK
Or je veux que cela puisse être fait où que soit mon classeur décharge, soit en chemin relatif.

De plus dans mon classeur décharge, certaines feuilles comme "bois", par exemple, ont des sous catégories (colonne A): traité ou naturel.
c'est pour ça que dans mon fichier utilisateur, j'ai laissé une colonne vide à côté de "type". En effet, je voudrais que quand on choisit un type de déblais, s'il y a rien dans la colonne A, ça s'arrête et on passe ensuite à la saisie de la quantité, du rendement.

Mais par contre s'il y a une sous-catégorie dans la colonne A de la feuille choisie, il faudrait demander à l'utilisateur s'il veut donner une sous-catégorie. si NON, on passe à la saisie de la quantité, du rendement.
si OUI, il pourra choisir entre bois traité ou naturel pour l'exemple.


Le but final est que pour chaque déblais choisi, il copie les adresses des décharges pour aller les recoller dans un autre classeur.



Je ne suis pas sur que ce soit très clair. Alors demandez moi si vous ne comprenez pas.


Merci d'avance à ceux qui pourraient m'aider.
 

youky(BJ)

XLDnaute Barbatruc
Re : combobox et userform

Bonjour Emmanuelle,
Il est Impératif d'enregistrer ce fichier avant d'activer les macros.
De plus il doit être dans le même répertoire que Decharge.xls !!! sinon buggg.
Je te laisse tester,je charge la feuil2 dés l'ouverture et les listes de validations se font selon le choix.
Bruno
 

Pièces jointes

  • utilisateuressai.zip
    18.6 KB · Affichages: 45
  • utilisateuressai.zip
    18.6 KB · Affichages: 45
  • utilisateuressai.zip
    18.6 KB · Affichages: 43

youky(BJ)

XLDnaute Barbatruc
Re : combobox et userform

Re,
Oups j'avais mis un point virgule au lieu d'une virgule pour créer les listes
Les listes s'ouvrent direct si besoin dans ce nouveau fichier.
Tenir compte des remarques de mon précédent message.
Bruno
 

Pièces jointes

  • utilisateuressai.zip
    19.6 KB · Affichages: 57
  • utilisateuressai.zip
    19.6 KB · Affichages: 55
  • utilisateuressai.zip
    19.6 KB · Affichages: 61

Emmanuelle95

XLDnaute Junior
Re : combobox et userform

je l'ai ai mis dans le même dossier. Effectivement quand je me mets dans la première cellule sous type, j'ai une liste déroulante qui apparaît. mais ça fait rien d'autre.

j'ai essayé de lancer la macro et bug: Set Wb = GetObject(ThisWorkbook.Path & "\Decharge.xls") était surligné
 

Emmanuelle95

XLDnaute Junior
Re : combobox et userform

bonjour,

je suis en train de regarder ce que tu m'as passé hier et étant débutante, j'ai plusieurs questions à te poser:

1) je ne comprends pas bien le ":i=2" de
Code:
Feuil2.Cells(k, 1) = .Name: i = 2

2)
Code:
If Application.CountA(.[A1:A100]) > 0 Then
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In .Range("A2", .[A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then
MonDico.Add c.Value, c.Value
Feuil2.Cells(k, i) = c.Value: i = i + 1

cette partie te permet de regarder s'il y a quelque chose dans la colonne A du classeur décharge et si c'est le cas de le coller sur la feuille 2 du classeur utilisateur. c'est bien ça?
 

youky(BJ)

XLDnaute Barbatruc
Re : combobox et userform

Salut bien,

1)Le double points aprés Name évite un retour à la ligne et je dois commencer avec une variable "i" à 2 qui indique le N° de colonne
On peux mettre
Feuil2.Cells(k, 1) = .Name
i = 2

2)tu as bien compris c'est ça en évitant les doublons

3) J'ai oublié de dire que j'ai créé une liste "myliste" en insertion/Nom/Définir et mis la formule =Decaler..... la liste de la col A
4)J'utilise la feuil2 qui est vidée et réemplie à l'ouverture.
Dans mon code j'utilise Feuil2. ceci est le codeName de la feuille et non pas le nom donné à l'onglet tu peux voir dans la fenetre projet en haut à gauche de VBA.
C'est plus facile comme cela car tu peux renommer cet onglet sans avoir de bug, tu peux masquer Feuil2 sans PB.
Bonne suite...
Bruno
 

Emmanuelle95

XLDnaute Junior
Re : combobox et userform

désolée de t'embêter mais j'ai encore d'autres questions:

je comprends pas du tout cette partie du code:
Code:
If Target.Count > 1 Then Exit Sub
Target.Offset(0, 1).Validation.Delete

et en fait ni toute cette partie:
Code:
tx = tx & "," & Feuil2.Cells(lig, k)
Next
If tx = "" Then Target.Offset(0, 2).Select: Exit Sub
  With Target.Offset(0, 1).Validation
        '.Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Right(tx, Len(tx) - 1) '"aaa;zzz"
       ' .IgnoreBlank = True
       ' .InCellDropdown = True
       ' .InputTitle = ""
       ' .ErrorTitle = ""
       ' .InputMessage = ""
       ' .ErrorMessage = ""
       ' .ShowInput = True
       ' .ShowError = True
    End With
    Target.Offset(0, 1).Select: SendKeys "%{UP}"
 

youky(BJ)

XLDnaute Barbatruc
Re : combobox et userform

Hihi!!!
Target est la cellule selectionnée.
Target.count >indique le nombre de cellules selectionnées
Target.Offset(0, 1). >on se décale de 1 cellule à droite et je supprime la validation

2)tx sera la liste de col B
si tx est vide je selectionne direct la col C avec offset et on quitte avec exit sub
sinon on passe à la suite quiest donc de créer la liste validation et lui indique la variable tx comme liste.
je me décale avec offset et sendkeys simule l'appui de touches au clavier (ceci pour faire ouvrir la liste c'est plus pratique)
Toutes les lignes qui commencent avec une apostrophe peuvent être supprimées dans le code.
Bruno
 

Emmanuelle95

XLDnaute Junior
Re : combobox et userform

merci j'y vois déjà un peu plus clair.

J'ai essayé de réécrire ta macro. Mais je ne vois pas où tu as défini "myListe".
Je l'ai retrouvé dans Données/validation/Liste/source.

Autre question: est-ce que dans une liste déroulante on peut retrouver des noms de dossiers (comme là on retrouve des noms de feuilles)?

parce que j'ai 5 dossiers: produits béton, produits bitumineux, matériaux naturels, matériaux recyclés et matériaux traités et à l'intérieur j'ai plusieurs classeurs EXCEL.
Je voulais savoir si c'était possible?
 

youky(BJ)

XLDnaute Barbatruc
Re : combobox et userform

Re,
je n'ai jamais étudié ce cas là! je vais regarder mais ce sera plus long.
Tes 5 dossiers que j'appel répertoires sont' ils eux même dans un autre dossier
Il serait bon de connaitre le chemin de ce dossier.
Pour le connaitre ouvre mon fichier et affiche la fenetre exécution et copie cette ligne dedans mets le curseur à la fin et tape la touche enter ...indique moi le chemin
?thisworkbook.path
Bruno
 

Emmanuelle95

XLDnaute Junior
Re : combobox et userform

mes 5 dossiers sont dans un dossier remblais

le chemin à partir de ton fichier c'est: C:\Documents and Settings\florian.deparnay\Bureau\Programme

mais moi je veux que ça reste en chemin relatif en fait.
après au pire dans mon fichier utilisateur, au lieu de mettre "choix de remblais", je pourrais détailler plus:
"choix de produits bitumineux"
"choix de produits béton"
...

par contre je vois toujours pas comment tu fais ton lien entre la liste déroulante et la macro
 

Emmanuelle95

XLDnaute Junior
Re : combobox et userform

en plus, normalement cette liste déroulante doit me permettre d'aller copier la liste des décharges associés dans un autre fichier: Calculdedistanceroutiere.

J'ai 2 cas:
1) je choisis un type de déblais et pas de sous-catégorie, il faudrait copier toutes les adresses (colonne "C", classeur decharge) correspondant à ce déblais dans un autre classeur Calculdedistanceroutiere


2)je choisis un type de déblais et une sous-catégorie, il faudrait copier les adresses (classeur Decharge, feuille correspondante au type, cellules colonne A correpondant à la sous-catégorie) associés.


Je me suis lancée dans un morceau de code, mais je sèche totalement:

Code:
Sub copier_adresse_décharge()
Dim Wb As Workbook, Cdr As Workbook
Set Wb = GetObject(ThisWorkbook.Path & "\Decharge.xls")
Set Cdr = GetObject(ThisWorkbook.Path & "\Calculdedistanceroutiere.xls")
If Sheets("Matériaux").Range("A11:A18") = "" Then Exit Sub 'si aucun déblais n'est choisi, c'est fini


'cas 1: type de déblais sélectionné mais pas de sous-catégorie
's'il y a un type de déblais sélectionné et pas de sous-catégorie alors...
If Range("A11").Value = True And Range("B11").Value = False Then  'après je vois pas trop comment l'écrire et il faut que ce soit pour de A11 à A18

Wb.Sheets(k).Open 'on ouvre l'onglet correspondant dans le classeur Decharge
Range("C2", .[C65536].End(xlUp)).Select
Selection.Copy 'on copie les adresses

Cdr.Sheets("Feuil1").Open 'on ouvre le classeur Calculdedistanceroutiere, la feuille Itinéraire
ActiveSheet.Range("B3").Select
ActiveSheet.Paste 'on colle les adresses en colonne "B"

Wb.Sheets(k).Open 'on ouvre l'onglet correspondant dans le classeur Decharge
Range("B2", .[B65536].End(xlUp)).Select
Selection.Copy 'on copie les noms des décharges

Cdr.Sheets("Feuil1").Open 'on ouvre le classeur Calculdedistanceroutiere, la feuille Itinéraire
ActiveSheet.Range("I3").Select
ActiveSheet.Paste 'on colle les noms des décharges en colonne "I"

Wb.Sheets(k).Open 'on ouvre l'onglet correspondant dans le classeur Decharge
Range("E2", .[E65536].End(xlUp)).Select
Selection.Copy 'on copie les prix des matériaux

Cdr.Sheets("Feuil1").Open 'on ouvre le classeur Calculdedistanceroutiere, la feuille Itinéraire
ActiveSheet.Range("J3").Select
ActiveSheet.Paste 'on colle les prix des matériaux en colonne "J"

Wb.Sheets(k).Open 'on ouvre l'onglet correspondant dans le classeur Decharge
Range("F2", .[F65536].End(xlUp)).Select
Selection.Copy 'on copie les unités

Cdr.Sheets("Feuil1").Open 'on ouvre le classeur Calculdedistanceroutiere, la feuille Itinéraire
ActiveSheet.Range("K3").Select
ActiveSheet.Paste 'on colle les unités en colonne "K"


Sheets("Matériaux").Open
Range("B3").Select
Selection.Copy 'on copie l'adresse du chantier
Cdr.Sheets("Feuil1").Open 'on ouvre le classeur Calculdedistanceroutiere, la feuille Itinéraire
ActiveSheet.Range("D3").Select
ActiveSheet.Paste 'on copie l'adresse du chantier en colonne "D" mais comment dire qu'il faut la coller autant de fois qu'il y a d'adresse en face?

End If


'cas 2: type de déblais sélectionné et sous-catégorie sélectionnée
If Range("A11").Value = True And Range("B11").Value = False Then

Wb.Sheets(k).Open 'on ouvre l'onglet correspondant dans le classeur Decharge

'on copie uniquement les données correspondant à la sous-catégorie sélectionnée




    



End Sub


si quelqu'un avait une idée, elle serait plus que la bienvenue
 

Discussions similaires

Réponses
5
Affichages
343
Réponses
28
Affichages
1 K

Statistiques des forums

Discussions
312 793
Messages
2 092 154
Membres
105 241
dernier inscrit
Mixlsm