Microsoft 365 Modifier une cellule depuis un Userform

ChTi160

XLDnaute Barbatruc
Bonsoir ,

Depuis un Userform , je modifie des cellules d’un Tableau Structuré.

Si je suis positionné sur la Feuille que je modifie, il me faut fermer le Userform pour visualiser les Modifications sur la feuille.
Lorsque je ferme le Userform les modifications apparaissent !

Partie de la macro qui modifie et Colore le Texte en fonction de

VB:
With Range("t_BDD_2022").ListObject

.ListRows(Lgn).Range(3).Value = StrText ‘Ici je modifie la cellule 3 de la ligne (Lgn) du Tableau Structuré

.ListRows(Lgn).Range(3).Font.Color = IIf(StrText = "REM", vbRed, vbBlack) ‘je modifie la couleur du Texte

End With

J’ai tenté avec Doevents et Autre Wait() de faire en sorte que la modification soit visible même Userform Affiché !

Je ne trouve pas comment faire. Mais est-ce possible ?

Merci par avance de votre aide

Jean marie
 

ChTi160

XLDnaute Barbatruc
Re
Oui j'ai testé les deux versions
L'une ne permet pas d'intervenir sur la feuille l'autre oui mais lors d'une modification via le userform ca ne change rien !
Seul la fermeture du userform permet de visualiser les modification

Merci de l'intérêt porté à mon problème !

Je vais voir si le fait qu'une procédure tourne en arrière plan (affichage de l'heure sur userform ) ne serait pas a l'origine de mon problème .
Jean-Marie
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
Je viens de regarder vos fichiers
J'ai ce matin testé, ce que je pensais être la raison de mon problème.
Eh bien oui !
La procédure d'affichage de l'heure (dans le Activate du Userform) est bien la raison de mon problème.
VB:
Do While Ok_Time: DoEvents
        If Ok_Time Then
                 .LBl_Date.Caption = Application.Proper(Format(Date, "dddd dd mmmm yyyy")) & "   " & Time
           Else
                 .LBl_Date.Caption = ""
        End If
      Loop
Si j'isole cette partie du Code, plus de problème.
Question y'a-t-il une solution pour ne pas à avoir a Isoler cette Partie du Code ?
Merci de l'intérêt que vous portez à ma demande.
Voir Vidéo !
Bonne Journée
Jean marie
 

Pièces jointes

  • Procedure-1.gif
    Procedure-1.gif
    900.2 KB · Affichages: 27
Dernière édition:

Gégé-45550

XLDnaute Accro
Bonjour,
Heureux de voir que le coupable a été identifié.
Est-ce vraiment important d'afficher l'heure dans le usf, sachant qu'elle est déjà généralement affichée dans Windows ? sauf si vous travaillez toujours en mode plein écran.
Sinon, il manque quelques précisions dans votre demande :
- comment et où est définie la variable Ok_Time
- dans la vidéo fournie, je ne vois pas où est le Lbl_Date
Bonne journée
 

ChTi160

XLDnaute Barbatruc
Re
Pour Gégé
Merci! Le label est en Haut à Gauche !
VB:
Public Ok_Time As Boolean
Se trouve dans un Module Standard ! Est-ce une erreur ?
Doit-il être déplacé dans le Module du Userform ?

Code:
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
With Usf_Gestion

Do While Ok_Time: DoEvents
        If Ok_Time Then
                 .LBl_Date.Caption = Application.Proper(Format(Date, "dddd dd mmmm yyyy")) & "   " & Time
           Else
                 .LBl_Date.Caption = ""
        End If
      Loop
 End With
 Set CTRL = Nothing
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Ok_Time = False
Erase Cls
End Sub

Pour Gérard !
j'espère que tu vas bien ?

Peux-tu me dire comment gérer ce Flag a quel niveau ?
voir code ci-dessus et ci-dessous !
VB:
Private Sub CommandButton_valider_Click()
Dim StrTag$
Dim StrText$

With Usf
 
   For I = 1 To UBound(Cls)'je boucle sur les Controls de la Classe des Combobx'
 
   Set CTRL = Cls(I).CBx 'je récupère le Control dans une Variable'
 
    indx = Mid(CTRL.Name, 7)'Je récupère a partir du Nom un Index Commun aux autres Controls (FRame et Label) associés
 
      StrTag = CTRL.Tag 'je récupére le .Tag du Control CTRL
     StrText = CTRL.Text'je récupére le .text du Control CTRL
 
     If StrTag <> StrText Then 'si différence la valeur a été modifiée
   
        Lgn = Usf.Controls("Frm_" & indx).Tag 'je récupère la Ligne Source dans la .Tag du Frame
 
            With Range("t_BDD_2022").ListObject 'avec la base de Données
                 .ListRows(Lgn).Range(3).Value = StrText ' je colle le Texte dans la troisième cellule de la Ligne "Lgn" de la Colonne
                 .ListRows(Lgn).Range(3).Font.Color = IIf(StrText = "REM", vbRed, vbBlack) 'je clore le Texte en fonction de la valeur de "StrText"
            End With
         CTRL.Tag = StrText 'je change la valeur du .Tag du Control CTRL
     End If
    Next I
End With
Set CTRL = Nothing 'Je vide la variable Control
End Sub
Si cela peut aider à m'indiquer ou mettre le Flag Lol
Edit : j'ai oublié le code d'affichage du Userform
Code:
Private Sub CommandButton1_Click()
Usf_Gestion.Show 0
End Sub


Merci par avance
Jean marie
 

Pièces jointes

  • Procedure-2.gif
    Procedure-2.gif
    957.8 KB · Affichages: 20
Dernière édition:

Gégé-45550

XLDnaute Accro
Bonjour,
J'ai mis le Ok_Time dans un module standard parce que je ne savais pas où est initialisée cette variable à la lecture de ce que vous avez fourni (ou alors j'ai mal lu).
J'en ai donc fait (rapidement) une variable publique pour qu'elle puisse être initialisée "n'importe où" et lue dans le Activate du usf.
Dans le fichier test créé par BrunoM45 et que j'ai modifié, vous avez du constater que l'affichage de l'heure n'empêche pas de visualiser la mise à jour de la feuille.
Il est difficile de comprendre pourquoi cette partie bugge chez vous.
N'y aurait-il pas dans votre fichier original du code supplémentaire dans la boucle "Do-Loop" ou dépendant de celle-ci ?
Cordialement,
 

ChTi160

XLDnaute Barbatruc
Re Gégé
merci
dans le "UserForm_Activate" je n'ai que le code qui est à mon précédent Post !
J'ai essayé , mais sans succès , comme suggéré par notre ami Gérard d'introduire une Variable "Flag" qui aurait pu permettre, je pense de Stopper Temporairement la Gestion de l'heure lorsqu'elle est mise à False.
Mais pas de changement ou alors je ne sais pas exploiter correctement cette Variable "Flag"
J'attends des Nouvelle de Gérard
Jean marie
 

job75

XLDnaute Barbatruc
Peux-tu me dire comment gérer ce Flag a quel niveau ?
Dans un module standard écrire Public flag As Boolean

Remplacer le bloc With du post #1 par flag = True

Et écrire :
VB:
Do While Ok_Time: DoEvents
    If flag Then
        With Range("t_BDD_2022").ListObject 'avec la base de Données
           .ListRows(Lgn).Range(3).Value = StrText ' je colle le Texte dans la troisième cellule de la Ligne "Lgn" de la Colonne
           .ListRows(Lgn).Range(3).Font.Color = IIf(StrText = "REM", vbRed, vbBlack) 'je clore le Texte en fonction de la valeur de "StrText"
        End With
        flag = False
    End If
    If Ok_Time Then
         .LBl_Date.Caption = Application.Proper(Format(Date, "dddd dd mmmm yyyy")) & "   " & Time
    Else
         .LBl_Date.Caption = ""
    End If
Loop
 

ChTi160

XLDnaute Barbatruc
Re
Gérard ,

Si je comprends bien, j'ai le Code "Do While Ok_Time: DoEvents" etc , dans le Acivate du Userform

Je le remplace par celui que tu m'as fourni ?
le code du Post #1
VB:
With Range("t_BDD_2022").ListObject
.ListRows(Lgn).Range(3).Value = StrText ‘Ici je modifie la cellule 3 de la ligne (Lgn) du Tableau
Structuré
.ListRows(Lgn).Range(3).Font.Color = IIf(StrText = "REM", vbRed, vbBlack) ‘je modifie la couleur du Texte
End With
C'est une partie du Code du Bouton "Mise à Jour"

Jean marie
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 184
Membres
112 677
dernier inscrit
Justine11