[Calc] Types définis par l’utilisateur

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Calc] Types définis par l’utilisateur

Messagepar cazadeis » 24 Juin 2019 09:13

Bonjour,

je travaille sur un projet qui utilise les UDT. Malheureusement je bute sur un problème dans l'attribution des valeurs. L'exemple ci-dessous est censé modifier la variable "Code" de l'indice 1 de la liste "LesProductions". Or après exécution, toutes les variables Code de l'indice 0 à 200 contiennent la chaîne "Test"


Code : Tout sélectionner   AgrandirRéduire
Sub Main
   Dim tmp As Variant
   
   tmp = creerVar()
   tmp.LesProductions(1).Code = "Test"

End Sub


Pouvez vous s'il vous plait m'aider à résoudre ce problème. Je joins un fichier exemple à ce post.

Merci pour votre aide.
Pièces jointes
Type_Utilisateur.ods
Exemple
(9.46 Kio) Téléchargé 12 fois
LibreOffice 6.1.6.3 sous Windows 10
cazadeis
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 22
Inscrit le : 21 Juil 2011 14:07

Re: [Calc] Types définis par l’utilisateur

Messagepar Dude » 24 Juin 2019 11:08

C'est quoi creerVar ?
Comme d'habitude, mettre 3 lignes de code ne sert pas à grand chose.

cazadeis a écrit:L'exemple ci-dessous est censé modifier la variable "Code" de l'indice 1

Je ne vois aucun indice de passé pour cette variable :
Code : Tout sélectionner   AgrandirRéduire
tmp.LesProductions(1).Code = "Test"
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20800
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Types définis par l’utilisateur

Messagepar cazadeis » 24 Juin 2019 11:12

Bonjour,

C'est pour cela que j'ai mis un fichier exemple en PJ.
CreerVar est une fonction qui renvoie une variable de type utilisateur

Code : Tout sélectionner   AgrandirRéduire
Function creerVar() As Variant
   Dim e As Production, f As DetailProd, g As Sequences, h As conditionnement
   Dim i As integer, j As Integer, k As integer
   
   For i = 0 To 200
      e.LesProductions(i) = g
      For j = 1 To 15
         e.lesProductions(i).sequence(j) = h
         For k = 0 To 2
            e.lesProductions(i).sequence(j).Ravier = f
            e.lesProductions(i).sequence(j).Exception = f
            e.lesProductions(i).sequence(j).Gn1 = f
            e.lesProductions(i).sequence(j).Gn2 = f
         Next k
      Next j
   Next i
   creerVar = e
End Function

LibreOffice 6.1.6.3 sous Windows 10
cazadeis
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 22
Inscrit le : 21 Juil 2011 14:07

Re: [Calc] Types définis par l’utilisateur

Messagepar Dude » 24 Juin 2019 13:29

cazadeis a écrit:C'est pour cela que j'ai mis un fichier exemple en PJ.

Et c'est pour cela que l'on n'a pas forcément envie de télécharger les dizaines de fichiers qui sont mis en ligne chaque jour sur ce forum.

Le code publié est toujours incomplet.
cazadeis a écrit:Dim e As Production, f As DetailProd, g As Sequences, h As conditionnement

Ces types sont déclarés comment ?

As-tu testé ton objet avec XRay pour voir s'il était accessible ?
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20800
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Types définis par l’utilisateur

Messagepar cazadeis » 25 Juin 2019 08:49

Bonjour,

voici la portion de code déclarant le type utilisateur :

Code : Tout sélectionner   AgrandirRéduire
Type Production
   LesProductions(0 to 200)         As Object
   
End type

Type Sequences
   Code                  As String
   QuantiteTotaleAProduire      As Integer
   Unite                  As String
   Atelier                  As Integer
   OP                     As String
   sequence(1 To 15)         As DetailProd
End Type

Type DetailProd
   Id_Plat                  As Integer
   Libelle_Plat            As String
   Quantite_Plat            As Double
   Unite_Plat               As String
   chaine                  As chaine
   cellule(1 To 6)            As Cellule
End Type

Type conditionnement
   Ravier                  As condi
   Exception               As condi
   Gn1                     As condi
   Gn2                     As condi
End Type
'################################# FONCTION ###################################

Function creerVar() As Variant
   Dim e As Production, f As DetailProd, g As Sequences, h As conditionnement
   Dim i As integer, j As Integer, k As integer
   
   For i = 0 To 200
      e.LesProductions(i) = g
      For j = 1 To 15
         e.lesProductions(i).sequence(j) = h
         For k = 0 To 2
            e.lesProductions(i).sequence(j).Ravier = f
            e.lesProductions(i).sequence(j).Exception = f
            e.lesProductions(i).sequence(j).Gn1 = f
            e.lesProductions(i).sequence(j).Gn2 = f
         Next k
      Next j
   Next i
   creerVar = e
End Function


Cet objet ne donne pas beaucoup d'informations sous Xray (voir PJ).

Merci pour votre aide.
Pièces jointes
Xray.JPG
LibreOffice 6.1.6.3 sous Windows 10
cazadeis
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 22
Inscrit le : 21 Juil 2011 14:07

Re: [Calc] Types définis par l’utilisateur

Messagepar Piaf » 25 Juin 2019 19:58

Bonjour
cazadeis a écrit:Cet objet ne donne pas beaucoup d'informations sous Xray (voir PJ).
code.png
A priori il renvoie ce que tu lui demande.
Après je n'ai rien compris à ce que tu veux obtenir.
Quelles sont les types chaîne, cellule et condi ?
Quel est l’intérêt de mal utiliser les types utilisateurs sous Calc pour une utilisation beaucoup plus simple qui semble correspondre à une base de données.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5622
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)