XL pour MAC Transfert de données

kimowen

XLDnaute Nouveau
Bonjour

Voilà j'essaye de créer un petit fichier qui me permettra de récupérer des données pour des pronos interne. Sur l'onglet Formulaire chacun des participants pourra choisir ses pronos suivant les journées, lorsqu'il a terminé il devra cliquer sur le bouton validation.
De là les données seront transférées dans l'onglet Recueil de données et ceci à chaque participation sans effacer les précédentes.
La je n'arrive pas à faire cette partie sachant que j'aimerais qu'elle ne soit pas consultable par les participants comment dois faire?

Je vous joins mon fichier merci pour votre aide.

kiki
 

Pièces jointes

  • formulaire essai rugby.xlsx
    254.1 KB · Affichages: 5
Solution
Bonsoir à tous, Bonsoir @kimowen
J'ai planché sur ton exercice.
J'ai dû introduire une table avec la liste des Pseudos et leur mot de passe associé dans l'onglet "PARAMÈTRES" dans l'exemple joint il y a ceux-ci :
PseudoMot de passe
Pseudo1MdP1
Pseudo2MdP2
Pseudo3MdP3
Pseudo4MdP4
Pseudo5MdP5
Pseudo6MdP6
à toi de mettre à jour cette table (il s'agit d'un tableau structuré qui s'étend automatiquement lorsque l'on tape une nouvelle valeur sous sa dernière ligne)
J'ai d'ailleurs transformé les autres listes de cet onglet en tableau...

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir à tous, Bonsoir @kimowen
J'ai planché sur ton exercice.
J'ai dû introduire une table avec la liste des Pseudos et leur mot de passe associé dans l'onglet "PARAMÈTRES" dans l'exemple joint il y a ceux-ci :
PseudoMot de passe
Pseudo1MdP1
Pseudo2MdP2
Pseudo3MdP3
Pseudo4MdP4
Pseudo5MdP5
Pseudo6MdP6
à toi de mettre à jour cette table (il s'agit d'un tableau structuré qui s'étend automatiquement lorsque l'on tape une nouvelle valeur sous sa dernière ligne)
J'ai d'ailleurs transformé les autres listes de cet onglet en tableau structuré.

Lors de la fermeture du classeur, les onglets "PARAMÈTRES" et "Recueil de données" sont masqués xlSheetVeryHidden : l'utilisateur ne peut pas les afficher via l'interface EXCEL.

Son mot de passe est demandé à l'utilisateur lorsqu'il veut enregistrer ses pronostiques, il peut aussi ré-afficher des pronostiques déjà enregistrés en saisissant son Pseudo et la journée qu'il veut revoir (toujours avec mot de passe).
J'ai un peu modifié le formulaire avec des formats conditionnels pour être plus cohérent lors de la saisie.

J'ai ajouté un onglet Accueil avec 2 choix "Accès aux Pronostiques" et "Accès Responsable"
L'accès Responsable se fait via un mot de passe particulier enregistré dans la constante MdPAdmin du module M01 (Actuellement "MdP_Prov", à changer par tes soins)
Module M01
VB:
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Public Const MdPAdmin As String = "MdP_Prov"
'_____________________________________________
'

'Enregistrement des pronostiques
Sub Record_Prono()
     Dim Tb(1 To 1, 1 To 16), MdP As String, RépMdP, TbMdP, Lgn As Long, Colonne As Integer, Pseudo As String, Journée
    
     If F01_Prono.[_Pseudo] = "" Or F01_Prono.[_Journée] = "" Then MsgBox "Renseignez d'abord Pseudo et Journée !": Exit Sub

'____________________________________________________________________________________________________________________
'Vérification éventuelle : les résultats de la journée sont-ils renseignés ? (voir conditions pour la phase finale)
'     If IsNumeric(F01_Prono.[_Journée]) Then
'          For i = 1 To 7
'               If F01_Prono.Evaluate("_Match0" & i) = "" Or F01_Prono.Evaluate("_Écart0" & i) = "" Then MsgBox "Renseignez d'abord tous les résultats !": Exit Sub
'          Next
'     End If
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
'Lecture du Pseudo et de la journée
     Pseudo = F01_Prono.[_Pseudo]: Journée = F01_Prono.[_Journée]
    
'Recherche du mot de passe du pseudo
     MdP = "": TbMdP = F03_Param.ListObjects("_Tb_MdP").Range.Value
     For i = 2 To UBound(TbMdP, 1)
          If TbMdP(i, 1) = Pseudo Then MdP = TbMdP(i, 2): Exit For
     Next i
     'Demande du mot de passe
     RépMdP = Application.InputBox(Title:="Les pronostiques existent déjà", Prompt:="Mot de passe :", Type:=2)
     If RépMdP <> MdP Then MsgBox "Mot de passe incorrect !" & Chr(10) & "Abandon": Exit Sub
    
'Enregistrement des pronos
     'Lecture des pronos (Remplir Tb)
     Tb(1, 1) = Pseudo: Tb(1, 2) = Journée
     With F01_Prono
          For i = 1 To 7
               Tb(1, 1 + 2 * i) = .Evaluate("_Match0" & i)
               Tb(1, 2 + 2 * i) = .Evaluate("_Écart0" & i)
          Next i
     End With
     'Ecriture dans le recueil
     With F02_Recueil
          Colonne = .ListObjects(1).Range.Cells(1).Column   'N° de la colonne 1
          Lgn = .Cells(.Rows.Count, Colonne).End(xlUp).Row  'Accès à la dernière ligne
          Lgn = Lgn + Abs(.Cells(Lgn, Colonne) <> "")       'Si la dernière ligne n'est pas vide ligne suivante
          .Cells(Lgn, Colonne).Resize(1, 16).Value = Tb     'Remplir la ligne avec Tb
     End With
     MsgBox "Pronostiques enregistrés."

'RàZ du formulaire (sauf le Pseudo)
     Application.EnableEvents = False
     F01_Prono.[_Journée].ClearContents
     For j = 1 To 7
          F01_Prono.Evaluate("_Match0" & j).ClearContents
          F01_Prono.Evaluate("_Écart0" & j).ClearContents
     Next j
     F01_Prono.[_Journée].ClearContents
     Application.EnableEvents = True
    
     F01_Prono.[_Journée].Activate
    
End Sub

Sub Accès_Admin()

     RépMdP = Application.InputBox(Title:="Pronos TOP14 - Accès Admin", Prompt:="Mot de passe :", Type:=2)
     If RépMdP <> MdPAdmin Then MsgBox "Mot de passe incorrect !" & Chr(10) & "Abandon": Exit Sub
    
     F02_Recueil.Visible = xlSheetVisible
     F03_Param.Visible = xlSheetVisible
     F02_Recueil.Activate
    
End Sub

Code de la Feuille "Formulaire"
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

     Dim Tb, Trouvé As Boolean
    
     If Target.Address <> Me.[_Pseudo].Address And Target.Address <> Me.[_Journée].Address Then Exit Sub
    
     Pseudo = Me.[_Pseudo]: Journée = Me.[_Journée]
     MdP = "": Tb = F03_Param.ListObjects("_Tb_MdP").Range.Value
     For i = 2 To UBound(Tb, 1)
          If Tb(i, 1) = Pseudo Then MdP = Tb(i, 2): Exit For
     Next i
        
     Tb = F02_Recueil.ListObjects(1).DataBodyRange.Value
     For i = 1 To UBound(Tb)
          If Tb(i, 1) = Pseudo And Tb(i, 2) = Journée Then
               Trouvé = True
               RépMdP = Application.InputBox(Title:="Les pronostiques existent déjà", Prompt:="Mot de passe :", Type:=2)
               If RépMdP <> MdP Then Exit Sub
               Application.EnableEvents = False
               For j = 1 To 7
                    Me.Evaluate("_Match0" & j) = Tb(i, 1 + 2 * j)
                    Me.Evaluate("_Écart0" & j) = Tb(i, 2 + 2 * j)
               Next j
               Application.EnableEvents = True
               Exit For
          End If
     Next i
     If Not Trouvé Then
          Application.EnableEvents = False
          For j = 1 To 7
               Me.Evaluate("_Match0" & j).ClearContents
               Me.Evaluate("_Écart0" & j).ClearContents
          Next j
          Application.EnableEvents = False
     End If
    
End Sub

Code du Classeur (ThisWorkbook)
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

     Application.EnableEvents = False
     'Effacer le formulaire de pronos
     F01_Prono.[_Journée].ClearContents
     F01_Prono.[_Pseudo].ClearContents
     For j = 1 To 7
          F01_Prono.Evaluate("_Match0" & j).ClearContents
          F01_Prono.Evaluate("_Écart0" & j).ClearContents
     Next j
     Application.EnableEvents = True
    
     'Masquer les feuilles admin
     F02_Recueil.Visible = xlSheetVeryHidden
     F03_Param.Visible = xlSheetVeryHidden
     F00_Accueil.Activate
     Me.Save
    
End Sub

Bien entendu le VBA est protégé contre l'affichage le mot de passe est le même : MdP_Prov à modifier également.

Voilà ça demande sans doute des améliorations mais c'est déjà un début ...
Amicalement
Alain
 

Pièces jointes

  • formulaire essai rugby.xlsm
    228.5 KB · Affichages: 4

kimowen

XLDnaute Nouveau
Bonsoir,

Bravo cela rempli au top ma demande, j'ai deux trois questions
Est il possible d'ajouter la date et heure de validation du pronos ?
Les pronostiqueurs peuvent ils voir l'ensemble des pronos ou seulement les leurs ?
J'aurais le même travail sur des versions sur d'autres sports pourrais tu me donner ce m^me type de coup de mains.

Mais avant tout un grand merci pour ton travail
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re bonsoir,
Est il possible d'ajouter la date et heure de validation du pronos ?
Oui il suffit de prévoir une colonne supplémentaire dans le tableau "Recueil de données"
Ça c'est fait ...
Les pronostiqueurs peuvent ils voir l'ensemble des pronos ou seulement les leurs ?
Il ne peuvent voir que les leurs, c'est le but du mot de passe. Fais des essais avec les pseudos et les mots de passe temporaires que j'ai mis dans l'exemple.
J'aurais le même travail sur des versions sur d'autres sports pourrais tu me donner ce m^me type de coup de mains
Le but du jeu c'est quand même que tu y arrives par tes propres moyens, en progressant, mais oui, moi ou un autre membre pourrions t'aider.

Amicalement
Alain

PS : Je suis sur PC et non pas sur MAC, tu auras peut-être des adaptations à faire
 

