Liste de Validation en VBA

PhobosPalace

XLDnaute Nouveau
Bonjour à tous !
Je créer ce sujet car je suis coincé avec un petit bout de code :
J'essaie de créer une liste de validation. Ce qu'il faut savoir sur cette liste de validation que j'essaie de créer (dans une feuille "étape") c'est que les termes de cette liste viennent d'une plage dans une autre feuille ("Capacité"). Les termes dans cette plage sont susceptibles de changer et la taille de la plage (sur la colonne A) est paramétrée par une variable appelé MachineLimit. Voilà ce que ça donne pour le moment :

With Worksheets("étapes").Range("D7").Validation
.Delete
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Formula1:="=" & Sheets("Capacité").Range("A5:A" & MachineLimit).Address
End With


J'ai une erreur pour la ligne de Formula1 :
1004 : erreur définie par l'application ou par l'objet
Pourriez-vous m'aider s'il vous plait ?
 

Modeste

XLDnaute Barbatruc
Re : Liste de Validation en VBA

Bonsoir PhobosPalace et bienvenue!

Sans fichier, difficile d'être certain de la solution proposée. Si ta variable MachineLimit correspond bien à un n° (de ligne) ... Peut-être en rajoutant le nom de la feuille, comme ci-dessous:
Formula1:="=Capacité!" & Sheets("Capacité").Range("A5:A" & MachineLimit).Address
 

Gorfael

XLDnaute Barbatruc
Re : Liste de Validation en VBA

Salut Modeste et le forum
Effectivement, avec autan d'infos...
Par contre, je ne sais pas si ça fonctionne une plage d'une autre feuille. Personnellement je passe par une plage nommée.
A+
 

Modeste

XLDnaute Barbatruc
Re : Liste de Validation en VBA

Salut Gorfael,

Sous Excel 2010, une validation avec sa source dans une autre feuille, c'est apparemment devenu possible (et sans plage nommée) ... mais pas avec Excel 2000 :p Il faudrait sans doute, dès lors utiliser quelque chose comme "Formula1:="=leNomDeLaPlage""
 

JCGL

XLDnaute Barbatruc
Re : Liste de Validation en VBA

Bonjour à tous,

Voici un exemple à adapter :

VB:
Option Explicit
Sub Liste()
    ActiveWorkbook.Names.Add Name:="Liste", RefersToR1C1:="=Feuil2!R1C1:R5C1"
    Sheets("Feuil1").Select
    With Range("H1:H20000").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Liste"
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
End Sub

A + à tous
 

PhobosPalace

XLDnaute Nouveau
Re : Liste de Validation en VBA

Merci à vous tous, j'ai pu régler mon problème grâce à ce code :

With Sheets("Capacité")
.Activate
.Range("A5:A" & MachineLimit + 4).Select
ActiveWorkbook.Names.Add Name:="LaPlage", RefersTo:="=" & "Capacité!" & Selection.Address
End With

Dim Inter As Variant

For NombreEtape = 0 To 20
Inter = 7 + NombreEtape * 25
With Sheets("étapes").Range("D" & Inter).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=LaPlage"
End With
Next NombreEtape

La boucle for et la variable Inter sont là pour me permettre de créer plusieurs listes de validation équidistantes de 25 cellules sachant que la première cellule est D7

Néanmoins j'aurais une question pour vous (et j'en aurais surement d'autre encore :D) :
Est-il possible de déclencher une macro à partir du choix fait dans une liste de validation (et donc sans passer par un bouton) ? Si oui, comment procéder (en ce moment je cherche comment faire) ?
Merci d'avance.
 

JCGL

XLDnaute Barbatruc
Re : Liste de Validation en VBA

Bonjour à tous,

Je pense qu'il faut utiliser _SelectionChage et mettre le Target sur l'adresse de la cellule qui contient la liste de validation et appeler la macro.

A+ à tous
 

PhobosPalace

XLDnaute Nouveau
Re : Liste de Validation en VBA

Merci à toi JCGL mais pourrais-tu développer ? Je tiens à préciser que je suis novice et là pour le coup je ne comprends pas ^-^' (je me suis formé sur SdZ)
D'ailleurs j'en profite pour vous expliquer ce que j'essaye de faire depuis le début. Déjà je suis en stage et on me demande de faire un programme avec excel qui devra créer automatiquement des gammes de fabrication (c'est-à-dire des documents de fabrication qui expliquent comment fabriquer une pièce par exemple)

Vous trouverez le fichier à l'adresse suivante (j'ai volontairement laisser que deux feuilles :p) :

Free - Envoyez vos documents

1) D'abord sont renseignées dans un tableau (feuille Capacité) les machines de l'atelier et les tâches qu'elles doivent faire
2) 1 = La machine peut faire la tâche
0 = La machine ne peut pas faire la tâche
3)On appuis sur le bouton "Mettre à jour" puis Le programme indique sur option (0 ou 1) le nombre de machines, le nombre d'opérations et ce que peut faire chaque machine puis il créer les listes de validation dans la feuille étape (sur la case D7, et en se décalant de 25 cellules vers le bas à chaque fois).

(À partir de là ça devient compliqué je pense...)
4)En fonction du choix de machines dans la liste de validation, le programme retrouve ce que peut faire la machine choisit dans le tableau dans la feuille Capacité et pour chaque opération possible le programme se décale
dans la partie Opération en orange et créer une case à cocher pour chaque opération possible.

5)

Si la case de l'opération est cochée :
le temps correspondant à l'opération s'ajoute dans une cellule de la partie TEMPS
Si la case de l'opération est décochée :
le temps correspondant à l'opération et qui est ajoutée une cellule de la partie TEMPS se retire
(le temps se trouve dans une cellule sur une feuille que vous n'avez dans le fichier que je vous donne...)

6) le reste, j'y viendrai quand j'y serait (avec un autre fichier qui contiendra probablement plus de feuille...)

Déjà s'occuper de la partie 4), c'est là où j'en suis. Je propose qu'on y aille pas à pas. Il faut d'abord que je sache comment fonctionne ce que tu m'as dit JCGL (avec un exemple ?:eek:)
Un énorme Merci à tous ceux et celles qui voudront bien m'aider dans cette (énorme) tâche (que l'on m'impose...:()
 

JCGL

XLDnaute Barbatruc
Re : Liste de Validation en VBA

Bonjour à tous,

Pas compris ton # 10...

Ton fichier en retour :
  • Tu choisis une machine
  • Seules les Opérations possibles apparaissent
  • Tu mets un X (liste de validation) pour valider
  • On verra pour les temps si cela convient
A+ à tous
 

Pièces jointes

  • JC Classeur2.xls
    77.5 KB · Affichages: 65
  • JC Classeur2.xls
    77.5 KB · Affichages: 76
  • JC Classeur2.xls
    77.5 KB · Affichages: 70

PhobosPalace

XLDnaute Nouveau
Re : Liste de Validation en VBA

Votre solution est excellente, mais il y a des hics :
Il faut que tout soit automatisé pour les techniciens qui vont utiliser ce que l'on va créer
Jusque là ça va puisque tout ce que vous m'avez fait est entièrement justement automatisé. Seulement quand les techniciens vont vouloir ajouter des machines et des opérations dans la feuille Capacité (eh oui, l'entreprise va acquérir d'autres machines qui feront d'autres opérations...) cela impliquera qu'ils devront faire exactement ce que vous avez fait pour les ajouter et donc manipulez des fonctions chose qu'ils ne savent pas forcément faire. D'où l'intéret que tout soit automatisé. Et pour cela nous devons passer par du VBA et non des fonctions dans des cellules. Évitons-donc de faire des fonctions dans des cellules et essayons de faire que des programmes VBA autonomes et gardons cela à l'esprit.

Entre-temps j'ai essayer de faire une solution similaire en VBA :

Sub ScanOp()

Dim Inter4 As Variant ' Machine choisie
Dim Inter5 As Variant ' Opération trouvée
Dim Inter6 As Variant ' Nombre Opération trouvée

Inter3 = 0

If ActiveCell <> "" Then

Inter4 = ActiveCell.Value

With Sheets("Capacité")
For CompteurV = 4 To MachineLimit + 4
If Cells(CompteurV, 1) = Inter4 Then
For CompteurH = 3 To OpLimit + 3
If Cells(CompteurV, CompteurH) = 1 Then
Inter6 = Inter3 + 1
Inter5 = Cells(4, CompteurH)
With Sheets("étape")
If Inter6 = 1 Then
ActiveCell.Offset(-1, 4).Select
End If
ActiveCell.Offset(1, 0).Select
.Value = Inter2

End With
End If
Next CompteurH
End If
Next CompteurV
End With

Else
MsgBox "Cliquez d'abord sur une cellule de liste où une machine est choisie."

End If

End Sub

Malheureusement ça ne fonctionne pas...
J'ai imbriquer dans ce code des boucles For et des conditions If. Voici ce que j'ai essayer de faire :
Le programme test si la cellule active est vide ou pas, si elle est vide un message apparait
==> sinon la chaîne de caractère de la Machine de la liste de Validation de la cellule choisie est rangée dans la variable Inter4
==> ça continue dans la feuille Capacité avec une boucle qui parcourt la liste des machines et retrouve la machine choisie
==> Le programme s'arrête à la ligne de la machine choisie
==> Le programme cherche les 1 dans la ligne correspondante
==> quand il trouve un 1, il enregistre dans Inter5 le Nom de la machine
==> Ensuite il met les opérations dans la feuille étape

J'ai réuploder dans Autre le fichier excel sous le nom Prog2 gamme de fab.
A+
Edit : j'ai pas compris ce que vous vouliez dire :
Pas compris ton # 10...
C'est quoi "# 10" ?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
313 020
Messages
2 094 433
Membres
106 024
dernier inscrit
Imado