Microsoft 365 Conditionner l'accès à une page d'un multipage

TCHIS

XLDnaute Occasionnel
Bonjour à tous et à toutes.

Encore une fois je me redirige vers vous dans le cadre de mon projet. En gros je monte un outil sur Excel pour faire un suivi de Gammes Opératoires.
  • Sans entrer sur le langage et l'aspect technique de l'outil je viens vers vous pour parvenir à réaliser une action autrement dit une Fonction que doit présenter mon outil au vu du besoin émis.

Cette action porte sur l'accès à une des pages (Page 2) dédiée au renseignement de suivi existant c'est-à-dire les suivi qui ont été généré dans la Page destinée à la création d'un nouveau suivi.

Page 1 (Onglet de saisie de suivi de Gammes Opératoires)
Page 2 (Onglet de renseignement de suivi de Gammes Opératoires)

Ce qui est recherché est que l'accès à cette page 2 puisse se faire de deux manières.
  • La première possibilité :
Au double Clique sur une des lignes de ma ListView on ouvre directement la Page 2.
Cette page 2 présente des contrôles (TextBox et ComboBox) parmi lesquels il y en aura certains qui doivent être préchargés (C'est-à-dire présenteront les données pour la ligne double cliquée qui ont déjà été saisie en Page 1 mais qui peuvent être modifié) Et d'autres Vides car ce sont ces contrôles Vides qui vont être utilisés pour le renseignement de ces suivis au fur et à mesure.

Notons que tous ces contrôles destinés au renseignement ne seront pas forcement toutes renseignés le même jour. En bref à chaque fois qu'on double clique sur une Ligne de la ListView et qu'on ouvre la page 2 cette page 2 présentera les contrôles avec des données préchargés pour les contrôles qui ont été renseigné lors des derniers renseignements
  • La deuxième possibilité :
Serait qu'au simple clique sur l'onglet de renseignement de suivi de Gammes Opératoires, qu'on passe d'abord par une boite de dialogue qui demandera le N° De suivi à renseigner.
Et des lors que la boite de dialogue donne l'accès à la page 2 qu'on est comme à la première manière les contrôles préchargés pour ceux-là qui ont déjà été renseigner.

Alors je ne sais pas si un sujet similaire a déjà été posé dans ce Forum toutefois quoi qu'il en soit je pense que c'est un exercice qui peut être intéressant et qui pourra être utile à plus d'un.​
Mais j'ai un code qui me permet de réaliser l'action deux non pas avec une page d'un multipage mais avec un USF à part (J'aimerai bien vous transférer le fichier mais pas de bol celui-ci est trop lourd). Mais voici le code qui marche pour avoir une boite de dialogue qui demandera le N° de l'enregistrement (Ligne) à renseigner​
VB:
Private Sub UserForm_Initialize()
'Déclaration de Variables
     Dim MonNum
     Dim MaLigne As Integer
    
     'Gestion D'erreur
    
     On Error GoTo 1
     'Affectation du Num de suivi
     MonNum = InputBox("Veuillez saisir le numero de suvi sur lequel il faut aujouter ou modifier des données")
     Me.TextBox4_N° = MonNum
     MaLigne = MonNum + 2
     'On se positionne ur la cellule du N° à modifier
     Cells(MaLigne, 1).Select
    
     'On teste le contenu de ma cellule active
     'Cette partie du code est pour pouvoir charger le contenu des cellules
     If ActiveCell <> "" Then
    
        Me.TextBox_TAG = Cells(MaLigne, 6)
        Me.ComboBox1_Sites = Cells(MaLigne, 7)
        Me.ComboBox2_Métier = Cells(MaLigne, 8)
        Me.ComboBox3_Fréquence = Cells(MaLigne, 9)
        Me.TextBox2_Equipmnt_Asso = Cells(MaLigne, 10)
        Me.TextBox3_Poste_Tech = Cells(MaLigne, 11)
        Me.ComboBox4_Etat = Cells(MaLigne, 12)
        Me.ComboBox5_Validité = Cells(MaLigne, 13)
        Me.ComboBox6_Demande = Cells(MaLigne, 14)
        Me.TextBox5_Date_Trans_SUP = Cells(MaLigne, 15)
        Me.TextBox6_Date_Val_SUP = Cells(MaLigne, 16)
        Me.TextBox7_Date_Trans_Val_SIM = Cells(MaLigne, 17)
        Me.TextBox8_Date_Val_SIM = Cells(MaLigne, 18)
        Me.TextBox9_Date_Val_MM = Cells(MaLigne, 19)
        Me.TextBox10_Date_Val_GMAO = Cells(MaLigne, 20)
        Me.TextBox11_Commentaire = Cells(MaLigne, 21)
        
        
    
     End If
1
End Sub
Donc le souci que j'ai c'est d'adapter le code pour passer par une boite de dialogue afin de réaliser le renseignement des suivis mais aussi de pouvoir le faire directement par double clique sur la ligne du suivi correspondant dans la ListView​
Avec tout ça je me demande si d'abord c'est au moins possible à faire🤔🤔🤔🤔 ?​
En pièce jointe se trouve le fichier sur lequel se trouve la fameuse page 2 où se portera tout le sujet.​
Je vous remercie d'avance déjà pour lire tous ce que j'ai mentionné en espérant que j'ai su faire passer ma demande le plus compréhensible que possible.

Bien de chose à tous et toutes
A+.​
 

Pièces jointes

  • TCHIS.xlsm
    76 KB · Affichages: 10
Solution
Ce qu'il y a avec ton code est que lorsqu'on lance le fichier les données de remplissage décalent les colonnes du tableau source.
Je n'ai toujours pas compris ce que tu veux dire... :(



Pour la développée on pourrait faire à ce que:
  1. Lorsqu'on clique sur Onglet de renseignement de suivi existant(Page2) et que l'Inputbox s'affiche qu'on reste d'abord sur Page1(Onglet de saisie de nouveaux suivis)
  2. Et si le numéro du suivi (Ligne) à renseigner ne correspond à aucun de ceux existants une Msgbox s'affiche avec un message "Le numéro de Suivi à renseigner ne correspond à aucun des suivis existants "Et toujours dans ce cas figure on reste toujours sur la Page1
D'ailleurs dans l'Inputbox au cas où on souhaiterai...

patricktoulon

XLDnaute Barbatruc
bonjour
de ce que j'ai compris
au doubleclick tu ouvre la page2
soit multipage1.value=1
et tu rempli tes controls avec les items/subitems de la ligne de la listview
c'est pas bien compliqué
et je suppose que c'est pour modifier ou ajouter une ligne dans le tableau
et c'est justement là ou vous vous êtes planté(conception minimale du tableau)

et oui supposons que je filtre ok
les indexs de ligne listview/tableau sur feuille ) ne correspondent plus forcement
alors pour retranscrire dans le tableau du usefrorm vers le tableau les données d'une ligne de la listview filtrée , tu va être obligé de batailler pour trouver la bonne ligne si tant est que ça soit possible
si vous aviez regardé de plus près l'exemple que je vous avais donné dans l'autre discussion
vous auriez vu que j'avais déjà prévu ça
et oui!!...... dans la listeview (et la variable tableau!!!)il y avait 2 colonnes supplémentaires (ligne et couleur) ce qui permettait d'avoir a tout moment l'index de ligne du tableau sur feuille correspondant à la ligne cliqué dans le listview
c'est une astuce que tout le monde connait
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
de ce que j'ai compris
au doubleclick tu ouvre la page2
soit multipage1.value=1
et tu rempli tes controls avec les items/subitems de la ligne de la listview
c'est pas bien compliqué
Oui, c'est ce que Tchis veut faire, mais tu réponds encore à côté de la question : tu dis qu'il est possible de remplir les contrôles en utilisant une autre méthode, je veux bien te croire mais ça n'a rien à voir avec la question qui est de savoir comment, d'une part par un double-clic afficher directement la page 2, d'autre part en cliquant sur l'onglet de la page 2 afficher une InputBox demandant le numéro du suivi avant d'afficher la page 2.

Ce dont tu parles là est l'étape suivante. 😉
 

patricktoulon

XLDnaute Barbatruc
bonjour toofatboy
il me semble avoir répondu pour la page non?

pour l'inputbox c'est simple
dans l''event change du multipage
VB:
if multipage1.value=1 then
x=inputbox.(.......)
end if
sinon au double click en même temps que l'activation de la page 2

mais je le redis si vous aviez regarder de plus près je vous avais simplifié la vie
mais bon tu semble avoir les choses en main alors je vous laisse
pour info la numérotation devrait être automatique à l'ajout de ligne
et devrait faire partie du tableau

que de dépense d’énergie pour un truc qui par expérience ne sera pas perenne
et va jouer des mauvais tours
mais bon depuis le début il semble que je parle dans le vide alors je vous laisse faire à votre guise

ps: @TCHIS dans l'autre discussion tu m'a attribué le point alors que tu suis la méthode de @TooFatBoy
met lui le point a lui
je veux pas qu'un jour on dise j'ai pecho un fichier dont patricktoulon a aidé a concevoir ,alors qu'il n'y a aucun de mes codes ou mes strategie de codage dedans, je veux pas être associé a ça
Bonne continuation
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
il me semble avoir répondu pour la page non?
Perso, je n'ai pas vu de réponse à ce sujet. 😔

mais bon tu semble avoir les choses en main alors je vous laisse
Je crois que tu me prends là pour beaucoup plus doué que je ne suis.
J'essaye juste de répondre aux questions que pose Tchis avec le peu de connaissances que j'ai et qui diminuent avec l'âge qui augmente... 🫤


pour l'inputbox c'est simple
dans l''event change du multipage
Ça c'est intéressant, car ça répondrait à la question posée.

Et ça m'intéresse aussi à titre personnel car n'ayant jamais utilisé de MultiPage, j'ai cherché son événement Change et je ne l'ai pas trouvé... 😔



ps: @TCHIS dans l'autre discussion tu m'a attribué le point alors que tu suis la méthode de @TooFatBoy
Tu ne parles pas du sujet où tu as supprimé tous tes messages au moins ??? 🤔
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
pour l'event multipage_change
VB:
Private Sub MultiPage1_Change()
MsgBox "vous etes dans la page " & MultiPage1.Pages(MultiPage1.Value).Name
End Sub
bien entendu l'index de page est le .value du multipage
pour info c'est en base 0
page 0 c'est la page1
page 1 c'est la page 2
etc.etc.

pour l'input
quand tu sélectionne la page 2 tu aura l'input
VB:
Private Sub MultiPage1_Change()
Dim x
'MsgBox "vous etes dans la page " & MultiPage1.Pages(MultiPage1.Value).Name
If MultiPage1.Value = 1 Then
x = InputBox("salut tape un chiffre ")

MsgBox x
End If
End Sub
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
pour l'event multipage_change
Code:
Private Sub MultiPage1_Change()
    MsgBox "vous etes dans la page " & MultiPage1.Pages(MultiPage1.Value).Name
End Sub
Merci 👍


[edit]
Je viens de regarder le code que j'avais pondu, et en fait j'avais bien trouvé le Multipage1_Change, puisque c'est l'événement que j'ai utilisé... 🙃
En fait, celui dont je cherchais l'existence, c'étai Multipage1_Page1_Activate mais ne le trouvant pas je m'étais rabattu sur Multipage1_Change. ;)
[/edit]
 
Dernière édition:

TCHIS

XLDnaute Occasionnel
Bonjour à tous
Sacré boulot @TooFatBoy
Bonjour,

Un début de piste en pièce jointe.
Comme je l'ai mentionné j'ai étudié les Lignes de code que tu as mis en place et comme tu l'as mentionné
C'est un début de piste d'ailleurs c'est un sacré bon début de piste🤩🤩.

Mais encore pour optimiser ce code le travail se postera sur la macro dite : Remplirpage2(NumLig)
dont les fonctions sont de précharger le contenu des contrôles (TexTBox & ComboBox) associés aux cellules déjà rempli plus précisément en page1 lors de la saisie d'un nouveau suivi et les renvoyer dans la feuilles sources.

Ce qu'il y a avec ton code est que lorsqu'on lance le fichier les données de remplissage décalent les colonnes du tableau source.
N.B: Je tiens à précisément que ton code m'a vraiment aider et que j'ai commencé par travailler dessus pour que les colonnes ne se décalent pas lorsqu'on renseigne.

Alors ce que j'ai eu à faire c'est d'adapter le code de sorte à ce que les modifications à apporter sur les lignes agissent correctement.(J'avais vraiment envie d'apporter une touche personnelle)

Sauf que le souci est que les modifications agissent uniquement sur ma ligne 3 (Suivi N°1) quel que soit le Numéro de saisie taper dans l'inputBox ou même quand on passe par le double clique.

Il y a deux fichier en PJ l'un avec ton code parent(TooFatBoy)
L'autre avec ton code que j'ai adapté(TCHIS)

Vous pouvez m'aider à ce que le renseignement s'appliquent bien sur le suivi désigner.


Et pour ce qui est de la macro permettant d'accéder à la Page2 via une boite de dialogue (InputBox)
VB:
Private Sub MultiPage1_Saisie_Renseignement_Suivie_Change()
'Accès page 2 (Lignes de code permettant d'accéder à la page 2 via le simple clique sur l'onglet renseignement de suivi)
Dim NumSuivi
    If MultiPage1_Saisie_Renseignement_Suivie.Value <> 1 Then Exit Sub
    If Not DblClic Then
        NumSuivi = Application.InputBox("Veuillez entrer le n° de suivi", "n° suivi", Type:=1)
        If NumSuivi = False Then Exit Sub
        RemplirPage2 (NumSuivi)
    End If
End Sub
Pour la développée on pourrait faire à ce que:
  1. Lorsqu'on clique sur Onglet de renseignement de suivi existant(Page2) et que l'Inputbox s'affiche qu'on reste d'abord sur Page1(Onglet de saisie de nouveaux suivis)
  2. Et si le numéro du suivi (Ligne) à renseigner ne correspond à aucun de ceux existants une Msgbox s'affiche avec un message "Le numéro de Suivi à renseigner ne correspond à aucun des suivis existants "Et toujours dans ce cas figure on reste toujours sur la Page1
D'ailleurs dans l'Inputbox au cas où on souhaiterai annuler ou fermer l'Inputbox on doit toujours rester sur la page 1.

En conclusion tant que le numéro entré ne correspond à aucun suivi la page2 ne s'ouvre pas
 

Pièces jointes

  • TCHIS.xlsm
    67.7 KB · Affichages: 3
  • TooFatboy.xlsm
    52.5 KB · Affichages: 3
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Mais encore pour optimiser ce code le travail se postera sur la macro dite : Remplirpage2(NumLig)
dont les fonctions sont de précharger le contenu des contrôles (TexTBox & ComboBox) associés aux cellules déjà rempli plus précisément en page1 lors de la saisie d'un nouveau suivi et les renvoyer dans la feuilles sources.
Dans ce que j'avais pondu, le but de RemplirPage2 était seulement, comme son nom l'indique, de remplir les contrôles de la Page2 avec les valeurs se trouvant dans le tableau de la feuille "Source".


Ce qu'il y a avec ton code est que lorsqu'on lance le fichier les données de remplissage décalent les colonnes du tableau source.
Mon code ne fait que remplir les contrôles de la Page2, donc il ne saurait décaler les données dans le tableau de la feuille "Source". ;)
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Ce qu'il y a avec ton code est que lorsqu'on lance le fichier les données de remplissage décalent les colonnes du tableau source.
Je n'ai toujours pas compris ce que tu veux dire... :(



Pour la développée on pourrait faire à ce que:
  1. Lorsqu'on clique sur Onglet de renseignement de suivi existant(Page2) et que l'Inputbox s'affiche qu'on reste d'abord sur Page1(Onglet de saisie de nouveaux suivis)
  2. Et si le numéro du suivi (Ligne) à renseigner ne correspond à aucun de ceux existants une Msgbox s'affiche avec un message "Le numéro de Suivi à renseigner ne correspond à aucun des suivis existants "Et toujours dans ce cas figure on reste toujours sur la Page1
D'ailleurs dans l'Inputbox au cas où on souhaiterai annuler ou fermer l'Inputbox on doit toujours rester sur la page 1.
Une proposition en pièce jointe.
 

Pièces jointes

  • TooFatboy_v2.xlsm
    62.4 KB · Affichages: 8

TooFatBoy

XLDnaute Barbatruc
Mais encore pour optimiser ce code le travail se postera sur la macro dite : RemplirPage2(NumLig)
dont les fonctions sont de précharger le contenu des contrôles (TexTBox & ComboBox) associés aux cellules déjà rempli plus précisément en page1 lors de la saisie d'un nouveau suivi et les renvoyer dans la feuilles sources.
Peux-tu expliquer ceci, stp ?
Pour moi la macro RemplirPage2 est censée simplement remplir la Page2 avec les infos du tableau, soit de la ligne double-cliquée, soit du numéro saisi.
Elle n'est pas censé toucher à la page1, et encore moins écrire dans le tableau dans la feuille.
 

Discussions similaires

Réponses
15
Affichages
665
Compte Supprimé 979
C
Réponses
20
Affichages
733
Réponses
8
Affichages
355

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou