Modification du formulaire ne se fait que sur certaines TextBox

Bonjour à toutes et tous,

Ça fait 2 semaines que je bute sur le même problème, malgré avoir cherché autant que je pouvais, et ça me rend fou. Je suis débutant VBA donc si ça se trouve c'est d'une bêtise incroyable. Reste que je bloque et votre aide me serait très utile!

J'ai un fichier excel faisant office de base de données des patients que je suis. Je désire faire un formulaire VBA pour rendre plus user-friendly la manipulation des données. J'ai donc un formulaire habituel avec des textbox, des checkbox et des optionbuttons et 3 Subs principaux:

getData: récupère les infos de la ligne et les affiche dans le formulaire

Public loCurrentRow As Long

Private Sub getData()
Sheets("Feuil1").Activate

Dim cCTRL As Control, rFirstLine As Range, rTitle As Range, varTag As Variant, loColNum As Long

Set rFirstLine = Range("A1:AE1")

For Each cCTRL In Me.Controls
If TypeName(cCTRL) = "TextBox" Or TypeName(cCTRL) = "CheckBox" Or TypeName(cCTRL) = "OptionButton" Then
    varTag = cCTRL.Tag
    Set rTitle = rFirstLine.Find(varTag, LookIn:=xlValues, lookat:=xlWhole)
    loColNum = rTitle.Column

'TextBox'
    If TypeName(cCTRL) = "TextBox" Then
        cCTRL.Value = Cells(loCurrentRow, loColNum)
    End If
' checkbox '
    If TypeName(cCTRL) = "CheckBox" Then
        If Cells(loCurrentRow, loColNum) = cCTRL.Caption Then
            cCTRL.Value = True
        Else
            cCTRL.Value = False
        End If
    End If
'optionbutton'
    If TypeName(cCTRL) = "OptionButton" Then
        If Cells(loCurrentRow, loColNum) = cCTRL.Caption Then
        cCTRL.Object.Value = True
        End If
    End If
End If
Next cCTRL

End Sub

Edit: modifie la liste à partir des valeurs dans le formulaire

Private Sub Edit()
Sheets("Feuil1").Activate

Dim cCTRL As Control, rFirstLine As Range, rTitle As Range, varTag As Variant, loColNum As Long

Set rFirstLine = Range("A1:AE1")

For Each cCTRL In Me.Controls
If TypeName(cCTRL) = "TextBox" Or TypeName(cCTRL) = "CheckBox" Or TypeName(cCTRL) = "OptionButton" Then
    varTag = cCTRL.Tag
    Set rTitle = rFirstLine.Find(varTag, LookIn:=xlValues, lookat:=xlWhole)
    loColNum = rTitle.Column

'Textbox'
    If TypeName(cCTRL) = "TextBox" Then
        Cells(loCurrentRow, loColNum) = cCTRL.Value
    End If
'checkbox'
    If TypeName(cCTRL) = "CheckBox" Then
        If cCTRL.Value = True Then
            Cells(loCurrentRow, loColNum) = cCTRL.Caption
        Else
            Cells(loCurrentRow, loColNum) = ""
        End If
    End If
'optionbutton'
    If TypeName(cCTRL) = "OptionButton" Then
        If cCTRL.Object.Value = True Then
            Cells(loCurrentRow, loColNum) = cCTRL.Caption
        End If
    End If
End If
Next cCTRL

End Sub

archiveClear: ajoute les données du formulaire sur une autre feuille et efface la ligne

Private Sub archiveClear()

Dim cCTRL As Control, loNewRow As Long, rFirstLine As Range, rTitle As Range, varTag As Variant, loColNum As Long

loNewRow = Sheets("Feuil2").Range("b65536").End(xlUp).Row + 1
Set rFirstLine = Range("A1:AD1")

For Each cCTRL In Me.Controls
If TypeName(cCTRL) = "TextBox" Or TypeName(cCTRL) = "CheckBox" Or TypeName(cCTRL) = "OptionButton" Then
    varTag = cCTRL.Tag
    Set rTitle = rFirstLine.Find(varTag, LookIn:=xlValues, lookat:=xlWhole)
    loColNum = rTitle.Column

'Textbox'
    If TypeName(cCTRL) = "TextBox" Then
        Worksheets("Feuil2").Cells(loNewRow, loColNum) = cCTRL.Object.Value
    End If
'checkbox'
    If TypeName(cCTRL) = "CheckBox" Then
        If cCTRL.Value = True Then
            Worksheets("Feuil2").Cells(loNewRow, loColNum) = cCTRL.Caption
        Else
            Worksheets("Feuil2").Cells(loNewRow, loColNum) = ""
        End If
    End If
'optionbutton'
    If TypeName(cCTRL) = "OptionButton" Then
        If cCTRL.Object.Value = True Then
            Worksheets("Feuil2").Cells(loNewRow, loColNum) = cCTRL.Caption
        End If
    End If
End If
Next cCTRL

Sheets("Feuil1").Range("B" & loCurrentRow, "AD" & loCurrentRow).Clear

End Sub

Mon problème est le suivant: lorsque je lance mon formulaire et que je veux l'éditer, les modifications fonctionnent uniquement sur les 2 premières colonnes (Chambre et Nom) mais pas les suivantes, comme si la boucle s'arrêtait de fonctionner.

J'ai fait un 2e fichier test, avec des données bidons et moins de colonnes (et donc de controls) et avec le même code. Et la ça marche! (je désespère..)

Merci d'avance pour votre aide!

Bonjour, j'ai tester et pour moi ça fonctionne

Je suis allé un peu vite en besogne. Le premier test a réussi mais pas le second

Je suis novice mais ce que je ne comprends pas c'est que dans les Ojets il y a une feuille11. Cela me parait curieux

Bonjour toutes et tous

Idem

de plus il y a deux ThisWorkbook dont 1 est nommé normalement et l'autre Feuil1

peut-être une importation ...

crdlt,

André

ztestvba

Bonjour à tous,

cCtrl.value = True Then > quand c'est un TextBox, ça donne faux, même quand le TextBox contient du texte. J'ai remplacé pour les TextBox cCtrl <> "" then

J'ai aussi utilisé Dim oEdit As Boolean afin d'empêché le "Combobox" de réinitialiser les champs avec "getData" au bas de Private Sub ComboBox1_Change() >> suivre les "oEdit".

La colonne "ipp" n'a pas de cCtrl dans le formulaire (à revoir). Je n'ai pas testé toutes les colonnes.

@Andre13 >> j'ai tout copié dans un nouveau fichier.

Un essai ...

ric

Merci Ric

Bonjour à tous,

cCtrl.value = True Then > quand c'est un TextBox, ça donne faux, même quand le TextBox contient du texte. J'ai remplacé pour les TextBox cCtrl <> "" then

J'ai aussi utilisé Dim oEdit As Boolean afin d'empêché le "Combobox" de réinitialiser les champs avec "getData" au bas de Private Sub ComboBox1_Change() >> suivre les "oEdit".

La colonne "ipp" n'a pas de cCtrl dans le formulaire (à revoir). Je n'ai pas testé toutes les colonnes.

@Andre13 >> j'ai tout copié dans un nouveau fichier.

Un essai ...

ric

Merci ric!!!

Je ne comprends toujours pas pourquoi ça marchait dans un fichier mais pas dans l'autre mais en tout cas ton système fonctionne! Merci encore, je vais enfin pouvoir avancer.

Bonjour à tous,

... Je ne comprends toujours pas pourquoi ça marchait dans un fichier, mais pas dans l'autre, mais en tout cas ton système fonctionne! ...

À l'exécution du code, le Textbox "nom" était réécrit, le combobox (liste des noms) se retrouvait appelé à exécuter de nouveau son code Private Sub ComboBox1_Change() ... tous les deux gérant les données de la colonne B (nom).

Au bas du code de Private Sub ComboBox1_Change(), il y a l'appel de la macro "getData" > "getData" que fait-il ? Il réécrit les données dans les controls (textbox, checkbox, optionbutton) > les changements faits dans le formulaire étaient donc perdus.

D'où l'utilisation de "Dim oEdit as Boolean" pour bloquer temporairement l'exécution de Private Sub ComboBox1_Change(). Fait une recherche (Ctrl+F) sur oEdit pour trouver les endroits où je l'ai utilisé.

Dans ton fichier "Fomulaire test.xlsm", il n'y a pas ce lien "TextBox" <> "Combobox" gérant tous les deux les données de la colonne B (nom). Donc pas de réécriture ... d'où le fonctionnement correct.

ric

Rechercher des sujets similaires à "modification formulaire fait que certaines textbox"