Re: liste de choix et recherche
#11
Débutant XLPages

Inscription: 17/09/2009

Messages: 13

Système d'exploitation:
PC
Version Excel utilisée:
2002,2003
Posté le : 23-06-2010 13h51
Merci pour tes conseils "Mon cher ami" (pour les francophone!!).

Mon document est relativement clair dans ma tête, cependant le fichier envoyé lors des premiers post n'était qu'un fraction de celui-ci afin d'alléger la compréhension; et c'est pour çà que j'ai rajouter un autre question après.

Désormais, il ne me manque plus que le problème de la gestion de la colonne date et la date de MAJ de la ligne.

Pour la date de livraison : (colonne B)
Je choisis la solution d'avoir accès à de petits boutons +/- qui s'afficheraient lorsque l'on clique sur la cellule (et disparait une fois sortie afin de ne pas les voir lorsqu'on imprime le document). De plus, je fait ce choix car en général ce sera pour le lendemain, surlendemain ou au maximum 1 semaine après (plus rarement).
Je n'utiliserais pas MDF calendar car ce fichier va se ballader sur plusieurs postes et je ne pourrais pas l'installer partout.

Pour la date de MAJ : (colonne J)
Je pensais utiliser la fonction "MAINTENANT" mais je ne sais pas si c'est la solution au vue des problèmes de réactualisation énoncés un ou deux message au-dessus.

Enfin, pour te rassurer, je pense être proche de l'objectif, car je commence déjà à faire tourner le fichier; donc je pourrais prochainement (après avoir résolu les points ci-dessus!) noter le message comme [RESOLU].

Un grand merci à toi (encore et toujours génial ce site!!)

PS : je joint le fichier pour les exemples
Pièce jointe:
xls Planning appro pour Nino63 version C.xls   [ Taille: 78.50 Ko - Téléchargements: 440 ]
Hors Ligne
Rapport   Haut 

Re: liste de choix et recherche
#12
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 23-06-2010 22h29
Bonsoir Nino63, JackyAmiens, le Forum,

Tu trouveras en pièce jointe ton fichier modifié selon ma perception du sujet et qui devrait répondre (je crois) à l'ensemble de tes souhaits.

Tout d'abord, petites explications concernant les points suivants :

Citation :
Nino63 a écrit :
Pour la date de MAJ : (colonne J)
Je pensais utiliser la fonction "MAINTENANT" mais je ne sais pas si c'est la solution au vue des problèmes de réactualisation énoncés un ou deux message au-dessus.
Tu n'étais pas loin de la solution à vrai dire, mais tu fais simplement l'erreur de vouloir insérer dans la cellule la Fonction MAINTENANT() plutôt que sa valeur simple (c'est à dire une constante).

Par nature, une fonction est constamment recalculée par Excel, c'est même le propre des fonctions ! Si tu insères une fonction, il ne faut pas t'étonner de voir la cellule varier dans le temps, c'est son objectif.

Il convient donc d'insérer la VALEUR de la date du jour et non la FONCTION de date du jour.

Et donc, par VBA, au lieu de  :
ActiveCell.Offset(0, 7).Value = "=NOW()"
Il te fallait faire simplement :
ActiveCell.Offset(0, 7).Value = Now
Now étant l'équivalent de la fonction MAINTENANT() dans VBA. Tu remarqueras que je n'insère pas de signe "=" dans la cellule, mais simplement le résultat (valeur) de la fonction Now.

Nb: si on veut se passer de l'heure, alors on utilisera la fonction Date plutôt que Now.

Citation :
Nino63 a écrit :
Pour la date de livraison : (colonne B)
Je choisis la solution d'avoir accès à de petits boutons +/- qui s'afficheraient lorsque l'on clique sur la cellule (et disparait une fois sortie afin de ne pas les voir lorsqu'on imprime le document). De plus, je fait ce choix car en général ce sera pour le lendemain, surlendemain ou au maximum 1 semaine après (plus rarement).
Pour répondre au mieux à ta demande, j'ai joué sur la méthode OnKey de l'objet Application (voir l'aide VBA pour les détails).
Attention toutefois avec l'utilisation de cette méthode OnKey. Il convient de l'utiliser avec prudence et réflexion si tu ne veux pas te retrouver avec des effets inopportuns dans ton application Excel ! Cette méthode est "liée" à l'objet Application, donc à Excel et non au classeur. Ca veut donc dire que si tu ne désactives pas son utilisation avant de quitter le classeur, la méthode reste toujours active pour les classeurs suivants : plantages assurés !!!
On prend donc toujours soin de désactiver ses effets au plus tôt dans le traitement, lorsqu'on en n'a plus besoin. Et on prend aussi la précaution de la désactiver avant la fermeture du classeur en question (voir le module de code de l'objet ThisWorkbook dans l'exemple joint).

Pour orienter l'utilisateur, je me suis contenté d'afficher un message de saisie par l'option de Validation de données des cellules concernées. A toi de voir, si ça vaut vraiment le coup de maintenir ce message pour l'utilisateur ou non.

Je me suis également permis de réviser ton code et l'optimiser un peu (le simplifier également). J'ai aussi pris l'initiative de rassembler tes listes dans un seul et même onglet, côte à côte. Ca permet notamment de faire gagner un peu de poids à ton fichier.

J'ai donc utilisé cette fois le code suivant :

DANS LE MODULE DE CODE DE L'OBJET THISWORKBOOK
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Désactiver les touches + ou - (retour au mode normal)
    TouchesPM False
End Sub

DANS LE MODULE DE CODE DE LA FEUILLE PLANNING
Option Explicit
' Auteur : myDearFriend!  -  www.mdf-xlpages.com

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub   'ne gère pas la sélection de plage
    If Not Application.Intersect(Target, UsedRange, Range("B13:B65536")) Is Nothing Then
        'Activation touches + et -
        TouchesPM True
    Else
        TouchesPM False
        If Not Application.Intersect(Target, UsedRange, Range("C13:C65536,G13:G65536")) Is Nothing Then
            'On passe un argument à valeur 1 ou 10 selon la liste souhaitée
            AffichListe IIf(Target.Column = 3, 1, 10)
        End If
    End If
End Sub

DANS UN MODULE DE CODE STANDARD (ex: Module1)
Option Explicit
' Auteur : myDearFriend!  -  www.mdf-xlpages.com

Sub AffichListe(NCol As Byte)   'NCol=1 liste SMC /// NCol=10 liste Chargement
Dim CB As CommandBar
Dim M As CommandBarPopup, M1 As CommandBarPopup, Mx As CommandBarButton
Dim TabTemp As Variant
Dim T As String
Dim L As Long
    'On mémorise la "liste SMC" ou la "liste chargement" des données
    With Sheets("Listes")
        L = .Cells(.Rows.Count, NCol).End(xlUp).Row
        TabTemp = .Range(.Cells(2, NCol), .Cells(L, NCol + 3)).Value
    End With
    'On crée une barre de menu temporaire
    On Error Resume Next
    Application.CommandBars("MenuD").Delete
    On Error GoTo 0
    Set CB = Application.CommandBars.Add("MenuD", msoBarPopup, , True)
    For L = 1 To UBound(TabTemp, 1)
        '1er niveau du menu (niveau principal)
        Set M = ElmtMenu(TabTemp(L, 1), CB, True)
        '
        If NCol = 1 Then    'Selon la liste cible
            '2ème niveau du menu
            Set M1 = ElmtMenu(TabTemp(L, 2), M, True)
            'Dernier niveau du menu
            Set Mx = ElmtMenu(TabTemp(L, 3), M1, False)
        Else
            'Dernier niveau du menu
            Set Mx = ElmtMenu(TabTemp(L, 2), M, False)
        End If
        'Action
        T = "'Maj """ & M.Caption & "|"
        If NCol = 1 Then
            T = T & M1.Caption & "|"
        End If
        Mx.OnAction = T & Mx.Caption & """'"
    Next L
    'Affiche le menu
    With Application.CommandBars("MenuD")
        If .Controls.Count > 0 Then .ShowPopup
        .Delete
    End With
End Sub

Private Function ElmtMenu(ByVal T$, MenuParent As Object, Pop As Boolean) As Object
Dim M As CommandBarControl
    On Error Resume Next
    Set M = MenuParent.Controls(T)
    On Error GoTo 0
    If M Is Nothing Then
        Set M = MenuParent.Controls.Add(IIf(Pop, msoControlPopup, msoControlButton), , , , True)
        M.Caption = T
    End If
    Set ElmtMenu = M
End Function

Sub Maj(ByVal T As String)
Dim TabTemp() As String
Dim C As Byte
    'MAJ cellules
    TabTemp = Split(T, "|")
    For C = 0 To UBound(TabTemp)
        ActiveCell.Offset(0, C).Value = TabTemp(C)
    Next C
    'Date de MAJ
    Cells(ActiveCell.Row, 10).Value = Now
End Sub

Sub TouchesPM(A As Boolean)
    With Application
        If A Then
            .onkey "{+}", "'DatPM 1'"
            .onkey "{-}", "'DatPM -1'"
        Else
            .onkey "{+}"
            .onkey "{-}"
        End If
    End With
End Sub

Sub DatPM(SgnPM As Integer)
Dim D As Date
    If IsDate(ActiveCell.Value) Then
        ActiveCell.Value = ActiveCell.Value + SgnPM
    End If
End Sub

En espérant que ça te soit utile...

Cordialement,


Pièce jointe:
zip Planning appro pour Nino63 version mDF.zip   [ Taille: 17.33 Ko - Téléchargements: 477 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: liste de choix et recherche
#13
Débutant XLPages

Inscription: 17/09/2009

Messages: 13

Système d'exploitation:
PC
Version Excel utilisée:
2002,2003
Posté le : 24-06-2010 09h57
Magnifique travail!!
C'est très agréable de travailler avec des personnes très compétente.
Grand merci.

2 requêtes cependant :
Date de MAJ :
Que faut-il changer si je veux que çà se réactualise uniquement par rapport à la modification des colonnes B (date) ou C (choix de la marchandise). Et non C (choix de la marchandise ou G (provenance).

Modification de la date de livraison
Sauf erreur de ma part, je n'arrive pas à modifier avec les touche +/- du pavé numérique.
Seulement avec les + (touche "shift =") et - (touche "6" clavier central).
Si ce n'est pas possible, on trouvera d'autres touches de remplacement du genre "a" et "q" ou  "a" et "p" ou "1" et "9"...

ENORME MERCI pour ta réactivité.
Hors Ligne
Rapport   Haut 

Re: liste de choix et recherche
#14
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 24-06-2010 15h44
Bonjour Nino63, JackyAmiens, le Forum,

Citation :
Nino63 a écrit :
Date de MAJ :
Que faut-il changer si je veux que çà se réactualise uniquement par rapport à la modification des colonnes B (date) ou C (choix de la marchandise). Et non C (choix de la marchandise ou G (provenance).


J'ai supprimé les 2 lignes suivantes de la procédure Sub Maj(ByVal T As String) du module de code Module1 :
   'Date de MAJ
    Cells(ActiveCell.Row, 10).Value = Now
Et j'ai ajouté la procédure suivante dans le module de code de la Feuille "Planning" :
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub   'ne gère pas la modification de plage
    If Not Application.Intersect(Target, UsedRange, Range("B13:C65536")) Is Nothing Then
        'Date de MAJ
        Cells(ActiveCell.Row, 10).Value = Now
    End If
End Sub

Tu trouveras en pièce jointe le fichier modifié en conséquence.

Citation :
Nino63 a écrit :
Modification de la date de livraison
Sauf erreur de ma part, je n'arrive pas à modifier avec les touche +/- du pavé numérique.
Seulement avec les + (touche "shift =") et - (touche "6" clavier central).
Si ce n'est pas possible, on trouvera d'autres touches de remplacement du genre "a" et "q" ou  "a" et "p" ou "1" et "9"...
Effectivement, petit problème pour moi, je travaille exclusivement avec un portable, donc pas de clavier numérique chez moi !

Sauf erreur, tu devrais pouvoir tester en modifiant la procédure suivante du module de code Module1 :
Sub TouchesPM(A As Boolean)
    With Application
        If A Then
            .onkey "{+}", "'DatPM 1'"
            .onkey "{-}", "'DatPM -1'"
        Else
            .onkey "{+}"
            .onkey "{-}"
        End If
    End With
End Sub
A remplacer (pour test) par :
Sub TouchesPM(A As Boolean)
    With Application
        If A Then   'Activation
            .onkey "{" & vbKeyAdd & "}", "'DatPM 1'"
            .onkey "{" & vbKeySubtract & "}", "'DatPM -1'"
        Else        'Désactivation
            .onkey "{" & vbKeyAdd & "}"
            .onkey "{" & vbKeySubtract & "}"
        End If
    End With
End Sub

Sinon, dans l'exemple joint, j'ai remplacé l'appui sur les touches +/- par les touches Flèches HAUT/BAS, si ça peut te dépanner (voir d'autres combinaisons possibles dans l'aide VBA sur "OnKey").

Cordialement,
Pièce jointe:
zip Planning pour Nino63 version mDF.zip   [ Taille: 20.38 Ko - Téléchargements: 473 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: liste de choix et recherche
#15
Débutant XLPages

Inscription: 17/09/2009

Messages: 13

Système d'exploitation:
PC
Version Excel utilisée:
2002,2003
Posté le : 28-06-2010 12h22

SUPER!!

çà m'a l'air bien parfait tout çà.

Juste une dernière demande (je crois que j'en avais parler plus haut dans un message) :
Dans la colonne date (colonne B) les flêches gauche-droite marchent bien. Cependant, je suis obligé de saisir une date, donc serait-il possible de pré-remplir la cellule automatiquement lorsque la cellule d'à côté (colonne C) est renseigné. Dans ce cas, la cellule date aurait pour valeur la date de "demain" (aujourd'hui +1 je suppose!! ).
Et dans l'idéal même, travailler en jour ouvrable (puisque ce planning ne fonctionnera que du lundi au vendredi); mais là c'est peut-être trop demander.

Encore merci pour le boulot réalisé. Ce site est merveilleux, et devrait même être intégrer dans les budgets formation tellement on y apprend des choses!!

Hors Ligne
Rapport   Haut 

Re: liste de choix et recherche
#16
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 28-06-2010 21h10
Bonsoir Nino63, le Forum,

Nino63, as-tu seulement essayé de le faire par toi-même ?
Que tu rencontres une difficulté avec cette histoire du jour ouvré d'accord, mais sinon, c'était quand même pas si compliqué que ça d'essayer...


Une solution parmi d'autres donc... Dans le module de code de la feuille Planning :

Remplacer la procédure suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub   'ne gère pas la modification de plage
    If Not Application.Intersect(Target, UsedRange, Range("B13:C65536")) Is Nothing Then
        'Date de MAJ
        Cells(ActiveCell.Row, 10).Value = Now
    End If
End Sub
Par celle-ci :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim D As Date
    If Target.Count > 1 Then Exit Sub   'ne gère pas la modification de plage
    If Not Application.Intersect(Target, UsedRange, Range("B13:C65536")) Is Nothing Then
        'Date de Livraison
        With Cells(ActiveCell.Row, 2)
           If .Value = "" Then
                'Date = aujourd'hui + 1 jour ouvré
                D = Date + 1
                D = IIf(Weekday(D, vbMonday) < 6, D, IIf(Weekday(D, vbMonday) < 7, D + 2, D + 1))
                .Value = D
            End If
        End With
        'Date de MAJ
        Cells(ActiveCell.Row, 10).Value = Now
    End If
End Sub

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: liste de choix et recherche
#17
Débutant XLPages

Inscription: 17/09/2009

Messages: 13

Système d'exploitation:
PC
Version Excel utilisée:
2002,2003
Posté le : 29-06-2010 08h54
Merci beaucoup pour tous ces renseignements.

Je vais donc continuer à faire tourner cette version test.

Cependant, je pense que je vais pouvoir [SOLDER] ce sujet.

Vive mdf!!
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes