Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Si l'un ou plusieurs textboxs changent copier vers

28 réponses
Avatar
DOMINIQUE
Bonjour,
J'ai du mal à démarrer un code pouvez vous m'aider ou m'orienter sur ce
problème, merci.

J'ai un userform comprenant 4 frames dans c'est 4 frames se trouvent 60
textboxs. Ces textboxs sont alimentés par une toupie.
est il possible de créer un code qui dirait lors du changement par le bouton
toupie :
Si l'un ou plusieurs des textboxs des frames 2,3 et 4 ont été modifiés
copier dans la dernière ligne vide de la feuille "RecuperationDeDonnées"
tous les textboxs des frames 2,3 et 4 et que uniquement les textboxs
modifiés soit en caractères rouges.

Merci pour votre aide

10 réponses

1 2 3
Avatar
DOMINIQUE
voici le lien
http://www.cijoint.fr/cjlink.php?file=cj201002/cijO6gHeVx.xlsm

une question si cela te dérange pas : Quant tu va démarrer l'userform, mon
userform arrive vide il faut cliquer une fois sur la toupie pour avoir les
premières données . est il possible de le démarrer charger avec la première
ligne?

puis comme tu peux le voir j ai des checkbox et des option button pareil il
faut que je prévoie une colonne pour chaque dans recuperation de données.
faut il le prévoir maintenant ou je pourrai le gérer après?

puis encore merci pour ton investissement ce qui me permet d apprendre

"Daniel.C" a écrit dans le message de groupe de
discussion : ObCt7H$
C'est en gros ce que je fais, sauf que les textboxes sont initialisés à
vide et pas alimentés par la toupie (je connais pas la règle pour
l'alimentation). Donc dans mon classeur de test je ne trouve que des
textboxes vides ou modifiés.
Voici l'adresse du classeur avec lequel j'ai testé :
http://cjoint.com/?crrVHWFQ4B
Si tu le peux, poste un classeur dépouillé de tout ce qui n'est pas utile.
Daniel

Pour faire plus simple,
je pensais qu'il serait préférable de faire un code qui dit si on modifie
un texbox que ses caractères deviennent rouges puis par défaut copier les
valeurs de tous les textboxs vers la feuille(recuperationsDesDonnée) a
chaque spinbutton up
donc j'ai commencé un code comme ceci mais avec des lacunes(beaucoup de
lacunes)

dans userform inizialise

dim Ctrl as control
for each Ctrl in me.controls
if me.controls change then 'je ne sais pas comment dire "si mon
controls change"
me.control.font.colorindex = 3
end if
next

dans spin button change


With Worksheets("recuperationDesDonnées")

derligne = .Range("A65536").End(xlUp).Row + 1
.cells(derligne,1) = me.te_invchmal 'dans ce cas je ne sais pas si il va
copier la forme (rouge si modifié)
.cells(derligne,2) = me.te_invchfem
ainsi de suite sur tous les texbox
end with

Autres problèmes je suis dans spinbutton change et je voudrais que la
copie vers recupdesdonnée ce fasse uniquement en spinbutton_up et j ai
besoin du down pour revenir en arrière. Et apparement ou je ne sais pas
faire, je ne peux faire apparaitre qu une forme de code (up ou down ou
change).
merci pour le temps passé avec moi




"DOMINIQUE" a écrit dans le message de groupe de
discussion : uuxYRj#
merci alors l'erreur identifié est "next sans for" donc machinalement j
ai enlevé un next et ensuite il me donne l erreur if sans end if
pour tant le nombre de next a l'air bon et idem pour les if. bizarre!


"Daniel.C" a écrit dans le message de groupe
de discussion : exLPsY#
Difficile de dire.
Remplace la ligne en erreur par :

On Error Resume Next
Valeurs(Ctr) = c.Text
if Err.NUmber <>0 then
MsgBox c.text
MsgBox Ctr
MsgBox Valeurs(Ctr)
Exit Sub

et poste en retour le contenu des Msgbox.
Daniel

Merci Daniel
ca avance, maintenant je me trouve avec "l'erreur 458 propriété ou
méthode non géré par cet objet" et sur lignage de la ligne :
Valeurs(Ctr) = c.Text


"Daniel.C" a écrit dans le message de
groupe de discussion : uneJGC#
Au temps pour moi; j'ai oublié de te dire de mettre la ligne :

Public Noms(), Valeurs()

au début d'un module standard.
Daniel

Bonjour Daniel C
Merci pour le travail mais j ai une erreur dans le code Private Sub
UserForm_Activate()
qui indique "erreur de compilation : variable non définie" et
surligne en bleu
la ligne ReDim Preserve Noms(Ctr)
et encore merci car c'est au dessus de mon niveau
Pour apprendre pourrais tu m'expliquer userform_activate , je
connaissais userform_initialize
merci

"Daniel.C" a écrit dans le message de
groupe de discussion :
Bonjour.
Utilise le code suivant :

Private Sub SpinButton1_Change()
Dim Ctr As Integer, f As Control, Test As Boolean
With Sheets("RecuperationDeDonnées")
Ctr = .[A65000].End(xlUp).Row + 1
For Each f In Me.Controls
If TypeOf f Is Frame Then
If f.Name <> "Frame1" Then
For Each Item In f.Controls
i = i + 1
.Cells(Ctr, i) = Item.Value
Var = Application.Match(Item.Name, Noms, 0)
'ôter
If Valeurs(Application.Match(Item.Name, Noms,
0) - 1) <> Item.Value Then
Test = True
.Cells(Ctr, i).Font.ColorIndex = 3

End If
Next
End If
End If
Next f
If Test = False Then Rows(Ctr).Clear
End With
End Sub

Private Sub UserForm_Activate()
Dim Ctr As Integer
Ctr = -1
For Each f In Me.Controls
If TypeOf f Is Frame Then
If f.Name <> "Frame1" Then
For Each c In f.Controls
Ctr = Ctr + 1
ReDim Preserve Noms(Ctr)
ReDim Preserve Valeurs(Ctr)
Noms(Ctr) = c.Name
Valeurs(Ctr) = c.Text
Next
End If
End If
Next f
Var = Noms
End Sub

Daniel

Bonjour,
J'ai du mal à démarrer un code pouvez vous m'aider ou m'orienter
sur ce problème, merci.

J'ai un userform comprenant 4 frames dans c'est 4 frames se
trouvent 60 textboxs. Ces textboxs sont alimentés par une toupie.
est il possible de créer un code qui dirait lors du changement par
le bouton toupie :
Si l'un ou plusieurs des textboxs des frames 2,3 et 4 ont été
modifiés copier dans la dernière ligne vide de la feuille
"RecuperationDeDonnées" tous les textboxs des frames 2,3 et 4 et
que uniquement les textboxs modifiés soit en caractères rouges.

Merci pour votre aide



























Avatar
Daniel.C
Bon, on avance. Je n'avais considéré que des frames et des textboxes,
ce sont les labels qui provoquent l'erreur. Deux questions :
1. Le remplissage des textboxes est-il provoqué par la macro :
GestionDeSpinInvententaire
2. Quelles sont les frames à prendre en considération pour le décompte
des textboxes modifiés ?
Daniel

voici le lien
http://www.cijoint.fr/cjlink.php?file=cj201002/cijO6gHeVx.xlsm

une question si cela te dérange pas : Quant tu va démarrer l'userform, mon
userform arrive vide il faut cliquer une fois sur la toupie pour avoir les
premières données . est il possible de le démarrer charger avec la première
ligne?

puis comme tu peux le voir j ai des checkbox et des option button pareil il
faut que je prévoie une colonne pour chaque dans recuperation de données.
faut il le prévoir maintenant ou je pourrai le gérer après?

puis encore merci pour ton investissement ce qui me permet d apprendre

"Daniel.C" a écrit dans le message de groupe de
discussion : ObCt7H$
C'est en gros ce que je fais, sauf que les textboxes sont initialisés à
vide et pas alimentés par la toupie (je connais pas la règle pour
l'alimentation). Donc dans mon classeur de test je ne trouve que des
textboxes vides ou modifiés.
Voici l'adresse du classeur avec lequel j'ai testé :
http://cjoint.com/?crrVHWFQ4B
Si tu le peux, poste un classeur dépouillé de tout ce qui n'est pas utile.
Daniel

Pour faire plus simple,
je pensais qu'il serait préférable de faire un code qui dit si on modifie
un texbox que ses caractères deviennent rouges puis par défaut copier les
valeurs de tous les textboxs vers la feuille(recuperationsDesDonnée) a
chaque spinbutton up
donc j'ai commencé un code comme ceci mais avec des lacunes(beaucoup de
lacunes)

dans userform inizialise

dim Ctrl as control
for each Ctrl in me.controls
if me.controls change then 'je ne sais pas comment dire "si mon
controls change"
me.control.font.colorindex = 3
end if
next

dans spin button change


With Worksheets("recuperationDesDonnées")

derligne = .Range("A65536").End(xlUp).Row + 1
.cells(derligne,1) = me.te_invchmal 'dans ce cas je ne sais pas si il va
copier la forme (rouge si modifié)
.cells(derligne,2) = me.te_invchfem
ainsi de suite sur tous les texbox
end with

Autres problèmes je suis dans spinbutton change et je voudrais que la
copie vers recupdesdonnée ce fasse uniquement en spinbutton_up et j ai
besoin du down pour revenir en arrière. Et apparement ou je ne sais pas
faire, je ne peux faire apparaitre qu une forme de code (up ou down ou
change).
merci pour le temps passé avec moi




"DOMINIQUE" a écrit dans le message de groupe de
discussion : uuxYRj#
merci alors l'erreur identifié est "next sans for" donc machinalement j
ai enlevé un next et ensuite il me donne l erreur if sans end if
pour tant le nombre de next a l'air bon et idem pour les if. bizarre!


"Daniel.C" a écrit dans le message de groupe
de discussion : exLPsY#
Difficile de dire.
Remplace la ligne en erreur par :

On Error Resume Next
Valeurs(Ctr) = c.Text
if Err.NUmber <>0 then
MsgBox c.text
MsgBox Ctr
MsgBox Valeurs(Ctr)
Exit Sub

et poste en retour le contenu des Msgbox.
Daniel

Merci Daniel
ca avance, maintenant je me trouve avec "l'erreur 458 propriété ou
méthode non géré par cet objet" et sur lignage de la ligne :
Valeurs(Ctr) = c.Text


"Daniel.C" a écrit dans le message de groupe
de discussion : uneJGC#
Au temps pour moi; j'ai oublié de te dire de mettre la ligne :

Public Noms(), Valeurs()

au début d'un module standard.
Daniel

Bonjour Daniel C
Merci pour le travail mais j ai une erreur dans le code Private Sub
UserForm_Activate()
qui indique "erreur de compilation : variable non définie" et
surligne en bleu
la ligne ReDim Preserve Noms(Ctr)
et encore merci car c'est au dessus de mon niveau
Pour apprendre pourrais tu m'expliquer userform_activate , je
connaissais userform_initialize
merci

"Daniel.C" a écrit dans le message de
groupe de discussion :
Bonjour.
Utilise le code suivant :

Private Sub SpinButton1_Change()
Dim Ctr As Integer, f As Control, Test As Boolean
With Sheets("RecuperationDeDonnées")
Ctr = .[A65000].End(xlUp).Row + 1
For Each f In Me.Controls
If TypeOf f Is Frame Then
If f.Name <> "Frame1" Then
For Each Item In f.Controls
i = i + 1
.Cells(Ctr, i) = Item.Value
Var = Application.Match(Item.Name, Noms, 0) 'ôter
If Valeurs(Application.Match(Item.Name, Noms, 0)
- 1) <> Item.Value Then
Test = True
.Cells(Ctr, i).Font.ColorIndex = 3

End If
Next
End If
End If
Next f
If Test = False Then Rows(Ctr).Clear
End With
End Sub

Private Sub UserForm_Activate()
Dim Ctr As Integer
Ctr = -1
For Each f In Me.Controls
If TypeOf f Is Frame Then
If f.Name <> "Frame1" Then
For Each c In f.Controls
Ctr = Ctr + 1
ReDim Preserve Noms(Ctr)
ReDim Preserve Valeurs(Ctr)
Noms(Ctr) = c.Name
Valeurs(Ctr) = c.Text
Next
End If
End If
Next f
Var = Noms
End Sub

Daniel

Bonjour,
J'ai du mal à démarrer un code pouvez vous m'aider ou m'orienter
sur ce problème, merci.

J'ai un userform comprenant 4 frames dans c'est 4 frames se
trouvent 60 textboxs. Ces textboxs sont alimentés par une toupie.
est il possible de créer un code qui dirait lors du changement par
le bouton toupie :
Si l'un ou plusieurs des textboxs des frames 2,3 et 4 ont été
modifiés copier dans la dernière ligne vide de la feuille
"RecuperationDeDonnées" tous les textboxs des frames 2,3 et 4 et
que uniquement les textboxs modifiés soit en caractères rouges.

Merci pour votre aide





























Avatar
Dominique
oui gestiondespininventaire alimente les textboxs et les frames sont
tous sauf le noir en haut (frame1).
Attention pendant mon retour a mon domicile, j ai pensé a quelques
choses comme j ai du mal a gerer le moment de sauvegarde de données je
vais creer 2 option button (Op_Present et Op_absent) qui seront décochés
par defaut et la bascule ne pourra se faire uniquement si l'un ou
l'autre sera coché. ce qui permettra de faire un retour en arrière sans
provoqué la sauvegarde. ca fait une condition en plus.
Merci beaucoup
Avatar
Dominique
Attention GestionDeSpinInvententaire gere aussi les label tout ce qui
commence par "la" est un label et tou ce qui commence par "te" est un
textbox par op un optionbouton
Avatar
Daniel.C
Il y a 6 frames à textboxes :
Frame400
Frame500
Frame9000
Frame1200
Frame1300
Frame100
Lesquels considérer ?
Daniel

Attention GestionDeSpinInvententaire gere aussi les label tout ce qui
commence par "la" est un label et tou ce qui commence par "te" est un textbox
par op un optionbouton


Avatar
Dominique
Le 17/02/2010 19:40, Daniel.C a écrit :
Il y a 6 frames à textboxes :
Frame400
Frame500
Frame9000
Frame1200
Frame1300
Frame100
Lesquels considérer ?
Daniel

Attention GestionDeSpinInvententaire gere aussi les label tout ce qui
commence par "la" est un label et tou ce qui commence par "te" est un
textbox par op un optionbouton








le frame 2007 et frame 700 et frame11 contient aussi des textbox en
faites tous les frames sauf le frame1. Je n ai pas besoins des données
du frame1.
le Fra_EvolutionPopuCerf et le Fra_EvolutionPopuCH sont des
optionboutons. et c vrai que j aurai besoin des données cocher (+,-ou=).
merci
Avatar
Daniel.C
Je ne sais plus comment m'y prendre. Tu alimentes les textboxes depuis
la macro "Spin_Inventaire_Change" et tu veux détecter les valeurs ayant
changé. L'utilisateur ne reprenant pas la main, il ne peut pas y avoir
de différences à ce niveau. A toi de voir où il faut faire cette
comparaison. C'est possible à partir d'un bouton de commande ou autre
contrôle.
Daniel

Le 17/02/2010 19:40, Daniel.C a écrit :
Il y a 6 frames à textboxes :
Frame400
Frame500
Frame9000
Frame1200
Frame1300
Frame100
Lesquels considérer ?
Daniel

Attention GestionDeSpinInvententaire gere aussi les label tout ce qui
commence par "la" est un label et tou ce qui commence par "te" est un
textbox par op un optionbouton








le frame 2007 et frame 700 et frame11 contient aussi des textbox en faites
tous les frames sauf le frame1. Je n ai pas besoins des données du frame1.
le Fra_EvolutionPopuCerf et le Fra_EvolutionPopuCH sont des optionboutons. et
c vrai que j aurai besoin des données cocher (+,-ou=).
merci


Avatar
Dominique
Je suis desolé de ne pas etre clair. Pour essaye de me faire comprendre
je vais t expliquer a quoi sert cet userform.

En réunion, cet userform sera projeté sur grand ecran. le spinbuton va
alimenter les données personne par personne.La personne, si elle est
présente, peut modifier les données donc je modifie les données
directement sur l userform. et la je dois sauvegarder ces données pour
les modifier plus tard sur un serveur (si elle sont rouges ca sera super
car je vais modifier plus de 1500 personnes). Quand je vais passer a la
personne suivante en cliquant sur le spinbouton elle enregistrera les
données. le probleme si la personne arrive en retard, par exemple, je
vais revenir en arriere et sans condition l userform va reenregistrer
des données deja presentes. Donc c'est pour ca si je met un option
buton "present et un absent" qui seraient decochés par défaut je pourrai
revenir en arrière sans enregistrer les données.

par exemple 4 personnes presentes (A B C et D) :
monsieur A present , je coche present on modifie 2/3 texbox je clic sur
le spin pour aller au suivant.toutes les données de l userform
s'enregistrent.
Monsieur B absent , je coche absent je passe au suivant.les données ne s
'enregistre pas .
Monsieur C present pas de modification je coche present et le spinbouton
enregistre les données
Tiens au surprise monsieur B est arrivée en retard donc je remonte en
arriere avec le spin pour retrouver Mr B. je vais etre obligé de repassé
par monsieur C mais comme je vais rien cocher(ni present ni absent) il n
y aura pas de nouveau enregistrement de Mr C.
j arrive a Mr B la je coche present et ca va enregistrer les données
quand je clic sur le spin pour retrouver Mr D.

