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

Feuille avec Maitre/Détails

  • Initiateur de la discussion Initiateur de la discussion Zdz16
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Zdz16

XLDnaute Occasionnel
Bonjour à tous et toutes;

Est-il possible de créer sur une feuille une structure Maitre/Détails. Sur la même feuille ou avec l'entête dans une UserForm et les détails dans la feuille. Les deux devant être affichées en permanence.

Avec la partie Maitre fixe (doit apparaitre quelque soit la position horizontale dans la partie détails) avec la possibilité d'y saisir les clés de sélection des détails.

Par exemple :
Le maitre.
Est le code d'un client (Avec d'autres infos affichés)
Les détaills :
Les numéros de commandes, les articles la quantité,Etc..

Il est important que la partie entête soit affichée/Fixe quelque soit la déplacement horizontal/Vertical dans les détails.

Je pense à une userForm toujours visible (C'est l'entête) et en dessous la feuille. Mais voila, avant d'approfondir la chose j'aurai voulu savoir si c'est réalisable dans Excel ou si quelqu'un a réalisé la même chose.

Votre aide est la bienvenue

Merci d'avance
 
Re : Feuille avec Maitre/Détails

Bonjour zdz16,

Laisser un UserForm toujours ouvert et travailler sur la feuille est faisable, pour l'ouvrir il faut écrire UserForm1.Show 0

Mets nous un fichier avec des explications de ce que tu veux faire. D'après ce que j'ai compris, l'ouverture d'un UserForm n'est pas la seule possibilité.

A te relire

Martial
 
Re : Feuille avec Maitre/Détails

Bonjour Martial;

Comme quoi, le fait d'écrire permet de découvrir ?

Je pense avoir trouver une solution à ma question. L'utilisation d'un onglet personnalisé sur la Ruban bar d'excel. Dans ce ruban je vais mettre un onglet perso avec un groupe contenant des ComboBox de sélection et le tour est joué.

Je suis en cours de réalisation et si cela aboutit je vous en donnerai des nouvelles.

Merci pour la réponse

Cordialement
 
Re : Feuille avec Maitre/Détails

Super et c'est sympa, cela me permetterai d'avancer plus vite.

Actuellement j'ai déja généré le Ruban Bar et ajouter mes controls (ComboBox). J'ai les Sub Callbak correspondants. T'aurai pas un exemple de remplissage du ComboBox via les sub CallBak.

Merci d'avance
 
Re : Feuille avec Maitre/Détails

Quelques choses comme ça ?
HTML:
<group id="Chi05" label="Années précédentes" >
			<menu id="Menu01" label="Chiffre d'affaire" imageMso="PivotPlusMinusFieldHeadersShowHide" size="large" > 
				<!--Mettre en id l'année, celle-ci est récupérée dans la macro -->
				<button id="Chi2000" label="CA 2000" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
				<button id="Chi2001" label="CA 2001" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
      			<button id="Chi2002" label="CA 2002" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
      			<button id="Chi2003" label="CA 2003" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
				<button id="Chi2004" label="CA 2004" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
				<button id="Chi2005" label="CA 2005" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
      			<button id="Chi2006" label="CA 2006" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
      			<button id="Chi2007" label="CA 2007" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
				<button id="Chi2008" label="CA 2008" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
				<button id="Chi2009" label="CA 2009" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
      			<button id="Chi2010" label="CA 2010" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
      			<button id="Chi2011" label="CA 2011" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
				<button id="Chi2012" label="CA 2012" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
				<button id="Chi2013" label="CA 2013" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
      			<button id="Chi2014" label="CA 2014" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
      			<button id="Chi2015" label="CA 2015" imageMso="PivotPlusMinusFieldHeadersShowHide" onAction="FichierCA" /> 
			</menu> 
		</group>
 
Re : Feuille avec Maitre/Détails

Ensuite dans tes CallBacks tu colles

VB:
Sub FichierCA(control As IRibbonControl)
  Fichier = "CA_" & Right(control.ID, 4) & ".xls"
  On Error GoTo Fin
  Workbooks.Open Rép & Fichier
  Exit Sub
Fin:
  MsgBox "Le fichier n'existe pas" & Chr(13) & _
          "ou son emplacement n'est pas correcte"
End Sub

Cette macro m'ouvre des fichiers de CA en fonction des années.

A+
 
Re : Feuille avec Maitre/Détails

Pour Info :
Via vba, lors de l'importation je génère une feuille (ici feuil2) dans laquelle je stock les données en colonne pour les ComboBox (Ici Combo) . et à partir de cette feuille je charge le Combo. Ainsi je n'ai rien en dure
Voici un exemple de chargement

'Callback for Combo

Sub Combo_Load(control As IRibbonControl, index As Integer, ByRef returnedVal)

' Index est basé sur 0, il désigne l'indice de l'item dans le Combo (Le +1 car titre colonne)
' 5 : est le numéro de la colonne où sont les valeurs
returnedVal = Feuil2.Cells(index + 1 + 1, 5)

End Sub

Ici c'est le CallBack pour indiquer le nombre d'Item dans le combo

'Callback for Combo
Sub Combo_NbrItem(control As IRibbonControl, ByRef returnedVal)
returnedVal = 4
End Sub

Il est bien evident que les paramètres et arguments vont être dynamiques (selon la situation).

Cordialement
 
Re : Feuille avec Maitre/Détails

Bonjour à tous et toutes,

Je voulais partager avec vous un bout de code qui sert à savoir si la connexion réseau est présente ou non. Après quelques recherches, j'ai mixé le tout dans ce qui suit. En espérant que cela vous aidera.
Désoler pour le formattage, je ne sais pas faire pour inserer un code

Cordialement

' Attention API Externes et types pour les API ===========================================
' a mettre dans un module
' ============================================================================
Private Declare PtrSafe Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
Private Declare PtrSafe Function WSACleanup Lib "WSOCK32.DLL" () As Long
Public Declare PtrSafe Function inet_addr Lib "WSOCK32.DLL" (ByVal cp As String) As Long
Public Declare PtrSafe Function IcmpCreateFile Lib "icmp.dll" () As Long
Public Declare PtrSafe Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long
Private Declare PtrSafe Function IcmpSendEcho Lib "icmp.dll" (ByVal IcmpHandle As Long, _
ByVal DestinationAddress As Long, _
ByVal RequestData As String, _
ByVal RequestSize As Long, _
ByVal RequestOptions As Long, _
ReplyBuffer As ICMP_ECHO_REPLY, _
ByVal ReplySize As Long, _
ByVal Timeout As Long) As Long

Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128
Private Const WS_VERSION_REQD As Long = &H101
Private Const ICMP_SUCCESS As Long = 0

Private Type WSADATA
wVersion As Integer
wHighVersion As Integer
szDescription(0 To MAX_WSADescription) As Byte
szSystemStatus(0 To MAX_WSASYSStatus) As Byte
wMaxSockets As Long
wMaxUDPDG As Long
dwVendorInfo As Long
End Type

Private Type IP_OPTION_INFORMATION
Ttl As Byte
Tos As Byte
Flags As Byte
OptionsSize As Byte
OptionsData As Long
End Type

Public Type ICMP_ECHO_REPLY
Address As Long
Status As Long
RoundTripTime As Long
DataSize As Long
Reserved As Integer
ptrData As Long
Options As IP_OPTION_INFORMATION
data As String * 250
End Type

' ==================================================================================
' Déclaration des variables globales
' ==================================================================================
' -> Remplacez par vos valeurs

Public Const gDirRes = "\\Serveur'\Repertroire\" 'Repertoire réseau ('\' obligatoire)
private Const gIpaSrv = "xx.xxx.x.xxx" 'Adresse IP du serveur

' ==============================================================================
' Exemple d'utilisation
' ==============================================================================
If Not CtrlReseau(gDirRes, gIpaSrv) Then
wMesErr = "Vous n'êtes pas connecté au réseau ou la connexion n'est pas disponible. "
MsgBox wMesErr, vbCritical + vbOKOnly, "Erreur Application"
Exit Sub
End If

'+--------------------------------------------------------------------------+
'! Controle la connexion réseau !
'! sNetDir : Un répertoire sur le serveur !
'! sNetAip : Adresse Ip du serveur !
'+--------------------------------------------------------------------------+
Private Function CtrlReseau(sNetDir As String, sNetAip As String) As Boolean

Dim bFlgRes As Boolean
Dim InitSocket As Boolean
Dim StsSuccess As Long

'Variables pour le control du serveur
Dim Reply As ICMP_ECHO_REPLY
Dim sServer As String

Dim WSAD As WSADATA

If sNetDir = "" Or sNetAip = "" Then
MsgBox "CtrlReseau : Erreur Arguments" & Chr(10) & "Contacter le 'xxx' ", vbCritical + vbOKOnly, "Erreur Application"
CtrlReseau = False
Exit Function
End If

bFlgRes = False

'Récupération du nom du serveur à partir du nom du repertoire des données
gNomSrv = Mid$(sNetDir, 3, InStr(3, sNetDir, "\", vbTextCompare) - 3)

'Préparation configuration (Sockets) pour le contrôle réseau
InitSocket = WSAStartup(WS_VERSION_REQD, WSAD) = ICMP_SUCCESS

If InitSocket Then
StsSuccess = PingAdrIp(sNetAip, Reply) 'Ping de l'adresse IP avec retour du status
Call WSACleanup 'Clear des sockets.
If StsSuccess = 0 Then
bFlgRes = True 'Si retour d'un ping, c'est OK
End If
End If

CtrlReseau = bFlgRes

End Function

'+--------------------------------------------------------------------------+
'! Controle la connection réseau via l'envoi d'un ping !
'! sAdrIp : Adresse Ip du serveur !
'! Reply : Structure du retour du ping !
'+--------------------------------------------------------------------------+
Private Function PingAdrIp(sAdrIp As String, Reply As ICMP_ECHO_REPLY) As Long

'Function to ping an address and see if a response is obtained
Dim hIcmp As Long
Dim lAddress As Long
Dim lTimeOut As Long
Dim StringToSend As String

'Chaine de donnée courte à transmettre
StringToSend = "test"

'Timeout en ms
lTimeOut = 1000 'ICMP (ping)

'Convertir la chaine adresse en représentation long
lAddress = inet_addr(sAdrIp)

'Si nou avons une réponse valide
If (lAddress <> -1) And (lAddress <> 0) Then
'Créer le Handle pour les demandes ICMP.
hIcmp = IcmpCreateFile()

If hIcmp Then
'Ping l'adresse IP destination.
Call IcmpSendEcho(hIcmp, lAddress, StringToSend, Len(StringToSend), 0, Reply, Len(Reply), lTimeOut)

'Statut de retour
PingAdrIp = Reply.Status

'Fermer la handle de ICMP.
IcmpCloseHandle hIcmp
Else
MsgBox "Ping : Erreur ouverture du Handle ICPM" & Chr(10) & "Contacter le 'xxx'", vbCritical + vbOKOnly, "Erreur Application"
PingAdrIp = -1
End If
Else
PingAdrIp = -1
End If
End Function
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…