Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/10/2011, 07h36   #1
Invité régulier
 
Inscription : novembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 24
Points : 6
Points : 6
Par défaut Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late

Bonjour à tous,

J'aurais souhaité avoir des conseils sur la manipulation et la structuration de données.

Description :
Dans un fichier de données, je manipule un certains nombres d'entités toutes du même type. Ces entités possèdent certains attributs :

Entité :
Nom
Nombre de Composants
Liste des Composants, ces Composants étant des objets.

L'idée est de parcourir le fichier de données et pour chaque entité d'en extraire les différents attributs. Chaque entité est ensuite stockée.
Et finalement toute la liste de ces entités est à nouveau parcourue pour récupérer leurs attributs.

Ebauche :
Voici la voie sur laquelle je suis parti mais je tombe sur un message d'erreur que j'avoue avoir du mal à comprendre. Comme ce n'est peut être pas la meilleure des solutions, je reste ouvert à toute autre suggestion.

> définition d'un type personnalisé pour les entités
> récupération des attributs des entités
> stockage dans une collection

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Type tEntite
    Name As String
    NbComposants As Integer
    Composants As Variant
End Type
 
Sub Principal ()
	Dim oEntite As tEntite
	Dim cEntites As New Collection
	Dim vComposants() As Variant
    	ReDim vComposants (0)
	...
	Le nombre d'entités NbEntites a été récupéré
	For i = 1 to NbEntites
		Le nombre de composants NbComposants a été récupéré		
		For j = 1 to NbComposants
			ReDim Preserve vComposants (UBound(vComposants) + 1)
			vComposants (i) =  ExtractionComposants (i)	
		Next j
	Next i
	cEntites.Add oEntite, CStr(i)
End sub
Le message d'erreur suivant survient alors :

Compile error : Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions.

Par avance, merci de votre aide.
Vorillyan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 09h42   #2
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
Par défaut re

fais un essai sans:
et plutôt a avec:
Ca donne quoi??
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/10/2011, 11h36   #3
Invité régulier
 
Inscription : novembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 24
Points : 6
Points : 6
Bonjour lenovo49,

Avec un Dim générique, cela bloque sur un Run-time error '91' : Object variable or With Block variable not set lors de l'affectation du premier attribut de l'entité : oEntite.Name.
Vorillyan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 20h44   #4
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 669
Points : 7 669
Bonjour,

Je sais que ça ne répond pas à ta question mais je te conseille très fortement de lire ce tuto.

Il m'a permis de développer une application de gestion de la prioritisation des pannes d'appareils répartis dans un millier de sites.
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 10h39   #5
Invité régulier
 
Inscription : novembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 24
Points : 6
Points : 6
Bonjour AlainTech,

Tout d'abord l'explication du pourquoi est ce que l'ébauche ne fonctionnait pas : http://http://support.microsoft.com/kb/184898

Par ailleurs j'avais lu le tutoriel avant de poster mais il ne m'avait pas semblé répondre à mes questions.
Je l'ai donc relu en détail et effectivement ...
En passant pas un module de classe cela fonctionne parfaitement !

Un grand merci donc.
Et une petite question avant de clore le sujet :
Lorsque je regarde dans Watches mon objet appartennant à la classe créée, qui a comme attributs Id et Name par exemple, je vois tout en "double" :
Id
mId
Name
mName
Est ce normal ?

Cordialement
Vorillyan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 18h46   #6
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
bonjour,

Citation:
Envoyé par Vorillyan Voir le message
Lorsque je regarde dans Watches mon objet appartennant à la classe créée, qui a comme attributs Id et Name par exemple, je vois tout en "double" :
Id
mId
Name
mName
Est ce normal ?
ce n'est pas en double, ce ne sont pas les mêmes noms...
mettre en private ce qui ne doit pas être accessible à l'extérieur de la classe
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 13h55   #7
Invité régulier
 
Inscription : novembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 24
Points : 6
Points : 6
Merci Arkham46 pour ces précisions.

Merci pour votre aide.
Post clos.

Vorillyan.
Vorillyan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h46.


 
 
 
 
Partenaires

Hébergement Web