Plusieurs problèmes
bonjour
voila j'ai plusieurs problèmes a résoudre:
1)dans Ajout d'un entretien je souhaiterais faire des déroulés des 3case "id scada, localisation, désignation" en fonction du tableau2.
2)dans "description de l'intervention" et "pièces et référence installées" seulement une ligne s'intègre dans la case je voudrais plusieurs ligne
3) quand je clique sur "ajout d'un entretien" l'usiforme ne garde pas toujours ca grande taille, pour le remettre en normale il faut que je retourne dans l'onglet développeur et que je le ragrandisse.
je suis débutant et ce que j'ai fait fonctionne avec surement des facon plus simple ...., merci d'etre cool
Salut,
Quelle est la version de ton Excel ?
Microsoft 365 Apps for business
Re,
Donc vire toutes les références de RowSource des Listes déroulantes.
Et dans l'initialisation du formulaire tu rempli les listes.
Private Sub UserForm_Initialize()
Cbx_id_scada.List = Evaluate("=SORT(UNIQUE(Tableau2[ID Scada]))")
Cbx_localisation.List = Evaluate("=SORT(UNIQUE(Tableau2[Localisation]))")
Cbx_designation.List = Evaluate("=SORT(UNIQUE(Tableau2[Désignation]))")
Cbx_intervenant.List = Range("Tableau3").Value
Cbx_intervenant_2.List = Range("Tableau3").Value
End SubCbx_Date n'a pas lieu d'être remplace la par une zone de texte: et tu ajoute cette ligne dans l'initialisation:
Tbx_Date = Format(Date, "Short Date")
' // Et pour les heures
Tbx_Heure.Value = Format(Now, "Short time")2)dans "description de l'intervention" et "pièces et référence installées" seulement une ligne s'intègre dans la case je voudrais plusieurs ligne
Pas compris ou est le bug ?
merci jean-paul
par contre si je choisi dans ID scada "A4.1.1" j'aimerai que automatiquement ca recherche les possibilité des autres case et ca remplisse automatiquement les 2 autre cases si une seul option, si je choisi dans localisation "PR1" ca me propose ce qui reste de lier via le tableau. désolé si je suis pas très claire
Re,
Tu dois faire des modifications pour cela.
Dans le code du formulaire tu ajoutes cette fonction :
'@Description "Récupère l'ensemble des entrées des Zone de liste."
Private Function GetChoix(controlName As String) As String
With Me.Controls(controlName)
If .ListCount > -1 Then
Dim counter As Long
For counter = LBound(.List) To UBound(.List)
Dim tempString As String
' // Sur une seule ligne (Préféré)
tempString = tempString & .List(counter) & "; "
' // Sur plusieurs lignes
'tempString = tempString & .List(counter) & Chr(13)
Next
' // Sur une seule ligne (Préféré)
If Right$(tempString, 2) = "; " Then tempString = Left$(tempString, Len(tempString) - 2)
' // Sur plusieurs lignes
'If Right$(tempString, 1) = Chr(13) Then tempString = Left$(tempString, Len(tempString) - 1)
End If
End With
GetChoix = tempString
End FunctionPus tu modifie le code du bouton transfert comme ceci:
'procedure d'ajout a la base
Private Sub transfert_Click()
Message = vbnulstring
If Me.Cbx_id_scada = vbnulstring Then
Message = Message & Chr(10) & "Veuillez entrer un ID"
End If
If Me.Cbx_localisation = vbnulstring Then
Message = Message & Chr(10) & "Veuillez entrer une localisation"
End If
If Me.Cbx_designation = vbnulstring Then
Message = Message & Chr(10) & "Veuillez entrer une designation"
End If
If Me.Cbx_Date = vbnulstring Then
Message = Message & Chr(10) & "Veuillez entrer la Date d'intervention"
End If
If Me.Tbx_heure = vbnulstring Then
Message = Message & Chr(10) & "Veuillez entrer le nombre d'heure de la machine"
End If
If Me.Cbx_intervenant = vbnulstring Then
Message = Message & Chr(10) & "Veuillez entrer le nom de l'intervenant"
End If
If Me.choixev.ListCount = 0 Then
Message = Message & Chr(10) & "Veuillez entrer les interventions effectué"
End If
If Me.Tbx_heure_intervention = vbnulstring Or Not IsDate(Me.Tbx_heure_intervention) Then
Message = Message & Chr(10) & "Veuillez entrer le temps total d'intervention au format date ex: 10:15"
End If
If Me.choixev_pieces.ListCount = 0 Then
Message = Message & Chr(10) & "Veuillez entrer les pieces instalé"
End If
If Message <> vbnulstring Then
MsgBox Message
Exit Sub
End If
Dim n As Long
Dim itemRow As Excel.ListRow
Set itemlistrow = Range("Tableau1").ListObject.ListRows.Add
With itemlistrow
.Range(.Parent.ListColumns("id_scada").Index).Value = Cbx_id_scada.Value
.Range(.Parent.ListColumns("localisation").Index).Value = Cbx_localisation.Value
.Range(.Parent.ListColumns("designation").Index).Value = Cbx_designation.Value
.Range(.Parent.ListColumns("date").Index).Value = Cbx_Date.Value
.Range(.Parent.ListColumns("intervenant").Index).Value = Cbx_intervenant.Value
.Range(.Parent.ListColumns("intervenant2").Index).Value = Me.Cbx_intervenant_2.Value
.Range(.Parent.ListColumns("heure machine").Index).Value = Tbx_heure.Value
.Range(.Parent.ListColumns("entretien effectué").Index).Value = GetChoix("choixev")
.Range(.Parent.ListColumns("piéce installé").Index).Value = GetChoix("choixev_pieces")
.Range(.Parent.ListColumns("temps d'intervention").Index).Value = Tbx_heure_intervention.Value
End With
Unload Me
End Subbonjour
merci jean-paul , je ne dois pas faire les choses correctement car cela ne fonctionne pas
Re,
Voici une version un poil modifiée...
Regarde particulièrement le fonctionnement du lancement du formulaire d'ajout d'un intervenant. (Bouton AddIntervenant du formulaire ajout_un_entretien)
Il ne faut pas hésiter à utiliser la touche F8 pour faire du pas à pas.
Bonne programmation.
ps; J'ai mis un peu d'ordre dans les noms des contrôles. Il reste beaucoup à faire.
merci beaucoup jean Paul pour le temps passé, j'ai refais une demande pour mon problème de choix suivant le tableau2
