Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access

VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.

Réponse
 
Outils de la discussion
Vieux 01/09/2008, 13h58   #1 (permalink)
Invité de passage
 
Date d'inscription: septembre 2008
Messages: 9
Par défaut incompatibilité de type --> Access

Bonjour,

Dans formulaire1, j'ai des zones de texte appelées nom_1, nom_2, etc.
J'ai actuellement le focus sur un autre formulaire, où se trouve une zone de texte nommée compteur contenant un nombre, et une zone de texte nommée nom.
Je veux rechercher dans formulaire1 la zone de texte dont le nom se finit par la valeur qui se trouve dans le compteur, et lui attribuer comme valeur le nom stocké dans le formulaire2.

Je fais donc ceci :

Code :
Dim txt As TextBox 
For Each txt In Forms!formulaire1 
If txt.Name Like "nom_" & Me.compteur.Value Then 
Set txt.Value = Me.Nom.Value 
End If 
Next txt
Mais cela produit l'erreur "Incompatibilité de type".

D'où vient l'erreur..?
Y aurait-il une autre façon d'effectuer ce que je désire..?
Merci

Dernière modification par mout1234 ; 01/09/2008 à 14h01 Motif: balises code
basshero816 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 14h11   #2 (permalink)
Modérateur
 
Avatar de mout1234
 
Date d'inscription: novembre 2006
Localisation: Paris
Âge: 39
Messages: 1 758
Par défaut

Bonjour,

Le set n'a pas lieu d'être ici: il s'agit d'attribuer une valeur à une propriété d'un controle et non affecter un objet à un variable objet...


Code :
Dim txt As TextBox 
For Each txt In Forms!formulaire1 
If txt.Name = "nom_" & Me.compteur.Value Then 
  txt.Value = Me.Nom.Value 
End If 
Next txt

Plus simplement, quelque chose comme ci dessous devrait marcher non?
Code :
On error resume next
Forms!formulaire1.("Nom_" & Me!Compteur) = Me!Nom
 
__________________
............................................................................................

Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.


Les FAQs les tutos Les Sources Access Profitez de ces mines d'or...

Postez dans le bon sous forum et mentionnez la version
mout1234 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 14h17   #3 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2008
Localisation: Toulouse
Messages: 38
Par défaut

Pour l'incompatibilité de type il faut écrire :

Code :
For Each txt In Forms!formulaire1.controls
à la place de :

Code :
For Each txt In Forms!formulaire1
Et oui, il faut regarder dans la collection de controles du formulaire pour trouver les zones de textes, les labels, les groupes d'options, etc...
Cette collection contien tous les objets présents dans le formulaire.
Tonioyo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 14h24   #4 (permalink)
Modérateur
 
Avatar de mout1234
 
Date d'inscription: novembre 2006
Localisation: Paris
Âge: 39
Messages: 1 758
Par défaut

Citation:
Envoyé par Tonioyo Voir le message
Pour l'incompatibilité de type il faut écrire :

Code :
For Each txt In Forms!formulaire1.controls
...
En effet, quoique la collection Controls est la collection par défaut d'un formulaire ... les deux syntaxes fonctionnent.


Par contre, tous les contrôles ne sont pas nécessairement des textbox...
__________________
............................................................................................

Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.


Les FAQs les tutos Les Sources Access Profitez de ces mines d'or...

Postez dans le bon sous forum et mentionnez la version
mout1234 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 14h37   #5 (permalink)
Invité de passage
 
Date d'inscription: septembre 2008
Messages: 9
Par défaut

Merci de vos réponses.

Mais j'ai maintenant l'erreur "Propriété ou méthode non gérée par cet objet."

Or il s'agit bien d'un TextBox, donc la ligne :

Code :
Forms.[fiche_pointage1].["nom1_" & Me.compteur] = Me.Nom
devrait marcher, non..?
basshero816 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 14h58   #6 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2008
Localisation: Toulouse
Messages: 38
Par défaut

Nan ca marche pas ca, il faudrait plutôt quelquechose comme :


Code :
Forms.[fiche_pointage1]("nom1_" & Me.compteur).Value = Me.Nom
Parce que tu as de la concaténation de chaine, il faut faire appel à un index (je ne sais pas si je suis clair en disant ca comme ca).
Tonioyo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 15h06   #7 (permalink)
Invité de passage
 
Date d'inscription: septembre 2008
Messages: 9
Par défaut

Je ne connais pas les index.
Toujours est-il que la dernière solution que tu m'as proposée ne marche pas, j'ai toujours la même erreur.

As-tu une idée d'où cela peut venir..?

Y a-t-il una autre façon de remplir dynamiquement des zones de texte..?
Merci de ton aide
basshero816 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 15h33   #8 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2008
Localisation: Toulouse
Messages: 38
Par défaut

Ton formaulaire est-il ouvert (en mode execution) quand tu execute cette ligne de code ?
Tonioyo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 15h50   #9 (permalink)
Invité de passage
 
Date d'inscription: septembre 2008
Messages: 9
Par défaut

En fait, je fais ceci :

Code :
Dim stDocName As String
    Dim stLinkCriteria As String
 
    stDocName = "formulaire1"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    
    Forms.[formulaire1]("nom1_" & Me.compteur).Value = Me.Nom
    
    Forms!formulaire2.SetFocus
    DoCmd.Close
C'est dans formulaire2 que j'écris ce code, sur une opération Click() d'un bouton.
basshero816 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 16h12   #10 (permalink)
Membre actif
 
Date d'inscription: avril 2006
Localisation: Toulouse
Âge: 23
Messages: 182
Par défaut

je pense qu'il faudrait plutôt
Code :
 
Forms![fiche_pointage1].controls("nom1_" & Me.compteur) = Me.Nom
 
Taoueret est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 16h15   #11 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2008
Localisation: Toulouse
Messages: 38
Par défaut

Mais que je suis bete honte sur moi !! bouh !!

Ce n'est pas Me.Nom mais Me.Name

Assure toi aussi qu'il y ai bien une valeur dans le Me.compteur
Tonioyo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 16h17   #12 (permalink)
Invité de passage
 
Date d'inscription: septembre 2008
Messages: 9
Par défaut

Merci beaucoup Taoueret, cette solution marche à merveille.
Je le saurai pour plus tard.

@+
basshero816 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/09/2008, 17h40   #13 (permalink)
Modérateur
 
Avatar de mout1234
 
Date d'inscription: novembre 2006
Localisation: Paris
Âge: 39
Messages: 1 758
Par défaut

Citation:
Envoyé par basshero816 Voir le message
Bonjour,
...et une zone de texte nommée nom. ...
Citation:
Envoyé par Tonioyo Voir le message
....Ce n'est pas Me.Nom mais Me.Name....
Heu, y a pas une confusion là entre la propriété Nom du formulaire et le contrôle Nom?

S'il s'agit bien du champ Nom il faut alors mettre une syntaxe évitant la confusion pour le système:
Me.Controls("Nom") ou Me("Nom") devrait fonctionner il me semble.


PS: une fois de plus, évitez les noms de champs déjà utilisés par le système (nom, date...) et nommez vos champs de manière plus précise (NomClient, DateCréation,...)
__________________
............................................................................................

Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.


Les FAQs les tutos Les Sources Access Profitez de ces mines d'or...

Postez dans le bon sous forum et mentionnez la version
mout1234 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/09/2008, 10h12   #14 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2008
Localisation: Toulouse
Messages: 38
Par défaut

Tout à fait, milles excuses,

Il est vrai que normalement on ajoute plus de précision pour un nom de controle.
Tonioyo est déconnecté   Envoyer un message privé Réponse avec citation
NEWS ACCESSF.A.Q AccessF.A.Q VBATutorielsSourcesOutilsLivresAccess TVAccess 2007

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide