XL 2019 Messages box et choix d'action sur userform

Did25

XLDnaute Occasionnel
Bonsoir le forum XLD ,de nouveau présent pour une demande concernant mon fichier de suivis de colis ,je m'aperçois que les utilisateurs de mon fichier peuvent faire des actions qui peuvent générer des erreurs sur mon fichier .J'ai réussi a verrouiller les actions sur l'USF de sortie colis et je souhaiterais faire la même chose sur l'USF ajout et déplacement colis .Mais je galère .
Dans l'USF déplacement ,je souhaite bloquer un déplacement si l'utilisateur n'a pas sélectionné de localisation actuel lors de l'action Déplacement et bloquer aussi en cas de non sélection de choix du rayon d'entreposage du colis .
Dans l'USF ajout ,je souhaite bloquer l'ajout de colis en cas de non sélection provisoire du colis et aussi en cas d'absence de nom de colis .
J'espère que cela est compréhensible ,merci de votre aide
 

Pièces jointes

  • Deplacements colis rv2-1-2.xlsm
    66 KB · Affichages: 5

ChTi160

XLDnaute Barbatruc
Bonsoir Did25
Bonsoir Robert
y'a aussi une méthode simple qui est ne N'afficher le Combobox 2 que si le Combobox1 contient quelque chose ! y'en a d'autres Lol
comme Robert je n'ai fait cela que pour le "déplacement"
VB:
Private Sub UserForm_Initialize()
Dim I As Integer
Dim TV As Variant
Set OB = Worksheets("Bdd")
Set OE = Worksheets("Entrée")
Set OS = Worksheets("Suivi des mouvements")
TV = OB.Range("A1").CurrentRegion
Me.Frame1.Visible = False 'on masque le Frame à l'ouverture du Userform
For I = 3 To UBound(TV, 1)
    If TV(I, 2) <> 0 Then
        Me.ComboBox1.AddItem TV(I, 1)
    Else
        Me.ComboBox2.AddItem TV(I, 1)
    End If
Next I
End Sub
puis lors du choix dans le Combobox1 on affiche le Frame1 s'il contient queque chose
Code:
Private Sub ComboBox1_Change()
Dim Place_Col As String
Dim LI As Integer
Dim COL As Integer
'ci-dessous la Ligne qui affiche ou masque le Frame
 Me.Frame1.Visible = IIf(Me.ComboBox1.Value = Empty Or Me.ComboBox1.ListIndex = -1, False, True)
Place_Col = ComboBox1.Value
Set Rayon = Worksheets("Entrée").Range("A1:W50").Find(Place_Col, LookIn:=xlValues)
If Rayon Is Nothing Then Exit Sub
LI = Rayon.Row: COL = Rayon.Column
For I = 1 To 8
    Me.Controls("TextBox" & I).Value = OE.Cells(LI + I, COL).Value
Next I
End Sub
Bonne fin de Soirée
Jean marie
 

Pièces jointes

  • did25-1.gif
    did25-1.gif
    153.9 KB · Affichages: 9

Did25

XLDnaute Occasionnel
Bonjour Robert et Jean marie, merci de vos retours c'est parfait comme d'habitude avec vos deux méthodes ,j'ai adapter en fonction de l'USF ,pour la solution de la frame ,j'ai modifier l'usf en intégrant un contrôle frame ,merci à vous deux ,c'est top . Je continue mon fichier de suivis ,bonne journée ;)
 

Did25

XLDnaute Occasionnel
Rebonjour ,je reviens vers vous car je n'arrive pas appliquer sur l'USF ajout ,la même règle que l'USF déplacement avec le contrôle frame qui s'affiche sur le choix combobox1.
Un autre soucis concernent l'USF sortie , l'enregistrement sur la feuille de suivi ne prend pas en compte les textbox1 à 8 et là je sèche ,c'est peut être rien mais je ne trouve pas ,besoin d'aide merci
 

Pièces jointes

  • Gestion de colis.xlsm
    68.4 KB · Affichages: 3

ChTi160

XLDnaute Barbatruc
Re
Pour ce qui est du Userform "Sorties"
j'ai d'abord nettoyé la Propriété "RowSource" du Combobox1!(déjà évoqué, je crois Lol)
Ci-dessous ce que j'ai mis dans le Initialize du Userform "Sorties"
VB:
Private Sub UserForm_Initialize()
Dim Cell As Range
Dim AdrC As String
Dim x As Integer
Dim Col As Byte
Dim Lgn As Integer

Set OB = Worksheets("Bdd")'On définit la feuille Source
TV = OB.Range("A1").CurrentRegion 'On récupère les Données de la plage ainsi définie

With Me.ComboBox1
             .ColumnCount = 10 'Nombre de Colonne du Combobox
             .ColumnWidths = "1;0;0;0;0;0;0;0;0"'On définit la largeur des Colonne seule la première sera visible
For Lgn = 3 To UBound(TV)  'Pour chaque lignes du tableau
  If TV(Lgn, 2) <> Empty Then 'si la colonne 2 n'est pas vide
    x = 0 'On initialise la variable à 0
            .AddItem TV(Lgn, 1) 'on ajoute la valeur dans la première Colonne du Combobox'
   For Col = 2 To UBound(TV, 2) 'pour chaque colonne de la Ligne à partir de la 2ème'
         x = x + 1 'On incrémente x
           .List(.ListCount - 1, x) = TV(Lgn, Col)'ici on charge l'ensemble des colonnes de la ligne
   Next 'autre Colonne'
          .List(.ListCount - 1, x) =Lgn 'Ligne Source dans le Tableau
  End If 'fin de Condition'
Next Lgn 'Autre Ligne du Tableau
End With
End Sub
Ci-dessous ce que j'ai mis dans la Procédure Change du Combobo1 du Userform "Sorties"
Pas sûr d'avoir compris Lol
Code:
Private Sub ComboBox1_Change()
'à chaque changement de la référence, met à jour les datas correspondantes
With Me 'Avec le Userform
     With .ComboBox1 'avec le Combobox
    Lgn_Source = .List(.ListIndex, .ColumnCount - 1)'On récupère le Numéro de la Ligne source
     End With
          .TextBox1.Value = TV(Lgn_Source, 2) 'on colle la valeur qui se trouve en Ligne Source ,Colonne 2
          .TextBox2.Value = TV(Lgn_Source, 3) 'Idem Colonne 3
          .TextBox3.Value = TV(Lgn_Source, 4) 'Idem Colonne 4
          .TextBox4.Value = TV(Lgn_Source, 5) 'Idem Colonne 5
          .TextBox5.Value = TV(Lgn_Source, 6) 'Idem Colonne 6
          .TextBox6.Value = TV(Lgn_Source, 7) 'Idem Colonne 7
          .TextBox7.Value = TV(Lgn_Source, 8) 'Idem Colonne 8
          .TextBox8.Value = TV(Lgn_Source, 9) 'Idem Colonne 9
End With
End Sub
Les variables ont été déclarées en haut du Module1
Code:
Public TV
Public x As Integer
Public Col As Byte
Public Lgn As Integer
Bonne fin de Journée
Jean marie
 

Did25

XLDnaute Occasionnel
Re
Pour ce qui est du Userform "Sorties"
j'ai d'abord nettoyé la Propriété "RowSource" du Combobox1!(déjà évoqué, je crois Lol)
Ci-dessous ce que j'ai mis dans le Initialize du Userform "Sorties"
VB:
Private Sub UserForm_Initialize()
Dim Cell As Range
Dim AdrC As String
Dim x As Integer
Dim Col As Byte
Dim Lgn As Integer

Set OB = Worksheets("Bdd")'On définit la feuille Source
TV = OB.Range("A1").CurrentRegion 'On récupère les Données de la plage ainsi définie

With Me.ComboBox1
             .ColumnCount = 10 'Nombre de Colonne du Combobox
             .ColumnWidths = "1;0;0;0;0;0;0;0;0"'On définit la largeur des Colonne seule la première sera visible
For Lgn = 3 To UBound(TV)  'Pour chaque lignes du tableau
  If TV(Lgn, 2) <> Empty Then 'si la colonne 2 n'est pas vide
    x = 0 'On initialise la variable à 0
            .AddItem TV(Lgn, 1) 'on ajoute la valeur dans la première Colonne du Combobox'
   For Col = 2 To UBound(TV, 2) 'pour chaque colonne de la Ligne à partir de la 2ème'
         x = x + 1 'On incrémente x
           .List(.ListCount - 1, x) = TV(Lgn, Col)'ici on charge l'ensemble des colonnes de la ligne
   Next 'autre Colonne'
          .List(.ListCount - 1, x) =Lgn 'Ligne Source dans le Tableau
  End If 'fin de Condition'
Next Lgn 'Autre Ligne du Tableau
End With
End Sub
Ci-dessous ce que j'ai mis dans la Procédure Change du Combobo1 du Userform "Sorties"
Pas sûr d'avoir compris Lol
Code:
Private Sub ComboBox1_Change()
'à chaque changement de la référence, met à jour les datas correspondantes
With Me 'Avec le Userform
     With .ComboBox1 'avec le Combobox
    Lgn_Source = .List(.ListIndex, .ColumnCount - 1)'On récupère le Numéro de la Ligne source
     End With
          .TextBox1.Value = TV(Lgn_Source, 2) 'on colle la valeur qui se trouve en Ligne Source ,Colonne 2
          .TextBox2.Value = TV(Lgn_Source, 3) 'Idem Colonne 3
          .TextBox3.Value = TV(Lgn_Source, 4) 'Idem Colonne 4
          .TextBox4.Value = TV(Lgn_Source, 5) 'Idem Colonne 5
          .TextBox5.Value = TV(Lgn_Source, 6) 'Idem Colonne 6
          .TextBox6.Value = TV(Lgn_Source, 7) 'Idem Colonne 7
          .TextBox7.Value = TV(Lgn_Source, 8) 'Idem Colonne 8
          .TextBox8.Value = TV(Lgn_Source, 9) 'Idem Colonne 9
End With
End Sub
Les variables ont été déclarées en haut du Module1
Code:
Public TV
Public x As Integer
Public Col As Byte
Public Lgn As Integer
Bonne fin de Journée
Jean marie
Bonsoir Jean marie ,j'ai essayé de mettre en application ton code ,ça ne fonctionne pas mais je pense que je me suis mal expliqué , je souhaite pouvoir enregistrer sur la feuille de suivis chaque déplacements ,entrée ,sortie et modification de la fiche signalétique d'un colis .
J'en ai profiter pour regrouper les entrées et les sorties colis dans un seul USF ,ça fonctionne mise à part l'enregistrement des sorties qui est incomplète .
J'ai modifié aussi l'usf mouvement et je souhaite lui inclure la possibilité de pouvoir modifier les colis en cours de parcours et pour cela il faut remplacer de la Textbox2 à la Textbox8 par des combobox .
Petite explication pour le row source de la combobox1 de l'usf entrée et sortie :il représente le sas de réception et évacuation des colis . Merci de ta compréhension
 

Pièces jointes

  • Gestion de colis Chti160-2 (1).xlsm
    61.6 KB · Affichages: 3

Did25

XLDnaute Occasionnel
Bonjour Robert et Jean-marie ,finalement j'ai réussi à faire ce que je voulais et j'ai trouvé d'où venait l'erreur à l'enregistrement des données ,maintenant je recherche une solution pour l'USF déplacement et modification .Celui ci me permet de modifier la fiche signalétique du colis et l'enregistrer sur la feuille de suivi de modifications ,l'ensemble de ses données . Mais je souhaiterais pouvoir lors de la modification ,vérifier si il y a bien eu une modification d'un paramètre de la fiche signalétique et si oui lequel et qu'il apparaisse sur la feuille de suivi , par exemple si je modifie le colis en VR41 uniquement sa destination que je puisse retrouver sur la feuille de suivi des modifications ses données avant et après modifications et si aucune modification alors pas d'enregistrement des données. Si vous pensez que je dois ouvrir une nouvelle discussion ,dites le moi ,ça ne me pose pas de problème . Merci
 

Pièces jointes

  • Gestion de colis.xlsm
    70.6 KB · Affichages: 1

Statistiques des forums

Discussions
299 914
Messages
1 980 045
Membres
206 965
dernier inscrit
Mithanne