Voila ho lala j espere etre clair je suis desolé ca doit pas être difficile.
Avatar
Dominique
oups mais excuses je fatigue, j ai voulu dire "ca doit pas être facile".
Avatar
Dominique
Le 17/02/2010 22:02, Dominique a écrit :
tiens regarde ca ca marche (presque)bien sur en rajoutant de option
button absent et present
le probleme c'est que par défaut il faudrait a chaque spin que ces
options deviennent tous les deux = false.
ensuite c que mes textbox devienne rouge au changement mais bon je
verrai ca demain


Private Sub Spin_Inventaire_Change()

If Op_Absent = False And Op_Present = False Then

Call GestionDeSpinInvententaire

Else

With Worksheets("recuperationDesdonnées")

derligne = .Range("A65536").End(xlUp).Row + 1

'Identité et territoire
.Cells(derligne, 1) = Me.La_CodeINV

.Cells(derligne, 4) = Me.Te_Commune


'realisation sanglier
.Cells(derligne, 13) = Me.Te_PrelevN1Sanglier
.Cells(derligne, 18) = Me.Te_PrelevN2Sanglier
.Cells(derligne, 17) = Me.Te_PrelevN3Sanglier

'attribution("chI
.Cells(derligne, 19) = Me.Te_AtribN1ChAd
.Cells(derligne, 20) = Me.Te_AtribN2ChAd
.Cells(derligne, 21) = Me.Te_AtribN3ChAd

'attribution("chj
.Cells(derligne, 24) = Me.Te_AtribN1ChJ
.Cells(derligne, 25) = Me.Te_AtribN2Chj
.Cells(derligne, 26) = Me.Te_AtribN3ChJ

'attribution("faon
.Cells(derligne, 29) = Me.Te_AtribN1Faon
.Cells(derligne, 30) = Me.Te_AtribN2Faon
.Cells(derligne, 31) = Me.Te_atribN3Faon

'attribution("c1
.Cells(derligne, 39) = Me.Te_AtribN1C1
.Cells(derligne, 40) = Me.Te_AtribN2C1
.Cells(derligne, 41) = Me.Te_AtribN3C1

'attribution("c2
.Cells(derligne, 44) = Me.Te_AtribN1C2
.Cells(derligne, 45) = Me.Te_AtribN2C2
.Cells(derligne, 46) = Me.Te_AtribN3C2

'realisation("ch("ad("male
.Cells(derligne, 49) = Me.Te_PrelevN1ChADMale
.Cells(derligne, 50) = Me.Te_PrelevN2ChADMale
.Cells(derligne, 51) = Me.Te_PrelevN3ChAdMale

'realisation("ch("j("male
.Cells(derligne, 54) = Me.Te_PrelevN1ChjMale
.Cells(derligne, 55) = Me.Te_PrelevN2ChJMale
.Cells(derligne, 56) = Me.Te_PrelevN3ChJMale

'realisation("ch("ad("femelle
.Cells(derligne, 59) = Me.Te_PrelevN1ChADFemel
.Cells(derligne, 60) = Me.Te_PrelevN2ChADFemel
.Cells(derligne, 61) = Me.Te_PrelevN3ChAdFemel

'realisation("j("femelle
.Cells(derligne, 64) = Me.Te_PrelevN1ChJfemel
.Cells(derligne, 65) = Me.Te_PrelevN2ChJFemel
.Cells(derligne, 66) = Me.Te_PrelevN3ChJFemel

'realisation("faon
.Cells(derligne, 69) = Me.Te_PrelevN1Faon
.Cells(derligne, 70) = Me.Te_PrelevN2Faon
.Cells(derligne, 71) = Me.Te_PrelevN3Faon

'realisation("biche
.Cells(derligne, 74) = Me.Te_PrelevN1Biche
.Cells(derligne, 75) = Me.Te_PrelevN2Biche
.Cells(derligne, 76) = Me.Te_PrelevN3Biche

'realisation("C1
.Cells(derligne, 79) = Me.Te_PrelevN1C1
.Cells(derligne, 80) = Me.Te_PrelevN2C1
.Cells(derligne, 81) = Me.Te_PrelevN3C1

'realisation("C2
.Cells(derligne, 84) = Me.Te_PrelevN1C2
.Cells(derligne, 85) = Me.Te_PrelevN2C2
.Cells(derligne, 86) = Me.Te_PrelevN3C2


Call GestionDeSpinInvententaire

End With
End If
End Sub
1 2 3