XL 2016 Programme excel 2016 - Impression d'un plan de table avec uniquement les tables occupées. Chaque Table = unTEXTBOX avec les noms des occupants.

gaby.jvx

XLDnaute Nouveau
Dans mon Programme Après l'édition du plan de Tables , qui s'affiche en bas de la feuille de calcul, par l'appui sur le bouton "Plan des tables"
A côté de ce plan de table il y a deux boutons de commande pour imprimer ce plan de tables ! un en format A4 et un en format 4 fois plus grand.
Pour l'impression j'ai désactivé l'impression des numéros des emplacements des Tables sur le plan .( Ceci pour pouvoir avoir le plan sans les numéros, et ainsi Numéroter les tables à la main , juste avant de mettre en place les tables dans la salle ! Ceci pour tenir compte des désidératas de dernière minutes des participants.) Mais je voudrais apporter une amélioration à mon Programme : Je voudrais imprimer uniquement, lors de l'impression du plan de tables , que les tables occupées par des personnes . Tout en ne modifiant pas le plan de table créé avec 42 tables permanentes (qui sont des textbox sur le plan).
Je joins une copie du Fichier Programme que j'ai déprotégé de son mot de passe.

Mon adresse Email : gaby.jvx@free.fr.
Encore merci d'avance pour votre aide.
gaby.jvx
 

Pièces jointes

  • MODELE- Association Repas Dansant - Créé -20-10-2022.xlsm
    346.4 KB · Affichages: 24

Gégé-45550

XLDnaute Accro
Bonjour,
Voici une solution : Masquer les Textbox vides
VB:
Private Sub CommandButton8_Click()
'Plan Tables

range("A520").Select

'Code qui trie les réservants par ordre de Tables puis complètre le plan de table

Dim Arr, S$, SS$, i%, k%, iLR%, Obj As OLEObject, rng As range
Worksheets("Feuil1").Protect Password:="BJ/CROUZET", UserInterfaceOnly:=True
TriS 3
DoEvents
iLR = Cells(1).End(xlDown).Row
Arr = range(Cells(2, 1), Cells(iLR, 4)).Value
k = 1
On Error GoTo GESTERR
For i = 1 To UBound(Arr)
    SS = ""
 If k <> Arr(i, 3) Then
        Set Obj = Worksheets("Feuil1").OLEObjects("TextBox" & k)
        S = Left(S, Len(S) - 1)
        Obj.Object.Value = S
        S = ""
     k = Arr(i, 3)
     SS = IIf(Arr(i, 4) > 1, " (" & Arr(i, 4) & ")", "")
     Prenom = Arr(i, 2)
     Init = Left(Prenom, 1) '1° lettre du Prénom
     S = S & Arr(i, 1) & " - " & Init & SS & vbCrLf
    
 Else
    k = Arr(i, 3)
    SS = IIf(Arr(i, 4) > 1, " (" & Arr(i, 4) & ")", "")
    Prenom = Arr(i, 2)
    Init = Left(Prenom, 1) '1° lettre du Prénom
    S = S & Arr(i, 1) & " - " & Init & SS & vbCrLf
      
 End If
Next
    Set Obj = Worksheets("Feuil1").OLEObjects("TextBox" & k)
    Obj.Object.Value = Left(S, Len(S) - 1)
    TriS 16
    For Each oobjet In Me.OLEObjects
            If TypeOf oobjet.Object Is msforms.TextBox Then
                If oobjet.Object.Value = vbNullString Then oobjet.Visible = False Else oobject.Visible = True
            End If
    Next oobjet
Exit Sub
GESTERR:
Resume Next
End Sub
Cordialement
 

gaby.jvx

XLDnaute Nouveau
Bonjour,
Voici une solution : Masquer les Textbox vides
VB:
Private Sub CommandButton8_Click()
'Plan Tables

range("A520").Select

'Code qui trie les réservants par ordre de Tables puis complètre le plan de table

Dim Arr, S$, SS$, i%, k%, iLR%, Obj As OLEObject, rng As range
Worksheets("Feuil1").Protect Password:="BJ/CROUZET", UserInterfaceOnly:=True
TriS 3
DoEvents
iLR = Cells(1).End(xlDown).Row
Arr = range(Cells(2, 1), Cells(iLR, 4)).Value
k = 1
On Error GoTo GESTERR
For i = 1 To UBound(Arr)
    SS = ""
 If k <> Arr(i, 3) Then
        Set Obj = Worksheets("Feuil1").OLEObjects("TextBox" & k)
        S = Left(S, Len(S) - 1)
        Obj.Object.Value = S
        S = ""
     k = Arr(i, 3)
     SS = IIf(Arr(i, 4) > 1, " (" & Arr(i, 4) & ")", "")
     Prenom = Arr(i, 2)
     Init = Left(Prenom, 1) '1° lettre du Prénom
     S = S & Arr(i, 1) & " - " & Init & SS & vbCrLf
   
 Else
    k = Arr(i, 3)
    SS = IIf(Arr(i, 4) > 1, " (" & Arr(i, 4) & ")", "")
    Prenom = Arr(i, 2)
    Init = Left(Prenom, 1) '1° lettre du Prénom
    S = S & Arr(i, 1) & " - " & Init & SS & vbCrLf
     
 End If
Next
    Set Obj = Worksheets("Feuil1").OLEObjects("TextBox" & k)
    Obj.Object.Value = Left(S, Len(S) - 1)
    TriS 16
    For Each oobjet In Me.OLEObjects
            If TypeOf oobjet.Object Is msforms.TextBox Then
                If oobjet.Object.Value = vbNullString Then oobjet.Visible = False Else oobject.Visible = True
            End If
    Next oobjet
Exit Sub
GESTERR:
Resume Next
End Sub
Cordialement
 

gaby.jvx

XLDnaute Nouveau
Bonjour
Merci pour votre aide.
Il y a un problème, certaines tables vides ne sont pas effacées.
Avant de demander de l'aide sur le forum, j'avais fait un test avec des Msgbox pour indiquer tables vides et tables occupées, et j'avais le même problème.
On dirait que certaines tables vides , ont quelque chose , qui les fait considérer comme renseignées !
Voir la photo jointe avec le plan créé avec le bouton de commande Plan des tables avec le code modifié comme vous me l'avez envoyé!
Voyez si vous pouvez trouver d'où vient cette anomalie ?
Les propriétés etc ... je ne vois pas.

D'autre part la partie du code qui efface les tables, je pense qu'il vaut peut-être mieux la mettre dans les codes de chacun des deux boutons impression (Format A4 et Affiche).
Car il est nécessaire que les tables vides ne soient pas imprimées, mais il ne faut pas qu'elles disparaissent des 42 tables du plan en affichage sur l'ordinateur. En effet si elles disparaissent, il m'est impossible de rajouter des participants sur ces tables disparues!

Encore merci
 

Pièces jointes

  • Plan table modifié.jpg
    Plan table modifié.jpg
    166.5 KB · Affichages: 37
Dernière édition:

gaby.jvx

XLDnaute Nouveau
Bonjour
Merci pour votre aide.
Il y a un problème, certaines tables vides ne sont pas effacées.
Avant de demander de l'aide sur le forum, j'avais fait un test avec des Msgbox pour indiquer tables vides et tables occupées, et j'avais le même problème.
On dirait que certaines tables vides , ont quelque chose , qui les fait considérer comme renseignées !
Voir la photo jointe avec le plan créé avec le bouton de commande Plan des tables avec le code modifié comme vous me l'avez envoyé!
Voyez si vous pouvez trouver d'où vient cette anomalie ?
Les propriétés etc ... je ne vois pas.

D'autre part la partie du code qui efface les tables, je pense qu'il vaut peut-être mieux la mettre dans les codes de chacun des deux boutons impression (Format A4 et Affiche).
Car il est nécessaire que les tables vides ne soient pas imprimées, mais il ne faut pas qu'elles disparaissent des 42 tables du plan en affichage sur l'ordinateur. En effet si elles disparaissent, il m'est impossible de rajouter des participants sur ces tables disparues!

Encore merci
 

Pièces jointes

  • Plan table modifié.jpg
    Plan table modifié.jpg
    166.5 KB · Affichages: 35

Gégé-45550

XLDnaute Accro
Bonjour,
1. Les tables non vides, me semble-t-il, contiennent toutes un tiret (-).
Essayez de remplacer la ligne :
If oobjet.Object.Value = vbNullString Then oobjet.Visible = False Else oobject.Visible = True
par :
If InStr(1, oobjet.Object.Value, "-") = 0 Then oobjet.Visible = False Else oobject.Visible = True
2. Votre code d'impression ne gère pas les Textbox en direct, le modifier serait plus compliqué que ce que je vous propose. Les Textbox ne sont pas supprimées, elles sont juste rendues invisibles lorsqu'elles sont vides.
Bonne journée
 

gaby.jvx

XLDnaute Nouveau
Bonjour Gégé-45550.

Merci pour votre aide super efficace.

En pièce jointe le super résultat.
Si vous pouvez m'expliquer comment vous avez vu le tiret dans les textboxs...
Je ne suis pas arrivé à les voir., et ainsi comprendre le problème.
Je me doutais qu'il y avait des caractères que je n'avais pas vu, mais ???
Merci.

Une dernière sollicitation.
Pour pouvoir ajouter à nouveau des participants en disposant de toutes les 42 tables , j'ai pensé à ajouter un nouveau bouton avec un module qui remet en visibles ces 42 tables.
Pouvez-vous me montrer la programmation pour ce module.
Après un lancement du bouton de tables avec effacement de tables vides:
Ce bouton permettra donc d'ajouter des participants et de relancer ensuite le bouton plan de tables qui enlèvera les tables vides en fonction des participants ajoutés ou retirés!

En pèces jointes:
Le plan de tables avec les tables bien effacées.
le bouton que j'ai ajouté et su'il faut coder.

Merci encore de votre aide
Gaby.jvx
 

Pièces jointes

  • PLAN TABLES VIDES EFFACEES.jpg
    PLAN TABLES VIDES EFFACEES.jpg
    181.5 KB · Affichages: 26
  • BOUTON REAFFICHE TTES TABLES.jpg
    BOUTON REAFFICHE TTES TABLES.jpg
    380.8 KB · Affichages: 29

gaby.jvx

XLDnaute Nouveau

Gégé-45550

XLDnaute Accro
Bonsoir,
1. Dans votre image "PLAN TABLES VIDES EFFACEES.jpg", on voit bien les tirets séparant chaque nom dans les Textbox (j'imagine qu'une table avec une seule personne, ça doit être très rare).
2. Il suffit de cliquer à nouveau sur le bouton "plan de table", non ? ... et Alors elles apparaîtront toutes si elles sont occupées.
Quel intérêt de réafficher des tables vides ?
Sinon, il suffit de demander au bouton des réafficher toutes les Textbox existantes (propriété .visible à True)
Cordialement,
 
Dernière édition:

gaby.jvx

XLDnaute Nouveau
Bonsoir,
1. Dans votre image "PLAN TABLES VIDES EFFACEES.jpg", on voit bien les tirets séparant chaque nom dans les Textbox (j'imagine qu'une table avec une seule personne, ça doit être très rare).
2. Il suffit de cliquer à nouveau sur le bouton "plan de table", non ? ... et Alors elles apparaîtront toutes si elles sont occupées.
Quel intérêt de réafficher des tables vides ?
Sinon, il suffit de demander au bouton des réafficher toutes les Textbox existantes (propriété .visible à True)
Cordialement,
Bonsoir
Merci encore pour votre aide, j'ai trouvé la solution pour cette dernière demande.
Bon week-end à vous.
gaby.jvx
 

Statistiques des forums

Discussions
311 740
Messages
2 082 041
Membres
101 879
dernier inscrit
Arthur M