VBA : tableau de variables type

Zahara -  
 Utilisateur anonyme -
Bonjour à tous,

pour un programme, je dois définir une donnée personnalisée, on va dire "ville",
ensuite je définis un tableau de ce type de donnés, on va dire "région"

Mais là ou j'ai un problème, c'est que je souhaiterais appeler une procédure utilisant mon tableau, et que ça ne compile pas.

Voici un exemple de code :

type ville
nom as string
code_postal as integer
end type

public region(3) as ville

sub principale()
'blabla pour initialiser "region"
call secondaire(region)
end sub

sub secondaire(byref region)
'blabla
end sub

Voilà, quelqu'un a-t-il une idée? Merci d'avance!
Configuration: Windows XP
Firefox 3.0.10

7 réponses

  1. le père
     
    seuls les types définis par l'utilisateur et qui sont définis dans les modules d'objets publics peuvent êtres convertis depuis ou vers un variant
    C'est précisément ce qu'évite la déclaration du vrai type dans la définition de la fonction, comme je le propose dans mon message 2. As-tu essayé ?
    2
  2. Utilisateur anonyme
     
    Bonjour,

    Quelques observations :

    Votre code de départ :
    Option Explicit
    
    Type Ville
        Nom As String
        Code_postal As Integer
    End Type
    
    ' Ici la variable Region est de type public
    Public Region(3) As Ville
    
    Sub Principale()
    
        Region(0).Nom = "Lupin"
        Region(0).Code_postal = "12345"
        
        ' Alors pourquoi la passer en paramètre
        ' puisqu'elle est connue de tout le projet [Public]
        Call Secondaire(Region)
        
    End Sub
    
    Sub Secondaire(ByRef Region As Ville)
        
        Region(1).Nom = "Zahara"
        Region(1).Code_postal = "54321"
        
    End Sub
    '
    


    Voici deux façon de faire :
    Option Explicit
    
    Type Ville
        Nom As String
        Code_postal As Integer
    End Type
    
    ' Ici la variable Region est de type public
    Public Region(3) As Ville
    
    Sub Principale()
    
        Region(0).Nom = "Lupin"
        Region(0).Code_postal = "12345"
        ' Puisque Region est public, elle est
        ' connue de Secondaire
        Call Secondaire
        MsgBox Region(0).Nom & vbLf & Region(1).Nom
        
    End Sub
    
    Sub Secondaire()
        
        MsgBox "Secondaire"
        Region(1).Nom = "Zahara"
        Region(1).Code_postal = "54321"
        
    End Sub
    '
    


    et enfin :
    Option Explicit
    
    Type Ville
        Nom As String
        Code_postal As Integer
    End Type
    '
    
    Sub Principale()
    
        Dim Region(3) As Ville
    
        Region(0).Nom = "Lupin"
        Region(0).Code_postal = "12345"
        
        ' Ici la variable Region est inconnu
        ' de secondaire, il est donc obligatoire
        ' de la passer en paramètre.
        Call Secondaire(Region)
        
    End Sub
    '
    
    Sub Secondaire(ByRef Region As Ville)
        
        Region(1).Nom = "Zahara"
        Region(1).Code_postal = "54321"
        
    End Sub
    '
    


    Lupin
    1
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Où est le problème ? Quel code d'erreur et sur quelle ligne de code ?

    Les procédures sont-elles dans le même module ou dans des modules différents ?

    D'autre part, si tu veux que ton code postal soit sur 5 caractères, déclare le en String. Si ça n'a pas d'importance, déclare le en Long, mais pas en Integer...

    ;o)
    0
  4. le père
     
    Bonjour

    Si tu donnais le type complet du paramètre de secondaire(ByRef region() As ville), au lieu de ta déclaration qui le transforme en variant ?
    Ça dépend aussi du type de module dans lequel se trouve ton code.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Zahara
     
    Bonjour à tous,
    d'abord merci pour vos réponses,

    Mes procédures sont dans des modules différents,

    quand je cherche à compiler, j'obtiens le message suivant :
    "Erreur de compilation,
    seuls les types définis par l'utilisateur et qui sont définis dans les modules d'objets publics peuvent êtres convertis depuis ou vers un variant, ou passés à des fonctions à liaison tardive."
    Ce message est affiché quand le programme appelle la seconde routine (call secondaire(region) )

    J'avais mis ville et code postal à titre illustratif comme je travaille sur des données financières un peu ch**, mais merci pour le conseil ;-)

    En espérant que qqn saura m'aider, pour ne pas être bloquée dans mon développement j'ai directement défini des tableaux dans le type de la variable
    nom(3) as string
    code_postal(3) as long
    mais c'est loin d'être optimal :-(
    0
  7. Zahara
     
    Wow wow wow, super
    Un tout grand merci!
    0
  8. Utilisateur anonyme
     
    Bonjour,

    Quelques observations :

    Votre code de départ :
    Option Explicit
    
    Type Ville
        Nom As String
        Code_postal As Integer
    End Type
    
    ' Ici la variable Region est de type public
    Public Region(3) As Ville
    
    Sub Principale()
    
        Region(0).Nom = "Lupin"
        Region(0).Code_postal = "12345"
        
        ' Alors pourquoi la passer en paramètre
        ' puisqu'elle est connue de tout le projet [Public]
        Call Secondaire(Region)
        
    End Sub
    
    Sub Secondaire(ByRef Region As Ville)
        
        Region(1).Nom = "Zahara"
        Region(1).Code_postal = "54321"
        
    End Sub
    '
    


    Voici deux façon de faire :
    Option Explicit
    
    Type Ville
        Nom As String
        Code_postal As Integer
    End Type
    
    ' Ici la variable Region est de type public
    Public Region(3) As Ville
    
    Sub Principale()
    
        Region(0).Nom = "Lupin"
        Region(0).Code_postal = "12345"
        ' Puisque Region est public, elle est
        ' connue de Secondaire
        Call Secondaire
        MsgBox Region(0).Nom & vbLf & Region(1).Nom
        
    End Sub
    
    Sub Secondaire()
        
        MsgBox "Secondaire"
        Region(1).Nom = "Zahara"
        Region(1).Code_postal = "54321"
        
    End Sub
    '
    


    et enfin :
    Option Explicit
    
    Type Ville
        Nom As String
        Code_postal As Integer
    End Type
    '
    
    Sub Principale()
    
        Dim Region(3) As Ville
    
        Region(0).Nom = "Lupin"
        Region(0).Code_postal = "12345"
        
        ' Ici la variable Region est inconnu
        ' de secondaire, il est donc obligatoire
        ' de la passer en paramètre.
        Call Secondaire(Region)
        
    End Sub
    '
    
    Sub Secondaire(ByRef Region As Ville)
        
        Region(1).Nom = "Zahara"
        Region(1).Code_postal = "54321"
        
    End Sub
    '
    


    Lupin
    0