Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

combobox et userform

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
Re : combobox et userform

Re,
je te laisse tester car je suis obligé de faire au pif!!!
Sans pouvoir tester...........
De plus je n'ai fait qu'une partie demandée.
Bruno

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 Application.CountA(Sheets("Matériaux").Range("A11:A18")) = 0 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...
'on va boucler de A11:A18
For lig = 11 To 18
onglet = Range("A" & lig)
If onglet = "" Then GoTo saute

Wb.Sheets(onglet).Range("C2", [C65536].End(xlUp)).Copy _
Cdr.Sheets("Feuil1").[B3] 'on colle les adresses en colonne "B"

If Range("B" & lig) <> "" Then _
Wb.Sheets(onglet).Range("B2", [B65536].End(xlUp)).Copy _
Cdr.Sheets("Feuil1").Range("I3") 'on colle les noms des décharges en colonne "I"
'bas de la boucle
saute:
Next ' on reboucle
''''''''''''''''''''''''''''''
'pour la suite je suis largué'
''''''''''''''''''''''''''''''
End Sub
 
Re : combobox et userform

bonjour,

merci pour ce morceau de code.

En fait, ce qu'il y a c'est que dans mon choix de déblais, j'ai plusieurs choix.

1) je choisis un type de déblais par exemple "Amiante-ciment". Pour ce choix, je n'ai pas de sous-catégorie proposée (seconde liste déroulante en "B").
Donc je vais copier toutes les adresses de l'onglet correspondant dans Decharge.

2) je choisis un type de déblais comme "bois". Pour ce cas, j'ai le choix entre 2 sous catégorie "bois naturel" ou "bois traité". Si je choisis l'une des deux, je ne vais copier dans l'onglet "bois" que les adresses correspondantes à ma sous-catégorie

3) je choisis un type de déblais comme "bois". De même, on me propose les 2 sous-catégories. Or moi, je ne sais pas quel est le type de bois donc je veux rester le plus général possible. Je ne sélectionne aucune sous-catégorie. Donc toutes les adresses de l'onglet bois devront être copier.


En gros, c'est ça le truc.


Par contre, je te redemande encore une fois. Je ne vois toujours pas comment tu fais le lien entre ta macro et la liste déroulante dans Données/Validation/Liste/Source. Même si j'ai défini le nom "myListe".

merci
 
Re : combobox et userform

Bonjour,
pour la derniere question...
Avec myliste j'ai mis la formule =decaler....pour réactualiser la col A
A l'ouverture je remplis Feuil2 donc myliste est à jour.
De A11:A18 j'ai mis une liste validation avec =myliste
Dans l'événement Change de Matériaux donc si une cellule de A11:A18 change la macro cherche la ligne en feuil2, regarde si à droite il y a des noms, je les place dans la variable tx et supprime et refait une validation avec comme liste ma variable tx en col B
J'ai pigé à peu prés ta demande qui n'est pas évidente, je regarde tout ça...
Soit patiente car c'est pas simple!
Bruno
 
Re : combobox et userform

effectivement j'avais pas vu la formule que tu avais rentré. Bon ça marche toujours pas aussi bien que ton fichier mais c'est déjà mieux.

effectivement je sais que c'est pas simple et je suis un peu perdue dans tout ça.

j'ai testé le morceau de code que tu m'a passé pour la copie des adresses.

Si je le laisse tel quel, il bug et me met "next sans for".
alors j'ai rajouté un "end if" au-dessus (sans grande conviction). Mais il bug encore en me mettant error 1004
 
Re : combobox et userform

Voici la macro, testée et qui fonctionne tout comme tu voulais.
Bruno
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 Application.CountA(Sheets("Matériaux").Range("A11:A18")) = 0 Then Exit Sub 'si aucun déblais n'est choisi, c'est fini
i = 3
For lig = 11 To 18
onglet = Range("A" & lig)
If onglet = "" Then GoTo saute
For k = 2 To Wb.Sheets(onglet).[C65536].End(xlUp).Row
If Cells(lig, 2) = "" Or Wb.Sheets(onglet).Cells(k, 1) = Range("B" & lig) Then
Cdr.Sheets("Feuil1").Cells(i, 2).Value = _
Wb.Sheets(onglet).Cells(k, 3).Value
Cdr.Sheets("Feuil1").Cells(i, 9).Value = _
Wb.Sheets(onglet).Cells(k, 2).Value
Cdr.Sheets("Feuil1").Cells(i, 10).Value = _
Wb.Sheets(onglet).Cells(k, 5).Value
Cdr.Sheets("Feuil1").Cells(i, 11).Value = _
Wb.Sheets(onglet).Cells(k, 6).Value
i = i + 1
End If
Next
saute:
Next
Wb.Close
Cdr.Sheets("Feuil1").Range("D3:D" & i - 1).Value = [B3]
Windows("calculdedistanceroutiere.xls").Visible = True
Cdr.Close
End Sub
 
Re : combobox et userform

merci encore.

j'ai voulu testé la macro. je l'ai collé dans module 1 après la macro onglet.

j'ai fait le choix "bois" et sans prendre de catégorie. Mais ça a buggé: ça met erreur d'exécution 9: l'indice n'appartient pas à la sélection.
Code:
Cdr.Sheets("Feuil1").Cells(i, 2).Value = _
Wb.Sheets(onglet).Cells(k, 3).Value
est surlignée
 
Re : combobox et userform

Pour ma part j'ai la facheuse habitude de pas déclarer mes variables.
Et ça tourne à merveille...
Donc si tu as mis Option explicit en haut du module1 soit déclare toutes les variables
ou supprime la ligne pour faire ton essai.
Les fichiers Decharge.xls et calculdedistance.xls sont' ils bien présents dans le répertoire.
Attention aussi à l'ortographe.
Bruno

cette nouvelle macro est identique mais écrit les chantiers les uns aprés les autres en calculdedistance
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 Application.CountA(Sheets("Matériaux").Range("A11:A18")) = 0 Then Exit Sub 'si aucun déblais n'est choisi, c'est fini
i = Cdr.Sheets("Feuil1").[B65536].End(3).Row + 1
If i < 3 Then i = 3
deb = i
For lig = 11 To 18
onglet = Range("A" & lig)
If onglet = "" Then GoTo saute
For k = 2 To Wb.Sheets(onglet).[C65536].End(xlUp).Row
If Cells(lig, 2) = "" Or Wb.Sheets(onglet).Cells(k, 1) = Range("B" & lig) Then
Cdr.Sheets("Feuil1").Cells(i, 2).Value = _
Wb.Sheets(onglet).Cells(k, 3).Value
Cdr.Sheets("Feuil1").Cells(i, 9).Value = _
Wb.Sheets(onglet).Cells(k, 2).Value
Cdr.Sheets("Feuil1").Cells(i, 10).Value = _
Wb.Sheets(onglet).Cells(k, 5).Value
Cdr.Sheets("Feuil1").Cells(i, 11).Value = _
Wb.Sheets(onglet).Cells(k, 6).Value
i = i + 1
End If
Next
saute:
Next
Wb.Close
Cdr.Sheets("Feuil1").Range("D" & deb & ":D" & i - 1).Value = [B3]
Windows("calculdedistanceroutiere.xls").Visible = True
Cdr.Close
End Sub
 
Re : combobox et userform

Non j'ai pas mis Option Explicit pourtant.
Tous les fichiers sont dans le même dossier.

j'ai copié la nouvelle macro dans module 1

Tu choisis bien un type de déblais et après tu lances la macro?
 
Re : combobox et userform

Dans le nom du fichier
Calculdedistanceroutiere.xls
verifie bien si majuscule ou pas au début.
Je suis sur excel2007 mais en 2003 pas de PB en principe.
Voir aussi... cela copie en onglet "Feuil1" existe t'elle bien ou porte t'elle un autre nom.
Bruno
 
Re : combobox et userform

bon beh finalement ça a marché. Apparemment le problème venait du nom de la feuille. J'ai remplacé "Feuil1" par "Itinéraire".


Petites questions: c'est obligé que ça ouvre le fichier Calculdedistanceroutire et me demande si je veux enregistrer?

Est-ce qu'on peut lancer une macro à partir d'une autre?
 
Re : combobox et userform

Il suffit de l'enregistrer avant de le fermer
comme ceci..
Windows("calculdedistanceroutiere.xls").Visible = True
Cdr.Save
Cdr.Close

pour appeler une macro depuis une autre macro rien de plus facile, il suffit d'indiquer son nom , exemple
Sub fermeture()
'blabla
copier_adresse_décharge
application.quit
End sub

Bruno
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
312
Réponses
5
Affichages
288
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…