[Résolu][Basic] Tableau et Collection

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 !
GMHB
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 19 févr. 2023 09:59

[Résolu][Basic] Tableau et Collection

Message par GMHB »

Bonjour,
Connaissez-vous les différences existant entre un tableau et une collection ? Quand préférer l'un à l'autre ?
Je vous remercie de votre éclairage.
Dernière modification par GMHB le 24 avr. 2023 06:21, modifié 1 fois.
LibreOffice 7.4.7.2 (x64)
Windows 10
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Basic] Tableau et Collection

Message par zeguedon »

Bonjour,

Je n'en fais pas usage au quotidien, mais un des avantages d'une collection est de permettre d’appeler un élément de la collection par son nom :
Capture d’écran du 2023-04-23 13-43-50.png
Tout est expliqué dans le livre.

@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
GMHB
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 19 févr. 2023 09:59

Re: [Basic] Tableau et Collection

Message par GMHB »

Merci à vous ,
Cela veut dire que les requêtes n'ont pas besoin d'être codées en SQL. ? Si c'est ça, c'est pas mal du tout. Adieu la connexion à la base, l'infernale danse des guillemets et simples quotes ... ?
LibreOffice 7.4.7.2 (x64)
Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Tableau et Collection

Message par Dude »

Salut,

Collection est un objet. Une table mémoire (array) est un type de variable.
Suivant le contexte, on utilise l'un ou l'autre.
Quel est le rapport avec le SQL ?
GMHB
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 19 févr. 2023 09:59

Re: [Basic] Tableau et Collection

Message par GMHB »

Vous avez raison : dans mon enthousiasme à la découverte de l'existence de cette autre forme de tableau, j'ai confondu Table de bdd et Tableau appartenant au langage Basic ! :marto:
Merci à tous deux
LibreOffice 7.4.7.2 (x64)
Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][Basic] Tableau et Collection

Message par Dude »

Collection est semble t-il un objet conçu pour s'approcher de la compatibilité avec le VBA de Microsoft.
Je viens de faire quelques tests et a priori, je déconseille de l'utiliser.

Simple exemple :

Code : Tout sélectionner

Sub Main
	oCollec = SetCollec("init","test")
	msgbox oCollec.Count & " > " & oCollec("init") 'retourne 1 > test
	oCollec = SetCollec("foo","bar", oCollec)
End Sub

Function SetCollec(sProp, sVal, optional oCollec)
	if sProp = "init" then
		Dim oCollec as new collection
	endif
	oCollec.Add(sVal, sProp)
	SetCollec = oCollec
End function
Ce code ne fonctionne pas car l'objet est perdu lors de l'appel suivant.

Mieux vaut utiliser la table mémoire, c'est plus sûr.
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Résolu][Basic] Tableau et Collection

Message par Jurassic Pork »

Hello,
il me paraît bien compliqué ton exemple Dude, l'exemple de Zeguedon qui est un exemple de Bernard Marcelly fonctionne :

Code : Tout sélectionner

Sub DictionaryExample
Dim k As String
Dim dico As New Collection
dico.Add("49000", "Angers") ' key = "Angers", Item = "49000"
dico.Add("33000", "Bordeaux")
dico.Add("09000", "Foix")
dico.Add("11350", "Cucugnan")
MsgBox("Number of elements : " & dico.Count)
Do
  k = InputBox("Town : ", "Find postal code", "")
  if Len(k) = 0 then Exit Do
  On Error GoTo inconnu
  MsgBox("Postal code : " & dico(k) )  ' the key is not case sensitive
  suite1:
  On Error GoTo 0
Loop

Do
  k = InputBox("Town : ", "Remove postal code", "")
  if Len(k) = 0 then Exit Do
  On Error GoTo inconnu
  MsgBox("Remove Postal code : " & dico(k) )  ' the key is not case sensitive
  dico.Remove(k)
  suite2:
  On Error GoTo 0
Loop
MsgBox("Number of elements : " & dico.Count)  
Exit Sub

inconnu:
  MsgBox("Town  " & k & "  is unknown", 16)
  Resume Suite1
End Sub
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][Basic] Tableau et Collection

Message par Dude »

L'exemple montre que l'on ne peut pas utiliser cet objet dans une fonction.
JPL
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 17 mars 2012 10:16

Re: [Résolu][Basic] Tableau et Collection

Message par JPL »

L'exemple montre que l'on ne peut pas utiliser cet objet dans une fonction.
Bien sûr que si ... !

Un objet Collection est une variable comme une autre et peut donc servir d'argument ou de paramètre à une fonction.

Pour faire "marcher" ton code, il suffit de remplacer

Code : Tout sélectionner

Dim oCollec As New Collection
par

Code : Tout sélectionner

Set oCollec = new collection
En effet, la variable oCollec est déjà déclarée dans les paramètres. La clause Optional n'empêche pas son existence, même si son contenu est "missing". Il faut donc éviter de la redéclarer.

JPL
Kubuntu 22.04 / LibO 24.2
Access2Base (LibO).
BaseDocumenter extension (LibO)
ScriptForge (LibO) - Documentation on https://help.libreoffice.org/latest/en- ... bPAR=BASIC
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][Basic] Tableau et Collection

Message par Dude »

OK j'ai noté qu'au final, il ne fallait pas déclarer mais juste affecter.
Merci
JPL a écrit : 28 avr. 2023 11:48En effet, la variable oCollec est déjà déclarée dans les paramètres. La clause Optional n'empêche pas son existence, même si son contenu est "missing". Il faut donc éviter de la redéclarer.
Si tu passes en mode débogage, tu verras que la déclaration qui est dans un if n'est pas exécutée.
no_problemo.gif
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
JPL
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 17 mars 2012 10:16

Re: [Résolu][Basic] Tableau et Collection

Message par JPL »

Ce n"est pas le comportement que j'observe en LO 7.5.

1) avec ton code, la compilation donne le message d'erreur suivant:
Variable oCollec déjà définie

2) après modification du code comme décrit plus haut, l'exécution se déroule normalement.
A la sortie de la Sub Main, la collection contient bien les 2 entrées souhaitées (init/test et foo/bar).

JPL
Kubuntu 22.04 / LibO 24.2
Access2Base (LibO).
BaseDocumenter extension (LibO)
ScriptForge (LibO) - Documentation on https://help.libreoffice.org/latest/en- ... bPAR=BASIC