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
    salut

    au lieu de mettre textbox i , essaye avec textbox & i
    0
    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
      0
      1. Contributeur
        Bonjour,
        Tu peu essayer en créyant une collection..
        VBA et les collections
        A+
        0
        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
          0
          1. Modérateur
            Bonjour,

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

            m@rina
            0
            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
              0
              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
                0
                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
                  0
                  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
                    0
                    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
                      0
                      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
                        0
                        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+
                          0
                          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
                            0
                            1. Contributeur
                              Voui, sauf que la propriété Text ne peut pas être affectée à un objet OLE...
                              Voui.. tu est sûre ?
                              A+
                              0
                              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
                                0
                                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+
                                  0
                                  1. excellent effectivement c pas idiot merci
                                    0