Comment remplir des zones de texte faisant partie d'une shape

Bonjour,

Voici ma situation :

J'ai défini la shape suivante s'appelant "OPERATION_XX_Originale"

image

Cette shape contient des zones de texte.

Par exemple, la zone de texte affichant Nom_machine s'appelle "ZoneTexte_Nom_machine_XX"

J’aimerais pouvoir automatiquement remplir les zones de texte contenu dans la shape à partir d'information contenue dans la ligne d'un tableau. Ce tableau se trouve dans une autre feuille que la shape.

Actuellement, j'ai un code qui me permet de lire les informations des cellules de la ligne sélectionnée et de les stocker dans des variables.

' ----------Copie la shape modèle depuis la feuille BDD et la colle dans la feuille MIFD

Dim CelluleCible As Range
Set CelluleCible = ActiveCell
Sheets("BDD").Shapes("OPERATION_XX_Originale").Copy
ad = CelluleCible.Address
'Sheets("MIFD").Paste 'Destination:=CelluleCible
N_operations = Range("Nb_operations")
Set CelluleCible = Nothing

' -------------Stock info

nb_lignes = Selection.Rows.Count

debut = Selection(1).Row
fin = (Selection(1).Row + nb_lignes) - 1
For ligne = debut To fin
Cells(ligne, 1).Select
num_tache = Cells(ligne, 1)
article = Cells(ligne, 2)
nom_tache = Cells(ligne, 4)
station = Cells(ligne, 5)
metier = Cells(ligne, 6)
localisation = Cells(ligne, 7)
temps = Cells(ligne, 8)
pmp = Cells(ligne, 9)
Next ligne

Edit modo : merci de mettre le code entre balises SVP avec le bouton </>

Voici le code que j'ai essayé de mettre en place pour remplir le champs "Nom_machine" de ma shape, cependant cela ne marche pas.

For Each TextBox In OPERATION_XX_Originale
If TextBox.Name = "ZoneTexte_Nom_machine_XX" Then
TextBox.Value = station
End If
Next

Edit modo : merci de mettre le code entre balises SVP avec le bouton </>

Pourriez-vous m'aider à comprendre ce qui ne fonctionne pas ? Merci !

Salut, sans fichier c'est plus compliqué mais je mettrais bien une option sur le fait de remplacer For Each TextBox In OPERATION_XX_Originale par For Each TextBox In Activesheet.

Leakim

Bonjour Leakim et merci pour votre réponse !

Je ne peux, malheureusement pas partager mon fichier car le document sur lequel je travaille est confidentiel.

J'ai essayé de faire faire " For Each TextBox In Activesheet" mais l'erreur suivante s'affiche :

image

C'est peut-être parce que les textebox que je cherche à remplir ne se trouvent pas sur la feuille depuis laquelle je lance la macro (qui dans ce cas serait l'Activesheet).

J'ai essayé de faire " For Each TextBox In sheets("MIFD") (MIFD étant la feuille où se trouvent les textbox à remplir). mais la même erreur s'affiche.

Bonjour à tous,

Peut-être ainsi:

Sub test()
 Dim ctrl As OLEObject
  Application.ScreenUpdating = False
   For Each ctrl In Sheets("MIFD").OLEObjects
    If TypeOf ctrl.Object Is MSForms.TextBox Then
     If ctrl.Name Like "ZoneTexte_Nom_machine_XX" Then
      ctrl.Object.Value = station
     End If
    End If
   Next ctrl
End Sub

Cordialement,

Bonjour Xorsankukai,

Tout d’abord merci beaucoup de ta réponse,

J'ai essayé le code et je pense qu'il ne fonctionne pas car les zones de texte que je cherche à remplir ne sont pas des TextBox insérées depuis l'onglet développeur mais ce sont des Zones de texte insérées depuis l'onglet insertion (voir photo ci-dessous). Du coup je ne sais pas si leur nature est toujours des OELobject.

image

Bonsoir Urax, le Fil,

Dans le cas de zone de texte il faut utiliser TextFrame2 pour modifier son texte.

Exemple: pour une feuille Essai comportant une zone de texte Nom_Machine

Sheets("Essai").Shapes.("Nom_Machine").TextFrame2.TextRange.Characters.Text = "PChome" 

Suite,

Et si cette ou ces zone(s) de texte appartient à une forme conteneur, cadre par exemple.

Il n'est pas nécessaire de se référer directement à ce cadre. On peut cibler indirectement les formes présentes par exemple avec les données plus haut.

Sheets("Essai").Shapes.Range(Array("Nom_Machine")).TextFrame2.TextRange.Characters.Text ="PCbureau" 

Bonjour et merci de ta réponse X cellus,

J'ai intégré la ligne dans mon code et elle me renvoie l'erreur 438.

Le code suivant :

Dim shp As Shape: Set shp = ActiveSheet.Shapes("OPE")
Dim sh As Shape
shp.Select
Dim gssGroupItems As GroupShapes
Set gssGroupItems = shp.GroupItems
For Each sh In shp.GroupItems
a = sh.Name
sh.Select
sh.TextFrame.Characters.Text = station
Next sh

Me permet de faire ce que je chercher à faire (remplir des zones de texte dans une shape)

Bonjour Urax,

Normal, que cela te renvoie un message d'erreur 438. Revoir mon premier post de mardi, dont phrase reproduit ci-dessous.

Dans le cas de zone de texte il faut utiliser TextFrame2 pour modifier son texte.

Donc, selon ton post de mardi à 21h14.

Sub Modif()
'GroupItem est un groupe qui contient un cadre et une Zone de Texte
Dim shp, sh As Shape
Set shp = ActiveSheet.Shapes("GroupItem")
For Each sh In shp.GroupItems
'Ciblage de la Zone de Texte par son nom
'pour lui affecter un mot ou une variable string contenant ce mot
If sh.Name = "Nom_Machine" Then sh.TextFrame2.TextRange.Characters.Text = "PcBureau"
If sh.Name = "Rectangle 1" Then sh.TextFrame.Characters.Text = "Bonsoir"
Next
End Sub

Et voilà,

image
Rechercher des sujets similaires à "comment remplir zones texte faisant partie shape"