Excell Textbox

Résolu
Bonjour,

J'ai crée plusieurs text boxs sous excell et je cherche avec une macro a modifier le texte de toutes avec un For i=...

en gros j'ai:
texbox1, textbox2...textbox52
et j ecris dans ma macro :

For i = 1 to 52
textbox i = ....
Next i

forcement ca marche pas, il reconnait pas textboxe i et je sais pas trop quoi faire (tout ecrire a la main est faisable mais y a pleins de conditions et ca va prendre trop de temps )

J'ai vu qu on pouvait faire ca avec un "Frame" mais je sais pas ce que c'est...est ce que quelqu'un peut m'aider

Merci

Antoine
Configuration: Windows XP
Internet Explorer 7.0

18 réponses

  1. Contributeur
    Re,
    Un peu tard mais je viens seulement de penser à une solution,
    Tout les textbox avec la propriété LinkCell initialisée, par exemple TextBox1.linkCell > K1, TB2 > K2 etc..
    Tu peu aussi cacher la colonne.
    Tu peu ainsi mettre du texte dans les texbox en modifiant les valeurs des cellules, et si l'un ou l'autre des textbox sont changer manuellement tu peu récupérer en testant les cellules.
    A+
    1. Bonjour,

      Dsl Marina et Lermitte222 je faisais autre chose..

      Les macros marchent tres bien pour changer le nom des textbox, mais c'Est pas vraiment ce que je voulais faire:
      en fait je veux pouvoir les nommer de 1 a X pour pouvoir ensuite faire la meme action sur toute les textbox avec un boucle sur leur nom:

      For i = 1 to 10
      TextBox i .Value = "toto"
      Next for

      la macro permet de changer le nom mais pas de faire une action en fonction du nom...

      Est ce qu'il est possible de faire une action pour toutes les textBox de ma feuille dont le left est Joueur, sans les nomer une par une?

      Merc isi vous etes toujours la

      Antoine
      1. Contributeur
        Voui, sauf que la propriété Text ne peut pas être affectée à un objet OLE...
        Voui.. tu est sûre ?
        A+
        1. Modérateur
          Bonjour,

          Voui, sauf que la propriété Text ne peut pas être affectée à un objet OLE...
          Mais, cela voudrait dire que je n'ai pas compris la question...Je pensais qu'il s'agissait simplement de modifier le nom des textboxes.

          m@rina
          1. Contributeur
            Bonjour tous,
            Petite modification de la macro de marina,

            Sub zdt() 
            Dim zdt As OLEObject 
            Dim i As Integer 
                For Each zdt In ActiveSheet.OLEObjects 
                    If TypeOf zdt.Object Is MSForms.TextBox Then
                        i = i + 1 
                        zdt.TEXT = "joueur" & i 
                    End If 
                Next zdt 
            End Sub

            Remarque: Il faut qu'il y ai toujours 52 joueurs puisque 52 textBox,
            De plus, les Textbox ne serront pas toujours lu par ordre numérique, ce pourraît être 1 2 5 3 4 etc..
            Si pas toujours 52 joueur, rectification macro par..
            Sub zdt()
            'Renommer les textBox 1 à 9 par TextBox01, TextBox02 etc..
            'Connaître le nombre de joueurs à affichés
            Dim NBjoueurs As Integer
            Dim zdt As OLEObject
            Dim i As Integer
            NBjoueurs = 10 'Pour la démo.
                For Each zdt In ActiveSheet.OLEObjects
                    If TypeOf zdt.Object Is MSForms.TextBox Then
                        i = Val(Right(zdt, 2))
                        If i <= NBjoueurs Then
                            zdt.Text = "joueur " & i
                        End If
                    End If
                Next zdt
            End Sub
            


            A+
            1. Modérateur
              Bonsoir,

              Non, il n'y a pas de faute.

              La condition
              If Left(zdt.Name, 7) = "TextBox"

              permet de vérifier que les contrôles sont bien des textbox (et pas d'autres contrôles). Ca vérifie que les 7 premiers caractères gauches du nom sont bien les caractères TextBox. Il faut bien respecter les majuscules dans lettres de TextBox.

              m@rina
              1. Salut Marina,

                Ok j ai compri ca a l'air parfait mais il reconnait pas as Left... il me dit que ca existe pas
                est ce que c'est bien ecrit?
                merci
                1. Modérateur
                  Non, tu n'as pas besoin de ifor i to ...

                  Tu reprends ma macro et là où j'ai mis "tu mets tes actions", c'est là où tu renommes tes textbox, ce qui donne :

                  Sub zdt()
                  Dim zdt As OLEObject
                  Dim i As Integer
                  For Each zdt In ActiveSheet.OLEObjects
                  If Left(zdt.Name, 7) = "TextBox" Then 'teste le nom des objets

                  i = i + 1
                  zdt.Name = "joueur" & i

                  End If
                  Next zdt

                  End Sub
                  1. Bonjour Marina,

                    Mon probleme c'est qu'il leur arrive pas tous la meme chose me TextBox, enfin presque :

                    ce que je veux c'est :

                    TextBox1 = Joueur1
                    TextBox2 = Joueur2
                    ..
                    TextBoxN= JoueurN

                    et le nombre N est le nombre de Joueur ... donc en plus je peux pas faire un "For each "
                    c'est pourquoi je cherche a faire un For i = 1 a N puisque mon N change.... mais bno ca c'est pas tres grave pour l'instat..

                    j'aimerai donc juste changer le numero de ma textbox par un variable

                    En fai ce que je veux faire c'est un jeu de carte avec excell

                    le truc chiant a faire pour l'instant c'est d'associer mes cartes a des images...

                    c'est un peu comme le poker donc chaque joueur a 2 cartes
                    j'ai reussi a melamger mon jeu et faire la donne et mais joueur ont des cartes "ecrites" avec par exemple Aco pour l'As de coeur
                    ce que je veux c'est associer cette valeure a une image d'une carte.
                    J'ai reussi a le faire mais ca prend ultra de place

                    la premiere carte du joueur 1 s'appel Carte11 la deuxieme Carte12
                    la premiere carte du joueur 2 s'appel Carte21 la deuxieme Carte22
                    ....
                    jusque nombre de joueur qui est inferieur a 9 ( au max o na Carte91 et Carte92)

                    ensuite j'ai toute mes image enregistée sous la forme Image1 a Image52 (mes cartes).
                    et j'ai une serie d'image qui representent un dos de carte appelées Carte11, Carte12...

                    pour chaque textboxe je fais:

                    If Carte11="Aco" then Carte11= Image1
                    If Carte11="Rco" then Carte11= Image2
                    ...
                    52 fois !!!

                    ce qui me ferait 9*2*52 lignes et ca me donne pas envi

                    donc j'aimerai le faire une seul fois pour une carte " Carte(i,j) et faire varier i de 1 a 9 et j de 1 a 2

                    Voila,

                    J'ai tout balancé d'une traite mais c'est a peu pres ca

                    si tu as une idée merci

                    Antoine
                    1. Modérateur
                      Re...

                      Voilà déjà ce qu'il fallait savoir ! Des contrôles dans une feuille ne se traitent pas de la même façon que des contrôles dans une Userform.
                      Mais comme dans ton exemple tu mets : "Me", je ne comprenais pas car Me fait référence au formulaire qui contient les contrôles...

                      Voilà le code que tu peux utiliser :

                      Sub zdt()
                      Dim zdt As OLEObject
                      For Each zdt In ActiveSheet.OLEObjects
                      If Left(zdt.Name, 7) = "TextBox" Then 'teste le nom des objets

                      'tu mets ici tes actions

                      End If
                      Next zdt

                      End Sub
                      1. Salut,

                        Bé je penses qu'elles sont dans la feuilles : j'ai utilisé diretcement la boite a outil controles...
                        je sais pas ce que c'est un UserForm
                        1. Modérateur
                          Bonjour,

                          Tout d'abord, où se trouve tes textbox ? Dans ta feuille ou dans une Userform ?

                          m@rina
                          1. Salut,

                            J'avou que je comprend pas tres bien ce que fait le truc
                            j suis un gros debutant en VBA (je m'y suis mi hier!!!) et je saias pas trop a quoi sert ce code...
                            voila si tu connais plus simple hesit pas

                            merci
                            1. Contributeur
                              Bonjour,
                              Tu peu essayer en créyant une collection..
                              VBA et les collections
                              A+
                              1. Bonjour,

                                J'y ai cru ca aurait été parfait mais ca marche pas....

                                j'ai le code suivant

                                For i = 1 To 9

                                Me.Joueur&i.Value = Me.TextBox&i.Value

                                Next i

                                je veux que la valeur de Joueur1 soit egale a TextBox1
                                ...Joueur9=Textbox9

                                il me met membre de méthode ou de donnée introuvable...

                                merci si tu as une autre idée
                                1. Contributeur
                                  salut

                                  au lieu de mettre textbox i , essaye avec textbox & i