Microsoft 365 Enchaînement textbox pour ajouter une note à une cellule

Mate59

XLDnaute Junior
Bonjour à tous!

Je rencontre un problème sur l'enchainement des notes...

Actuellement j'ai un userform avec plusieurs textbox, les cases à cocher sont OK, elles fonctionnent.

Le problèmes actuellement avec ce code des textbox à la toute fin, je ne peux, par exemple, pas ajouter de note via le textbox2 (T2) si je n'ai pas rempli le textbox1(T1) et ainsi de suite.

Voici le tableau pour que vous compreniez
 

Pièces jointes

  • test macro avec formulaire.xlsm
    38.5 KB · Affichages: 14
Dernière édition:
Solution
re
ce que j'ai modifié en fonction de ce que j'ai compris Lol
VB:
Private Sub UserForm_initialize()
For i = 3 To 33
    'Garder la case cochée dans userform si case égal X & la note dans le textbox
    If Cells(4, i) = "X" Then Me.Controls("J" & i - 2) = True
    Me.Controls("J" & i - 2).Enabled = IIf(Me.Controls("J" & i - 2) = True, False, True)
    'Si une cellule contient une note alors on la récupère dans le formulaire
    If Not Cells(4, i).Comment Is Nothing Then Me.Controls("T" & i - 2) = Cells(4, i).Comment.Text
         Me.Controls("T" & i - 2).Enabled = Me.Controls("J" & i - 2).Enabled
Next i
End Sub
Une petite vidéo du rendu Lol
jean marie

Mate59

XLDnaute Junior
J'aimerai garder le système du bouton si ça ne vous dérange pas.
Etant débutant, j'aimerai garder les codes comme j'avais pu les faire (case par case, textbox par textbox & case à cocher par case à cocher) même si cela fait lourd à vos yeux. C'est pour moi m'y retrouver facilement et m'aider à comprendre.

J'ai testé et malheureusement, les données peuvent être retirées et je souhaite qu'une fois les données enregistrées alors on les retrouve dans l'userform mais elles ne sont plus modifiables.
Et je suis également obligé de remplir la case à cocher pour qu'il y ait la note et j'aimerai que cela soit séparé, d'avoir 2 choses distinctes
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@Mate59
Juste en passant et perso :

Pour le moment j'ai fait une unique page et seulement après je vais créé les autres mois.
Le choix du mois n'est donc pas à faire, lorsque j'ai copié la feuille, la macro fonctionne sur toutes les pages.
Je pense que c'est pas le meilleur choix (Version soft pour dire que c'est un mauvais choix)
La Ma logique c'est une feuille :
==> Mois voir si possible seulement une feuille juste du mois en cours avec un feuille modèle ou si 12 feuilles (1 par mois)
==>BDD
==>Paramètre avec par exemple liste des mois/année, jours fériés, liste des primes et montants etc....
==>Liste des personnes et encore cette liste peut être avec les paramètres

Après il peut y avoir d'autres variantes d'organisation du fichier

Normalement à la création on réfléchit au cahier des charges à ce que l'on veut faire, pourquoi, but et moyen, comment je vais m'en servir, ergonomie, ordre de grandeur de la/les BDD etc....

Bonne lecture
 

Phil69970

XLDnaute Barbatruc
Re

4 lignes de codes et 2 lignes de commentaires suffisent au lieu de 290 lignes et tu ajoutes au début
Option Compare Text comme cela si tu mets x ou X en majuscule ou en minuscule cela fonctionnera

VB:
Option Compare Text

Private Sub UserForm_initialize()
For i = 3 To 33
    'Garder la case cochée dans userform si case égal X & la note dans le textbox
    If Cells(4, i) = "X" Then Me.Controls("J" & i - 2) = True
    'Si une cellule contient une note alors on la récupère dans le formulaire
    If Not Cells(4, i).Comment Is Nothing Then Me.Controls("T" & i - 2) = Cells(4, i).Comment.Text
Next i
End Sub

et idem pour 4 lignes au lieu de 220 lignes

VB:
Private Sub OK1_Click()
Application.ScreenUpdating = False
Dim i&
For i = 3 To 33
    'Ajoute valeur à une cellule après cochage ou non d'une case à cocher
    If Me.Controls("J" & i - 2) = True Then Cells(4, i) = "X" Else: Cells(4, i) = ""
Next i
Unload Me 'fermeture de la fenêtre après appui Ok
End Sub

De plus ton code ne permet pas d'enlever des croix mais seulement d'en rajouter 🤔
J'ai rectifié cela dans mon le code

Si tu ne veux pas cette amélioration tu remplaces
'Ajoute valeur à une cellule après cochage ou non d'une case à cocher
If Me.Controls("J" & i - 2) = True Then Cells(4, i) = "X" Else: Cells(4, i) = ""
Par
'Ajoute valeur à une cellule après cochage ou non d'une case à cocher
If Me.Controls("J" & i - 2) = True Then Cells(4, i) = "X"
ainsi tu ne pourras pas enlever des X par USF

Tu viens de gagner près de 510 lignes de codes ;)
 

Mate59

XLDnaute Junior
Re

4 lignes de codes et 2 lignes de commentaires suffisent au lieu de 290 lignes et tu ajoutes au début
Option Compare Text comme cela si tu mets x ou X en majuscule ou en minuscule cela fonctionnera

VB:
Option Compare Text

Private Sub UserForm_initialize()
For i = 3 To 33
    'Garder la case cochée dans userform si case égal X & la note dans le textbox
    If Cells(4, i) = "X" Then Me.Controls("J" & i - 2) = True
    'Si une cellule contient une note alors on la récupère dans le formulaire
    If Not Cells(4, i).Comment Is Nothing Then Me.Controls("T" & i - 2) = Cells(4, i).Comment.Text
Next i
End Sub

et idem pour 4 lignes au lieu de 220 lignes

VB:
Private Sub OK1_Click()
Application.ScreenUpdating = False
Dim i&
For i = 3 To 33
    'Ajoute valeur à une cellule après cochage ou non d'une case à cocher
    If Me.Controls("J" & i - 2) = True Then Cells(4, i) = "X" Else: Cells(4, i) = ""
Next i
Unload Me 'fermeture de la fenêtre après appui Ok
End Sub

De plus ton code ne permet pas d'enlever des croix mais seulement d'en rajouter 🤔
J'ai rectifié cela dans mon le code

Si tu ne veux pas cette amélioration tu remplaces

Par

ainsi tu ne pourras pas enlever des X par USF

Tu viens de gagner près de 510 lignes de codes ;)
Wow super! vous avez appris comment les codes? Sur la tas? formation? bouquin?


Merci beaucoup à tous pour les réponses
 

Phil69970

XLDnaute Barbatruc
Essaye ceci
Fais les tests UNIQUEMENT sur le jour 1
VB:
Private Sub T1_Change()
'Ajoute en note le commentaire mit dans un textbox et ne pas le modifier une fois ajouté
If T1.Value = "" Then Range("C4").Comment.Delete: Exit Sub 'Si T est vide on supprime le commentaire et on sort
    If Not Range("C4").Comment Is Nothing Then
    'Si je change d'avis la nouvelle note sera enregistré
        OldComment = Range("D4").Comment.Text
        NewComment = T1.Value 'Commentaire modifié
        Range("C4").Comment.Delete
        Range("C4").AddComment (NewComment)
        Range("C4").Comment.Visible = True
    Else
        Range("C4").AddComment T1.Value
        Range("C4").Comment.Visible = True
    End If
End Sub

Et regarde les modifs des commentaires se font en live 🤔
Après on va essayer de faire une version courte .......
 

Mate59

XLDnaute Junior
Essaye ceci
Fais les tests UNIQUEMENT sur le jour 1
VB:
Private Sub T1_Change()
'Ajoute en note le commentaire mit dans un textbox et ne pas le modifier une fois ajouté
If T1.Value = "" Then Range("C4").Comment.Delete: Exit Sub 'Si T est vide on supprime le commentaire et on sort
    If Not Range("C4").Comment Is Nothing Then
    'Si je change d'avis la nouvelle note sera enregistré
        OldComment = Range("D4").Comment.Text
        NewComment = T1.Value 'Commentaire modifié
        Range("C4").Comment.Delete
        Range("C4").AddComment (NewComment)
        Range("C4").Comment.Visible = True
    Else
        Range("C4").AddComment T1.Value
        Range("C4").Comment.Visible = True
    End If
End Sub

Et regarde les modifs des commentaires se font en live 🤔
Après on va essayer de faire une version courte .......
C'est ce que j'ai observé...
 

Discussions similaires

Réponses
5
Affichages
530

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin