Décoche automatique case à cocher

sebimpro

XLDnaute Nouveau
Bonjour,

Je suis en trainn de programmer un questionnaire, il se compose d'un ensemble de case à cocher et textbox intitulé T14, T15, T16.... jusqu'au à T250.

La case T14 s'enregistre sur la ligne n, collone 14 de ma feuille excell, la T15, ligne n, colonne 15.... et ainsi de suite.


J'ai deux questions:

- Je cherche un moyen de décocher automatiquement les cases à cocher et eventuellement de vider les textbox automatiquement quand je passe d'un renregistrement à un autre.

- Y'a t-il moyen avec une boucle d'enregistrer automatiquement T14 dans la cellule (N,14), T15 dans (N, 15)....
Plutôt que d'inscrire 200 fois:
Worksheets('données').Cells(ligne, 14).Value = T14
Worksheets('données').Cells(ligne, 15).Value = T15
....

Merci pour votre aide.

Seb
 

jeromegmc

XLDnaute Occasionnel
Salut,

Pour t'éviter de recopier 200 fois la même ligne je pense à un truc comme ça:

Code:
Dim i, ligne
Dim mytextbox As Object

ligne = 1

For i = 1 To 200
    mytextbox.Name = 'TextBox' & i
    Cells(ligne, i) = mytextbox.Value
Next

Le problème c'est que 'TextBox' & i n'est reconnu que comme une chaine de caractères et donc ça ne marche pas.

Quelqu'un aurait-il une solution pour convertir 'TextBox' & i de chaine de caractères à nom de TextBox?


On avance mais je ne solutionne pas ton pb.dsl

A+
 

Hervé

XLDnaute Barbatruc
Bonjour seb, jérome, le forum

jérome, il faut utiliser ceci : controls('Textbox' & i) pour que ceci fonctionne.

Sinon, seb, il aurait été plus facile d'utiliser la propriété tag des controles en indiquant à ceux-ci le numéro de colonne.

Tu peux peut etre essayer ceci pour ton souci :

Private Sub CommandButton1_Click()
Dim ctrl As Control
Dim colonne As String
Dim ligne As Integer
Dim i As Byte

ligne = 1

For Each ctrl In Controls
    colonne = ''
   
Select Case TypeName(ctrl)
   
Case 'CheckBox'
       
For i = 1 To Len(ctrl.Name)
           
If IsNumeric(Mid(ctrl.Name, i, 1)) Then colonne = colonne & Mid(ctrl.Name, i, 1)
       
Next i
        Cells(ligne, Val(colonne)) = ctrl
       
If ctrl = True Then ctrl = False
       
   
Case 'TextBox'
       
For i = 1 To Len(ctrl.Name)
           
If IsNumeric(Mid(ctrl.Name, i, 1)) Then colonne = colonne & Mid(ctrl.Name, i, 1)
       
Next i
        Cells(ligne, Val(colonne)) = ctrl
        ctrl = ''
   
End Select
Next ctrl
End Sub



salut
 

laurent45

XLDnaute Occasionnel
Bonjour Sebimpro, jeromegmc,
Bonjour le Forum,

Je t'ai préparé un petit USF, que tu pourras repiquer pour ton Appli.

Jérome, ton idée est bonne, je travaillais dessus justement.

[file name=EffaceCheckBox.zip size=13709]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/EffaceCheckBox.zip[/file]

Bon courage.

@+

Edit : décidément ! :lol:
Hervé est toujours plus rapide... :S , et plus efficace. Il est clair que vu comme ça... :whistle: C'est mieux.

Message édité par: laurent45, à: 17/10/2005 15:15
 

Pièces jointes

  • EffaceCheckBox.zip
    13.4 KB · Affichages: 38

jeromegmc

XLDnaute Occasionnel
Salut à tous,

Hervé peux-tu être plus détaillé dans ta réponse, je doit utiliser 'controls' comme ceci?


Code:
Dim i, ligne
Dim mytextbox As Control

ligne = 1

For i = 1 To 2
    mytextbox.Name = Controls('TextBox' & i)
    Cells(ligne, i) = mytextbox.Value
Next


Car ça ne marche pas, pour info mes Textbox se trouvent sur une feuille (dans excel) et pas sur un userform

A+

Message édité par: jeromegmc, à: 17/10/2005 15:37
 

Hervé

XLDnaute Barbatruc
resalut jerome

En effet ce type de macro ne fonctionne pas pour les textbox se trouvant sur les feuilles.

Dans ce cas là on utilise les oleobjects qui sont les controles ActiveX appliqués à une feuille.

je te donne un code pour ton souci, je n'ai pas pu le tester car ce type de controle me fait bugger violement excel :eek: (je sais pas pourquoi, si quelqu'un à la réponse...)

Sub Bouton4_QuandClic()
Dim i As Integer
Dim ligne As Integer
Dim ctrl As OLEObject


ligne = 1

For i = 1 To ActiveSheet.OLEObjects.Count
Cells(ligne, i) = ActiveSheet.OLEObjects(i).Object.Value
Next i

End Sub


en espérant que ceci fonctionne :unsure:

salut

Message édité par: hervé, à: 17/10/2005 16:01
 

Hervé

XLDnaute Barbatruc
re

Ben non plus de solution.

je ne vois pas pourquoi ceci t'ouvrirai une fonction de perso.xls :eek:

pourrais-tu joindre un exemple de ton fichier.

salut

edition : jerome on bascule dans le post que tu avais ouvert, on à peut etre assez 'pollué' le fil de seb :)

Message édité par: hervé, à: 17/10/2005 16:17
 

jeromegmc

XLDnaute Occasionnel
Re, Re,

En épurant le fichier, pour te l'envoyer (j'avais un userform qui trainait et quelques modules provenant du forum), j'ai réessayé et la ça marche exactement comme il faut. :S

Les mystère du VBA!!!!!??????

Je pense que c'est le fait de définir comme OLEObjects qui pose pb quand il détecte plusieurs OLEObjects?!?


A+

Message édité par: jeromegmc, à: 17/10/2005 16:24
 

Hervé

XLDnaute Barbatruc
re jérome


Je viens de tester le code que je t'ai donné, et pas de souci.

OLEObjects est la collection des activex se trouvant sur une feuille.
.counts permet de connaitre le nombre d'activeX et donc de faire une boucle.

une petite macro, pour peut etre t'aider.

Sub Bouton1_QuandClic()
Dim ctrl As OLEObject

With ActiveSheet
   
For Each ctrl In .OLEObjects
       
'MsgBox ctrl.progID 'pour connaitre leurs identifiants
       
'MsgBox ctrl.Top 'leurs hauteurs depuis le haut de la fenetre
        MsgBox ctrl.Name
' pour connaitre leurs noms
       
'MsgBox ctrl.Parent.Name 'le nom de la feuille ou ils se trouvent
       
'MsgBox ctrl.LinkedCell 'l'adresse de la cellule de renvoi
       
'etc......
   
Next ctrl
End With
End Sub


salut
 

Discussions similaires

Réponses
8
Affichages
2 K

Statistiques des forums

Discussions
312 322
Messages
2 087 275
Membres
103 507
dernier inscrit
tapis23