Flux rss
Collection CommentCaMarche.net

[VBA] Ecrire/lire une série de TextBox en une seule Sub

Publié par lermite222, dernière mise à jour le jeudi 20 novembre 2008 à 14:44:54 par Nilou17
En VBA, les TextBox ne disposent pas d'un index et dans la plupart des cas, pour entrer du texte, on procède par..
  • TextBox1.Text = Cells(2,1).value
  • TextBox2.Text = Cells(2,2).value
  • TextBox3.Text = Cells(2,3).value

Et l'inverse pour lire les contenus
Ça peut aller s'il n'y a que quelques TextBox, mais cela devient fastidieux s'il y en a une plus grande quantité.


Préliminaires


Pour tester les codes ci-dessous, j'ai mis des données dans une feuille et 9 TextBox dans un UserForm
Un nouveau classeur..
Renommer "Feuil2" par "Base" et agencer les cellules comme l'image ci-dessous.

Entrez dans l'IDE de VBA et ajouter un UF que vous renommez "Joueur", ajouter les contrôles comme l'image ci-dessous en nommant les TextBox et le label exactement comme indiqué sur les textes.

Télécharger le classeur


Éventuellement si vous voulez avoir un classeur déjà initialisé
Le classeur de la démo sur Cjoint avant le 20/09/2008
Un classeur plus élaboré et reprenant ce principe sur Cjoint avant le 20/09/2008
Sinon, vous pouvez me contacter par MP je le remettrai sur CJoint.

Dans le module de la feuille "Base"


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim N As Long, Fin As Long
Dim TB
    TB = Split(Target.Address, ":")
    If UBound(TB) > 0 Then Exit Sub 'quand sélectionne un bloc, sinon bug
    Fin = Range("A65536").End(xlUp).Row

    If Target.Column < 11 And Target.Row  <= Fin And Target.Row > 2 Then
        Joueur.Show 1
    End If
End Sub

Dans le module de l'UF


Option Explicit
Dim Lig As Long

Private Sub UserForm_Initialize()
    Lig = ActiveCell.Row
    RemplirFiche
End Sub

'Retransmet les données sur la feuille Base, il est possible 
'aussi de contrôler si c'est nécessaire.
Private Sub OK_Click()
Dim Cont As Control
Dim N As Integer
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Sheets("Base").Select
    Cells(Lig, 1) = Label1.Caption
'-------------------------------------------------------------
    'C'est la routine "écrire" de cette astuce
    For Each Cont In Me.Controls
        If TypeOf Cont Is MSForms.TextBox Then
            N = Val(Right(Cont.Name, 2))
            Cells(Lig, N) = Trim(Cont.Object.Text)
        End If
    Next Cont
'-------------------------------------------------------------
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Unload Me
End Sub

Sub RemplirFiche()
Dim Cont As Control
Dim N As Integer
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Sheets("Base").Select
    Label1.Caption = Cells(Lig, 1).Value
'-------------------------------------------------------------
    'C'est la routine "Lire" de cette astuce
    For Each Cont In Me.Controls
        If TypeOf Cont Is MSForms.TextBox Then
            N = Val(Right(Cont.Name, 2))
            Cont.Object.Text = Cells(Lig, N)
        End If
    Next Cont
'-------------------------------------------------------------
    Me.Caption = "Fiche de " & Text02.Text & " " & Text03.Text
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Il y a assez bien de lignes de code mais en fait il n'y a que 6 lignes pour Lire les données et 6 lignes pour écrire les données.
Le reste c'est pour faire fonctionner la démo.

Conclusion


L'astuce consistait simplement à..
  • Trouver le moyen de déterminer le nom du Textbox
  • Pouvoir lire/écrire sur ces Textbox, il fallait trouver le code pour changer le texte d'un Objet.

En faisant coïncider les 2 derniers caractères du nom du TextBox avec l'adresse de son lien, le tour est joué.
Le résultat serait identique avec un tableau, il suffirait simplement de modifier les sub en conséquence
en nommant les derniers caractères des TextBox avec le même indice que les index du tableau.
Si les indices devaient être plus grands que 99, il faudrait modifier les lignes N = Val(Right(Cont.Name, 2)) par N = Val(Right(Cont.Name, 3)) pour aller jusqu'à 999

Complément


Cette démo montre comment lire et écrire sur une série de TextBox mais la multiplication des contrôles d'événement tel que TextBox_Click, TextBox_Change, TextBox_MouseUp etc.. nécessite encore de multiplier les lignes de code. Pour travailler sur le même principe, vous pouvez vous inspirer de l'astuce VBA et les collections d'objets

Fin Page


Fond d'écran changeant (Résolu) Bonjour existe-t-il un moyen d'avoir son fond d'écran qui change tout seul afin de briser la monotonie d'une même image, sans le faire tout seul? www.commentcamarche.net/forum/affich-5438411-fond-d-ecran-changeant
L'écran s'éteint (Résolu) Bonjour, depuis 2,3 jour mon écran s'éteint tout seul, mais pas la tour et j'aimerais savoir si quelq'un s'y connait vraiment pour m'aider merci d'avance Aurélie www.commentcamarche.net/forum/affich-6225184-l-ecran-s-eteint
[Linux] Accéder à NTFS en écriture Les différentes versions de Linux sont fournies avec différents pilotes NTFS. Certains permettent l'écriture NTFS, d'autre seulement la lecteur (même quand ils sont affichés RW !) Si votre pilote NTFS ne supporte pas l'écriture NTFS (par exemple... www.commentcamarche.net/faq/sujet-3423-linux-acceder-a-ntfs-en-ecriture
[Python] Lire et écrire des fichiers CSVLIRE ET ÉCRIRE DES FICHIERS CSV Python www.python.org, dans sa version 2.4 supporte de facto le format CSV (comma-separated values: valeurs séparées par des virgules). La Library Reference est certes très explicative à ce... www.commentcamarche.net/faq/sujet-2382-python-lire-et-ecrire-des-fichiers-csv
[Moniteur] "NO SIGNAL" est affiché sur l'écranLorsque vous allumez votre PC et votre moniteur (écran), celui-ci affiche NO SIGNAL (ou en français Aucun signal) ou bien l'écran reste désespérément noir. Hypothèses Le câble qui relie le moniteur et l'unité centrale est peut-être mal branché... www.commentcamarche.net/faq/sujet-1700-moniteur-no-signal-est-affiche-sur-l-ecran
Lire et écrire les partitions Windows (NTFS)Ubuntu est parfaitement capable de lire et écrire les partitions Windows, qu'elles soient FAT32 ou NTFS. Cela inclut les partitions de Windows 95, 98, ME, NT, 2000, XP, 2003 et Vista. Mais par défaut, Ubuntu (et Linux en général) peut lire et... www.commentcamarche.net/faq/sujet-5544-lire-et-ecrire-les-partitions-windows-ntfs
(XP) enlever l'écran de selection de comptes (Résolu)Chalut ! J'aimerais virer cet écran car je suis seul a utiliser l'ordi , en + ya qu'un seul compte qui s'affiche donc c'est stupide qu'il me demande lequel choisir !! Une idée ? www.commentcamarche.net/forum/affich-2334497-xp-enlever-l-ecran-de-selection-de-comptes
Ecran plat 19' samsung 920n (problème) (Résolu)Bonjours a tous, j'ai acheté mon ecran plat hier tout est nickel sauf des fois mon ecran s'éteind tout seul pendant 1sec ce qui est bizarre j'ai joué a un jeu et aucun probleme! est ce que quelqu'un peut me conseiller ou me... www.commentcamarche.net/forum/affich-2302907-ecran-plat-19-samsung-920n-probleme
[VBA] Variable dans nom d'une textbox (Résolu)Bonjour, Voilà le probleme qui m'empeche d'avancer : Je voudrais qu'une cellule de ma feuille de calcul excel prenne la valeur d'une textbox , seulement , la textbox va dépendre de deux variables ! Le probleme c'est que je... www.commentcamarche.net/forum/affich-2941551-vba-variable-dans-nom-d-une-textbox
Télécharger Free Virtual Serial Ports EmulatorPour les utilisateurs d'un même réseau ou même sur un seul ordinateur, parfois un appareil peut être sollicité plus d'une fois par plusieurs applications. Free Virtual Serial Ports Emulator ou VPSE est un programme destine aux ingénieurs... www.commentcamarche.net/telecharger/telecharger-34056516-free-virtual-serial-ports-emulator
Gigabyte GeForce 8500 GT 512 Mo DDR2 / PCI-E / DVI / TV-OUTDDR 2, Bi-écran, Sortie DVI, RamDAC: , D-sub (HD-15), Sortie TV, Bus mémoire:128 bit, Mémoire totale:512.0 Mo, Type de mémoire:DDR2, Fréquence GPU:450 MHz, Interface:PCI-E, Système:PC, Chipset graphique:GeForce 8500 GT www.commentcamarche.net/guide-achat/gigabyte-geforce-8500-gt-512-mo-ddr2-pci-e-dvi-tv-out-951893-fiche-technique
Ubisoft révèle "Far Cry 2" le 23 octobre(Paris - Relax news) - Attendu avec impatience depuis son annonce aux Ubidays de 2007, Far Cry 2 arrive sur PC, Xbox 360 et PS3 jeudi 23 octobre prochain. Le 2ème opus de la série de tir subjectif Far Cry s'éloigne du jeu original sorti au printemps... www.commentcamarche.net/actualites/ubisoft-revele-far-cry-2-le-23-octobre-5847569-actualite.php3
Fichier IDXFormat IDX Un fichier IDX est un fichier de sous-titres accompagnant généralement une séquence vidéo dans un fichier à part. Le fichier de sous-titres doit de préférence avoir le même nom que le fichier vidéo (hormis l'extension) est être dans le... www.commentcamarche.net/contents/fichier/idx.php3
Connecteur VGA (SUB-D15)Prises SUB-D15 Le connecteur mini Sub-D (ou SUB-D15) est un connecteur possédant 15 broches (3 séries de 5 broches). Ce type de connecteur équipe notamment la plupart des cartes graphiques en permettant d'envoyer à l'écran 3 signaux analogiques... www.commentcamarche.net/contents/elec/connecteur-prise-vga-sub-d15.php3