XL 2010 Formule et Userform

Christram78

XLDnaute Nouveau
Bonsoir,
Besoin d'aide pour une formule
Dans mon onglet "Planning quotidien" j'aurais besoin de prendre en compte le dernier véhicule attribué à chaque personne. Pour le moment, je n'ai fait qu'une petite rechercheV avec l'onglet "suivi" mais il faudrait prendre en compte la date la plus récente.
Pouvez-vous m'aider??

Est-ce qu'il est possible d'insérer un numéro automatique à chaque ouverture de formulaire "RESERVATION"? Et si oui, peut-on avec l'onglet IMPRIMER (pas encore paramétrer!!) créer un fichier PDF qui serait enregistrer avec ce même numéro automatique ?

Dernière petite question, est ce qu'on peut insérer une photo dans un userform?

Très bonne soirée.
 

Pièces jointes

  • suivi planning et véhicules 2.xlsm
    59.8 KB · Affichages: 15

jpb388

XLDnaute Accro
Bonjour à tous

Il est inutile de mettre une formule puisque tout, enfin presque tout, est géré par une macro
Il est normal que l’on ne puisse pas sélectionner un véhicule 2 fois
Je peux modifier la table suivi comme ceci


VéhiculeConducteurPassager1Passager2Passager3Date MADKms MADDate RetourKms Retour


Cela te conviendrait-il ? si oui me mettre le nombre de passager de votre plus grand véhicule (chauffeur compris)

la signature concerne que le chauffeur ou faut il la signature de tous les occupants

Dès que j’ai ta réponse je modifierai le fichier

Bonne Soirée
 
Dernière édition:

Christram78

XLDnaute Nouveau
Bonjour à tous

Il est inutile de mettre une formule puisque tout, enfin presque tout, est géré par une macro
Il est normal que l’on ne puisse pas sélectionner un véhicule 2 fois
Je peux modifier la table suivi comme ceci


VéhiculeConducteurPassager1Passager2Passager3Date MADKms MADDate RetourKms Retour


Cela te conviendrait-il ? si oui me mettre le nombre de passager de votre plus grand véhicule (chauffeur compris)

la signature concerne que le chauffeur ou faut il la signature de tous les occupants

Dès que j’ai ta réponse je modifierai le fichier

Bonne Soirée
Bonjour, @jpb388 et le forum,
Plus besoin du tout de la signature, ni de l'impression. On reste sur un tableau avec Userform plus simple, mon patron préfère gérer le reste sur One Note. Si vous pouviez enlever toutes les macros s'y référents.
Nous avons des véhicules 9 places (1 conduc + 8 passagers).
Il faudrait que sur la fiche de suivi, on puisse voir quel véhicule reste disponible (sans passer par le userform).
Est-il possible de savoir le nombre de place restant dans chaque véhicule ?
Pour l'instant je n'ai mis cette indication nul part.
Merci beaucoup pour votre aide.
Bonne journée.
 

jpb388

XLDnaute Accro
Bonjour à tous

Les suppressions :

  • Les macros pour l’impression
  • Les macros pour la signature et les contrôles sur le formulaire
  • La table numérotation dans la BDD
  • La colonne Fiche dans la table suivi
  • Les contrôles numérotation dans le formulaire suivi
Les créations :

  • Une colonne Place Libre qui indique le nombre de passager manquant
  • Une Inutilisés qui indique les voitures disponibles
  • Ajout d’une listebox dans le formulaire te permettant de sélectionné tes passagers


Contrôles dans formulaire saisie

  • Liste déroulante voiture
  • MAD coché
  • Liste toutes les voitures (utilisées ou pas)
  • Dans le formulaire si la voiture est libre accès à tout
  • Si déjà inscrite permet de corriger les données
  • Retour coché
  • Liste les véhicules utilisés
  • Seul la date et le kms retour sont accessibles


  • Liste déroulante Conducteur
  • MAD coché
  • Les conducteurs apparaissent sauf si déjà sur un autre véhicule
  • Retour coché
  • La liste n’est pas accessible
  • Liste Passager
  • MAD coché
  • Les passagers apparaissent sauf si déjà sur un autre véhicule
  • Retour coché
  • La liste n’est pas accessible
Bonne journée
 

Christram78

XLDnaute Nouveau
Bonjour @jpb388,
j'ai téléchargé le fichier pour l'utiliser, je rencontre un problème dès que je sélectionne un véhicule voici le message d'erreur
Erreur d'exécution 9 : l'indice n'appartient pas à la sélection

Set Plage = Range("TabSuivi[[Conducteur]:[Passager8]]").ListObject.ListRows(Lg).Range.SpecialCells(xlCellTypeConstants, xlTextValues)

Peux-tu me dire d'où provient le problème.
Bon après-midi
 

jpb388

XLDnaute Accro
re
Je l'ouvre sans problème, tu utilises celui que je t’envoie ou tu transfères dans un fichier réel
Vérifie aussi les références s’il y a des manquantes il faut les décochées
Pour accéder aux références appuie sur ALT et f11, clique sur outils et sur références
As-tu touché à la structure des tables

si tu utilise un autre fichier il faut reproduire la même table de la feuille suivi et dans les références coché Microsoft scripting Runtime

dans mon fichier tu peux supprimer la feuille feuil1 elle ne sert à rien
 
Dernière édition:

Christram78

XLDnaute Nouveau
Bonjour @jpb388 ,
J'utilise le fichier que tu m'as envoyé, le problème vient dès que je clic sur la combobox "Conducteur" qu'il m'affiche ce message, je n'ai rien touché sur la structure des tables. Je ne vois pas d'où provient le problème.
Concernant les références, Microsoft scriptif Runtime est bien coché.
Bonne journée
 

Christram78

XLDnaute Nouveau
Re bonjour @jpb388,
Il faut que je saisisse tous les antécédents sur les véhicules depuis avril de cette année.
Je pense qu'il faut que je supprime dans le calendrier des instructions mais je n'ose pas de peur de faire des erreurs. Pourriez-vous m'aiguiller sur ça.
Je tenais à vous remercier car vous m'avez fourni un super fichier, et vous y avez consacrer pas mal de temps.
J'aurais la même chose à faire mais pour les logements des salariés, tout est à faire sur ce fichier. Il va falloir que je regarde tout cela de plus près.
Encore mille fois merci.
Bonne journée.
 

jpb388

XLDnaute Accro
Bonjour à tous
J'ai trouvé remplace les macros du module ChargeListe par celle ci
l'erreur est provoquée par le manque de données dans la table suivi


VB:
Option Explicit

Sub ChargeCboConducteur()
  Dim Plage As Range, Cel As Range
  Dim PlageBlanc As Range, CelBlanc As Range
  Dim Dico As New Dictionary, Lg&, Chauffeur$, MD As Date, Kms&
 
  frm_Saisie.cboConducteur.Clear
  Set Plage = Range("TabSalarie[PERMIS]").Cells
     For Each Cel In Plage
      If StrConv(Cel.Text, vbUpperCase) = "OUI" Then
        Lg = Cel.Row - Range("TabSalarie").Row + 1
        If Not Dico.Exists(Range("TabSalarie[Salarié]").Cells(Lg)) Then Dico.Add Range("TabSalarie[Salarié]").Cells(Lg).Text, ""
      End If
    Next Cel
 
  Set PlageBlanc = Range(Range("TabSuivi").ListObject.ListColumns(DateRetour).Range.SpecialCells(xlCellTypeBlanks).Address)
  For Each CelBlanc In PlageBlanc
    Lg = CelBlanc.Row - Range("TabSuivi").Row + 1
    If Range("TabSuivi").ListObject.ListRows.Count = 0 Then GoTo Saut
    Set Plage = Range("TabSuivi[[Conducteur]:[Passager8]]").ListObject.ListRows(Lg).Range.SpecialCells(xlCellTypeConstants, xlTextValues)
    For Each Cel In Plage
      Select Case TrvSuivi
        Case False
          If Dico.Exists(Cel.Text) Then Dico.Remove (Cel.Text)
        Case True
          If Range("TabSuivi").Cells(Lg, Vehi) <> frm_Saisie.cboVehi.Text Then
            If Dico.Exists(Cel.Text) Then Dico.Remove (Cel.Text)
          Else
            Chauffeur = Range("TabSuivi").Cells(Lg, Conducteur)
            MD = Range("TabSuivi").Cells(Lg, DateMad)
            Kms = Range("TabSuivi").Cells(Lg, KmsMAD)
          End If
      End Select
    Next Cel
  Next CelBlanc
Saut:
  frm_Saisie.cboConducteur.List() = Dico.Keys
  If TrvSuivi Then frm_Saisie.cboConducteur.Text = Chauffeur: frm_Saisie.TxtDate = MD: frm_Saisie.txtKms = Kms

End Sub

Sub ChargelsbPassager()
  Dim Plage As Range, Cel As Range
  Dim PlageBlanc As Range, CelBlanc As Range
  Dim Dico As New Dictionary, DicoVoit As New Dictionary, Lg&, Mot$
  frm_Saisie.lsbPassager.Clear
  Set Plage = Range("TabSalarie[Salarié]").Cells
  For Each Cel In Plage
      If Not Dico.Exists(Cel.Text) Then Dico.Add Cel.Text, ""
  Next Cel
 
  Set PlageBlanc = Range(Range("TabSuivi").ListObject.ListColumns(DateRetour).Range.SpecialCells(xlCellTypeBlanks).Address)
    For Each CelBlanc In PlageBlanc
      Lg = CelBlanc.Row - Range("TabSuivi").Row + 1
    If Range("TabSuivi").ListObject.ListRows.Count = 0 Then GoTo Saut
      Set Plage = Range("TabSuivi[[Conducteur]:[Passager8]]").ListObject.ListRows(Lg).Range.SpecialCells(xlCellTypeConstants, xlTextValues)
      For Each Cel In Plage
        Select Case TrvSuivi
          Case False
            If Dico.Exists(Cel.Text) Then Dico.Remove (Cel.Text)
          Case True
            If Range("TabSuivi").Cells(Lg, Vehi) <> frm_Saisie.cboVehi.Text Then
              If Dico.Exists(Cel.Text) Then Dico.Remove (Cel.Text)
            Else
              If Not DicoVoit.Exists(Cel.Text) Then DicoVoit.Add Cel.Text, ""
          End If
        End Select
      Next Cel
    Next CelBlanc
Saut:
    If Dico.Exists(frm_Saisie.cboConducteur.Text) Then Dico.Remove (frm_Saisie.cboConducteur.Text)
    frm_Saisie.lsbPassager.List() = Dico.Keys
    If TrvSuivi Then
      For Lg = 0 To frm_Saisie.lsbPassager.ListCount - 1
        Mot = frm_Saisie.lsbPassager.List(Lg)
        If DicoVoit.Exists(Mot) Then frm_Saisie.lsbPassager.Selected(Lg) = True
      Next Lg
    End If
End Sub

Pour le calendrier il faut dans la macro mettre les lignes du bas en commentaire avec le " ' " devant la ligne comme ci dessous sauf la ligne frm_Saisie.TxtDate = CalendrierDateSELECT: Unload Me
a remettre quand tes données seront à jour
dans tous les cas celle ci doit rester en commentaire
'supprimer la rem si on veut fermer automatiquement après clic sur une date


Code:
Private Sub BoutonJour(CtrlBouton As Control)
If CtrlBouton.Enabled = False Then Exit Sub
Dim NoJour, NoMois, NoBouton, NoAn
NoBouton = Val(Mid(CtrlBouton.Name, 2)) 'no bouton
NoJour = CtrlBouton.Caption 'jour
NoMois = CbMois.ListIndex + 1 'mois
NoAn = CbAnnee.Value
'test si saisie un jour du mois précédent ou suivant !? .Tag(1à42)
If NoBouton - NoJour < 0 Then
   If NoMois > 1 Then
      NoMois = NoMois - 1
   Else '=1 déduit 1année !? **** ici c'est CalAnneDEBUT ****
      If NoAn > CalAnneDEBUT Then NoMois = 12: NoAn = NoAn - 1
   End If
ElseIf NoBouton - NoJour > 8 Then
   If NoMois < 12 Then
      NoMois = NoMois + 1
   Else '=12 ajoute 1année !?
      If NoAn < CalAnneFIN Then NoMois = 1: NoAn = NoAn + 1
   End If
End If
CalendrierMiseAjour NoJour & "/" & NoMois & "/" & NoAn 'passage données au format date !

'supprimer la rem si on veut fermer automatiquement après clic sur une date
'Select Case CalendrierDateSELECT
 'Case Is < Date
      'MsgBox "La date doit être égale ou supérieur à la date du jour", vbInformation + vbOK, "Date Incompatible"
  'Case Else
    frm_Saisie.TxtDate = CalendrierDateSELECT: Unload Me
'End Select

End Sub

Bonne journée
 

Christram78

XLDnaute Nouveau
Bonjour à tous
dans la macro
Private Sub btnValider_Click()

recherche cette ligne
VB:
          Lr.Range(KmsMAD) = CInt(Me.txtKms.Value)

et met celle-ci

Code:
          Lr.Range(KmsMAD) = CLng(Me.txtKms.Value)

Bonne journée
Merci beaucoup,
Petite question sur le planning quotidien, si je veux que s'indique automatiquement le numéro du véhicule du salarié et sa place, quelle formule dois-je mettre, celle qui y est ne fonctionne pas puisqu'aucune information n'est indiquée.
 

jpb388

XLDnaute Accro
Bonjour à tous
je ne suis pas trop compétent avec les formules (sauf les celles de base), en principe, je peux le faire avec une macro mais il me faut savoir comment comment tu comptes agencé la feuille
la même plage de cellules et se sont les dates qui changent​
ou les 53 semaines les une derrières les autres​
ou autre ?​
Les données devront être imprimer, sauvegarder, ou les deux
je suis absent toute la journée, tu as le temps de réfléchir
Bonne journée
 

Christram78

XLDnaute Nouveau
Bonjour à tous
je ne suis pas trop compétent avec les formules (sauf les celles de base), en principe, je peux le faire avec une macro mais il me faut savoir comment comment tu comptes agencé la feuille
la même plage de cellules et se sont les dates qui changent​
ou les 53 semaines les une derrières les autres​
ou autre ?​
Les données devront être imprimer, sauvegarder, ou les deux
je suis absent toute la journée, tu as le temps de réfléchir
Bonne journée
Bonjour,
Je voulais avoir un planning très simple d'utilisation (au départ je pensais faire une macro pour que ne s'affiche que la semaine dont j'avais besoin mais pas trop envie de me prendre la tête !!). Je compte mettre les 53 semaines à la suite, je n'imprimerais que la semaine concernée pour faire mon planning. Les données devront être imprimées et sauvegardées pour savoir sur quel chantier les gars ont travaillés à une période données. Pas besoin de savoir quel véhicule ils avaient puisqu'on le retrouve sur le suivi.
J'espère que j'ai été assez clair dans mon explication.
Très bonne journée.