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

XL 2016 Affiner codage pour un meilleur fonctionnement.

pompaero

XLDnaute Impliqué
Bonjour le forum,

Après avoir bien avancé sur un projet de planning que je tente de faire seul (un peu d'aide tout de même sur ce forum) et avant de le finaliser totalement, j'aimerai un coup pouce afin de vérifier, voir améliorer quelques procédures pour accélérer l'enregistrement.
Avant, il y a 2 ou 3 points à résoudre que je n'arrive pas à faire, Pourriez-vous m'aider la dessus ?
Dans Bouton "Valider" :
1) l'alerte de la Listbox1 non sélectionné ne fonctionne pas (alors que la listbox2 fonctionne).
2) la vérification de données dans la BDD ne fonctionne pas non plus (juste après le point 1 dans le code du bouton)
3) En gardant le même principe de fonctionnement du formulaire, j'aimerai, si possible, pourvoir enlever les Unload Me puis UF_Planif.Show après chaque enregistrement afin d'éviter la fermeture puis réouverture du formulaire à chaque manipulation.
Est-ce possible ?
Puis ensuite nous verrons pour la vitesse d’exécution des procédures.
Merci à vous.

Cdt
pompaero
 

Pièces jointes

  • Test Planning.xlsm
    465 KB · Affichages: 29

pompaero

XLDnaute Impliqué
Bonjour bebere,
Je reviens sur le soucis du calendrier qui s'affiche en décalé, j'essai de trouver pour remettre bien.
J'ai jeté un œil dans les codes et pas trop sur de moi, mais, me suis rendu compte dans l'Initialize que les variables on bougés comme :
Dim i As Long était en Integer avant et ce code en plus (a priori)
VB:
    For Each Ctrl In Me.Frame1.Controls
        If TypeOf Ctrl Is MSForms.Label And Left(Ctrl.Name, 1) = "J" Then
            ReDim Preserve MesLabels(0 To i)
            Set MesLabels(i).MesLabels = Ctrl: Ctrl.Tag = i + 1
            i = i + 1
        End If
    Next Ctrl
que j'ai mis en suspens avec des ( ' ) remet bien les dates du calendrier dans le bonne ordre mais pouvons plus cliquer sur les Labels des dates comme ci ils étaient en Enabled = false.
Puis en Option Explicit, un autre Dim i& est en place également.
Je n'est regardé que ça pour le moment mais rien modifié.

pompaero
 

pompaero

XLDnaute Impliqué
Bonjour bebere,
Comme promis, de retour... lol
J'ai testé à plusieurs reprises le fichier qui fonctionne bien dans son ensemble. Quelques soucis et interrogations tout de même, comme :
j'ai voulu aménager la présentation du UserForm, ajouter une image et du coup il y a le ListBox1 qui ne se met plus a jour de ces items quand on passe des optionbutton "Modifier ou Supprimer" vers "Ajouter", sans toucher à aucun code !!! je comprends pas.
Sinon,
Le label1 ne se remet pas en noir au click du Listbox1 apres une alerte.
La multiselect de fonctionne pas lors de la suppression (efface qu'un seul item), mais ça à la limite se n'est pas grave.
Les combox1 et textbox1 sont il vraiment nécessaire en visible lors d'une "modification ou Suppression" ?
Oui il faut garder la recherche, mais est-il possible d'avoir la liste des dates inversé (date la plus récente en 1er) ?
Merci

pompaero.
 

Pièces jointes

  • TestPlanningV6.xlsm
    448.9 KB · Affichages: 39

pompaero

XLDnaute Impliqué
Bonjour bebere,

Excuse de revenir, je me doute que tu dois être fortement occupé mais pourrai tu me dire pourquoi le Listbox ne se charge plus après l'avoir simplement changer de place, stp ?
J'aurai aimé pouvoir mettre en service ce fichier pour début juin. Merci de ta compréhension.

cordialement
 

Bebere

XLDnaute Barbatruc
bonsoir
Pompaero repris le fichier aujourdhui
changé le code pour listbox1,supprimé checkbox1
tu me diras ce qui coince
 

Pièces jointes

  • TestPlanningV7.xlsm
    461.4 KB · Affichages: 6

ChTi160

XLDnaute Barbatruc
Bonsoir
pompaero
Bonsoir le Fil (Bebere) ,le Forum
les deux procédures que j'ai modifié .
VB:
Public Sub AgentActif()
    Dim a(), n As Long
    With Sheets("Agent")
        a = .Range("B2:D" & .[B65000].End(xlUp).Row).Value
    End With
    For i = LBound(a) To UBound(a)
        If a(i, 1) = "Actif" Then
                 n = n + 1
          ReDim Preserve Aactif(1 To n)
           Aactif(n) = a(i, 2) & " " & a(i, 3)
        End If
    Next i
End Sub

VB:
'Chargement listbox1
Sub ChargeListBox1()
‘************
      IniTbl
‘************
With UF_Planif
  With .ListBox1
           .ColumnCount = IIf(index = 1, 1, 5)
           .Width = 140
           .ColumnWidths = IIf(index = 1, "1", "0;80;30;0;0") 'mettre dernière colonne à 0
           .MultiSelect = IIf(index = 1, fmMultiSelectMulti, fmMultiSelectSingle)
           .List = IIf(index = 1, Aactif, Tbl)
           .ListIndex = -1
  End With
End With
End Sub
jean marie
 

pompaero

XLDnaute Impliqué
Bonjour Chti160
Le fil (Bebere), le forum,

Merci de rentrer dans la danse Chti160, c'est cool. Je vais regarder tes propositions de mon côté, qui j'en suis sur son efficace.
Mais avant de modifier quoi que ce soit, je préfère voir avec Bebere, (normal, non ?) je ne vais pas démonter ce qu'il a fait en un click, ça s'appel le respect je crois, non.
Tu peux rester sur le fil sans soucis. Je regarde ça.

pompaero
 

pompaero

XLDnaute Impliqué
Re
Bebere, ChTi160,

Bebere, as tu vu la proposition de ChTi160 en post23 ? par respect, je voulais en discuter avec toi. Pour ma part, il manque la mise jour du ListBox1 des agents encore dispo une fois une garde planifiée, (chose que j'aime bien dans tes codes, cela évite les doublons), si non ces codes semble identiques, mais plus allégé, c'est vrai (merci Chti160).

Si non, après test, cela me semble pas mal, mais, reviens avec une petite liste de bug et d'interrogation ?
1) Je ne vois pas l'utilité des TextBox1 et ComboBox1 lors d'une modification, pourrai-tu m'expliquer stp ? si non les mettre invisible.
2) J'ai supprimer tous les (jeux de lumières) changement de couleur des labels qui ne servent à pas grand chose au final.
3) J'ai ajouter l'activation de OptionButton1 à l'ouverture.
Côté Bug,
4) J'aimerai ajouter une image pour y inserer un logo mais cela bug ici (ligne en rouge) :
VB:
Private Sub Jour_Change()
    Dim L As Control
    Dim num As Variant
    Dim j As Date
    'Mise à jour des n° de jour
'code effacé ici pour l'exemple
    'Mise à jour de la semaine
    For Each L In Me.Controls    'on passe en revue l'ensemble des controls
        num = Val(L.Tag)
       [COLOR=rgb(184, 49, 47)] If num = 1 And L.ForeColor = &H80000011 Then    'le jour est dans le mois[/COLOR]
            sem1.Caption = NOSEM(CDate(Day(Jour.Value) & "/" & Month(Jour.Value) & "/" & Year(Jour.Value)))
        ElseIf num = 1 Then
            sem1.Caption = NOSEM(CDate(Day(Jour.Value) & "/" & Month(Jour.Value) - 1 & "/" & Year(Jour.Value)))
        End If
    Next
End Sub
5) Lors d'une modification si l'on click le ListBox2 avant le ListBox1 cela bug ici (ligne en rouge) :
Code:
Private Sub ListBox2_Click()    'sigle

    If index = 2 Then
        Me.ListBox1.List(Me.ListBox1.ListIndex, 2) = Me.ListBox2
        If Left(Me.ListBox2, 1) = "G" Then
            Me.ListBox1.List(Me.ListBox1.ListIndex, 3) = Mid(Me.ListBox2, 2)
        Else
            Me.ListBox1.List(Me.ListBox1.ListIndex, 3) = ""
        End If
    End If
End Sub
Voilà c'est tout ce que j'ai rencontré en bug, donc pour moi, c'est pas mal, bon boulot.

pompaero
 

ChTi160

XLDnaute Barbatruc
Bonsoir pompaero
Bonsoir le Fil ,le Forum
En attendant Bebere Lol
EDIT:
C'était trop simple Lol
problème si multi sélection !

j'ai modifié la procédure :
Private Sub CB_Valider_Click()
du UF_Planif
VB:
With Sheets("BDD")
                L = .Range("A" & Rows.Count).End(xlUp).Row + 1    'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
                For i = 0 To ListBox1.ListCount - 1
                    If ListBox1.Selected(i) Then
                        .Range("A" & L).Value = MaDate
                        .Range("A" & L).NumberFormat = "dd-mm-yy"
                        .Range("B" & L).Value = ListBox1.List(i)
                        .Range("C" & L).Value = ListBox2
                        If Left(Me.ListBox2, 1) = "G" Then .Range("D" & L).Value = Val(Mid(Me.ListBox2, 2))
                        L = L + 1
                        ListBox1.RemoveItem (i) '<----------- ICI supprime la ligne dans ListBox 1
                    End If
                Next i
            End With
jean marie
 

pompaero

XLDnaute Impliqué
Bonsoir ChTi160,
Le fil, le forum,

La compétition est lancé !!!! ...... Je plaisante bien sûr, bien au contraire c'est cool d'avoir divers avis.
Pourquoi cette modif dans la procédure du Private Sub CB_Valider_Click(), ça correspond à quoi ?
Je viens de tester, ça bug sur
VB:
If ListBox1.Selected(i) Then
Bonne soirée

pompaero
 

ChTi160

XLDnaute Barbatruc
Re
C'était plus simple encore(si telle était la demande Lol) #25
J'ai mis :
VB:
Private Sub OK_Click() 'Il y avait
Public Sub OK_Click()    ' j'ai mis
'Public au lieu de Private
puis en bas
VB:
    End If 
            UF_Planif.OK_Click '<-------------- ICI on Simule le Click sur Bouton " OK  "      
    IniObjet
End Sub
Voir fichier !
jean marie
 

Pièces jointes

  • TestPlanningV7-Chti160-2.xlsm
    472.7 KB · Affichages: 7

Bebere

XLDnaute Barbatruc
bonjour
pompaero il manque le logo et l'endroit où il se trouve à moins qu'il se trouve dans le fichier
textbox et combobox sont là pour changer le nom utile ou non
à toi de décider
le code de Jean Marie est intégré
pour les agents la liste est controlée via bouton ok, à chaque changement de date
je t'envoye le fichier dès que le code du logo est fait
 

Discussions similaires

Réponses
4
Affichages
420
Réponses
46
Affichages
3 K
Réponses
26
Affichages
1 K
Réponses
26
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…