Pièces jointes

  • formulaire essai rugby.xlsm
    231 KB · Affichages: 3

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à tous, bonjour @kimowen
Je vous joins les deux fichiers sur lequel il faudrait dupliquer ton travail que tu as réalisé sur les pronos TOP14
Heu non, ça ne marche pas tout à fait comme ça. Il faut que tu t'impliques un peu plus ....
Pour le foot
  • Sur la feuille "PARAMÈTRES" Crée les tableaux structurés "_Tb_Équipes", "_Tb_Écarts" (pour les scores), "_Tb_Journées", "_Tb_MdP" (2 colonnes).
    1645092696077.gif


  • Sur la feuille "Recueil de données" Efface la mise en forme, ajoute "Date" entre "Journée" et "VAINQUEUR M1" puis crée le tableau structuré "_Tb_Recueil", mets le format "jj/mm/aaaa hh:mm" pour les dates

  • Sur la feuille "Formulaire" Crée les noms "_Match01" à "_Match10", "_Écart01" à "_Écart10", "_Pseudo", "_Journée"

  • Ouvre aussi le classeur Rugby

  • Pour te simplifier la vie copie la feuille Accueil du Rugby vers le Foot

    Dans le VBA (Alt +F11), double clic sur le projet et tape le mot de passe, copie le module M01 avec un glisser-déplacer du projet Rugby au projet Foot.

  • Adapte le code au nombre de matches de foot : (remplacer les texte rouges barrés par les textes verts
    Enrichi (BBcode):
    Sub Record_Prono()Dim Tb(1 To 1, 1 To 17 23), MdP As String, RépMdP, TbMdP, Lgn As Long, Colonne As Integer, Pseudo As String, Journée
    ...
    'Vérification éventuelle : les résultats de la journée sont-ils renseignés ? (voir conditions pour la phase finale)
    '     If IsNumeric(F01_Prono.[_Journée]) Then
    ' For i = 1 To 7 10
    '               If F01_Prono.Evaluate("_Match0" & i) = "" Or F01_Prono.Evaluate("_Écart0" & i) = "" Then MsgBox "Renseignez d'abord tous les résultats !": Exit Sub
    '          Next
    '     End If
    ...
    'Enregistrement des pronos
         'Lecture des pronos (Remplir Tb)
         Tb(1, 1) = Pseudo: Tb(1, 2) = Journée: Tb(1, 3) = Now()
         With F01_Prono
    For i = 1 To 7 10
                   Tb(1, 2 + 2 * i) = .Evaluate("_Match0" & i)
                   Tb(1, 3 + 2 * i) = .Evaluate("_Écart0" & i)
              Next i
         End With
    ....
    .Cells(Lgn, Colonne).Resize(1, 17 23).Value = Tb     'Remplir la ligne avec Tb
         End With
         MsgBox "Pronostiques enregistrés."
    
    'RàZ du formulaire (sauf le Pseudo)
         Application.EnableEvents = False
         F01_Prono.[_Journée].ClearContents
    For j = 1 To 7 10
              F01_Prono.Evaluate("_Match0" & j).ClearContents
              F01_Prono.Evaluate("_Écart0" & j).ClearContents
         Next j
    ...

  • Donne les Code Names F00_Accueil, F01_Prono, F02_Recueil, F03_Param aux 4 feuilles (à la place de Feuil4, Feuil1, Feuil2, Feuil3 :
    1645092512864.png


  • Double clique sur ThisWorbook et recopie le code contenu dans ThisWorkbook de Rugby vers ThisWorkbook de Foot (Il n'y a pas besoin d'adapter le code)
    Enrichi (BBcode):
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
          Application.EnableEvents = False
          'Effacer le formulaire de pronos
          F01_Prono.[_Journée].ClearContents
          F01_Prono.[_Pseudo].ClearContents
          For j = 1 To 7
               F01_Prono.Evaluate("_Match0" & j).ClearContents
               F01_Prono.Evaluate("_Écart0" & j).ClearContents
          Next j
          Application.EnableEvents = True
        
          'Masquer les feuilles admin
          F02_Recueil.Visible = xlSheetVeryHidden
          F03_Param.Visible = xlSheetVeryHidden
          F00_Accueil.Activate
          Me.Save
        
     End Sub

  • Recopie le code de F01_Prono (Rugby) vers le code de F01_Prono Foot et fais l'adaptation aux nombre de matches (remplacer les deux 7 par deux 10) dans les deux boucles for j = 1 to 7 10 ... next

  • Pour finir protége le code VBA par un mot de passe
    1645095777842.png

    1645095865150.png


  • Ferme le classeur Rugby, va sur la feuille Accueil
    Modifie le lien hypertexte de Accès aux Pronostiques (vers le nom défini _Pseudo)
    Modifier la macro affectée à Accès Responsable (Macro Accès_Admin du classeur Foot)

Voilà, il il aura peut-être un peu de débogage mais ça devrait aller...

Amicalement
Alain

PS : en regardant les adaptations à faire, je me suis rendu compte d'un oubli lorsque j'ai ajouté la date aux pronos Rugby :
Enrichi (BBcode):
          .Cells(Lgn, Colonne).Resize(1, 16 17 ).Value = Tb     'Remplir la ligne avec Tb
Je te renvoie le fichier corrigé.
 

Pièces jointes

  • 1645095813225.png
    1645095813225.png
    22.3 KB · Affichages: 14
  • 1645092026933.gif
    1645092026933.gif
    323.5 KB · Affichages: 15
  • formulaire essai rugby.xlsm
    229.9 KB · Affichages: 2
Dernière édition:

Discussions similaires

Réponses
5
Affichages
98

Statistiques des forums

Discussions
312 115
Messages
2 085 453
Membres
102 890
dernier inscrit
selkis