Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tableau dynamqique en VBA

2 réponses
Avatar
news
Bonsoir à tous
Je repose mon problème, car personne ne semble y avoir prêté attention.

J'ai écrit ce code où je détecte les tables dont la liaison est rompue.
Quand une table est dans ce cas, je veux stocker dans un tableau deux
informations : son nom et la table où elle existe physiquement. Comme je ne
sais pas à l'avance combien il y a de tables avec liaison rompue, j'ai opté
pour l'utilisation d'un tableau dynamique. A chaque fois que j'ai rentré les
informations relatives à une table, j'agrandis le tableau, mais j'ai un
problème avec Preserve. Voici le code :

Public Sub TesterTablesLiées()
On Error GoTo gest_erreur
'cherche à ouvrir chaque table liée pour vérifier si la connexion est valide
Dim MaTable As TableDef, rst As Recordset, Tableau()
ReDim Tableau(0, 1)

For Each MaTable In CurrentDb.TableDefs
If MaTable.Attributes = 1073741824 Then 'il s'agit d'une table liée
Set rst = MaTable.OpenRecordset 'essaie d'ouvrir la
table
End If
Next

sortie:
Exit Sub

gest_erreur:
If Err.Number = 3024 Then 'table liée introuvable
Tableau(UBound(Tableau), 0) = MaTable.Name
Tableau(UBound(Tableau), 1) = MaTable.Connect
ReDim Preserve Tableau(0, UBound(Tableau, 1) + 1) 'agrandit le
tableau en conservant ce qu'il contient déjà
Resume Next
Else
MsgBox "erreur n° " & Err.Number & " - " & Err.Description
Resume sortie
End If
End Sub

Au moment de redimensionner le tableau en utilisant Preserve, j'obtiens
l'erreur d'exécution 9 (l'indice n'appartient pas à la sélection). Si je
supprime Preserve, il n'y a pas d'erreur, le tableau est redimensionné, mais
je perds ce qu'il contient déjà.

Où ai-je commis une erreur ?
Merci de m'éclairer.

2 réponses

Avatar
Gafish
Bonjour,

Ton probleme vient je pense du fait que tu n'es pas cohérent avec tes lignes
et tes colonnes du tableau :
Tableau(UBound(Tableau), 0) = MaTable.Name
Tableau(UBound(Tableau), 1) = MaTable.Connect
tu utilises donc ici la première dimension pour stocker et quand tu
redimensionnes :
ReDim Preserve Tableau(0, UBound(Tableau, 1) + 1)
tu redimensionnes la deuxième dimension

Arnaud


"news" a écrit dans le message news:
420d1106$0$835$
Bonsoir à tous
Je repose mon problème, car personne ne semble y avoir prêté attention.

J'ai écrit ce code où je détecte les tables dont la liaison est rompue.
Quand une table est dans ce cas, je veux stocker dans un tableau deux
informations : son nom et la table où elle existe physiquement. Comme je
ne

sais pas à l'avance combien il y a de tables avec liaison rompue, j'ai
opté

pour l'utilisation d'un tableau dynamique. A chaque fois que j'ai rentré
les

informations relatives à une table, j'agrandis le tableau, mais j'ai un
problème avec Preserve. Voici le code :

Public Sub TesterTablesLiées()
On Error GoTo gest_erreur
'cherche à ouvrir chaque table liée pour vérifier si la connexion est
valide

Dim MaTable As TableDef, rst As Recordset, Tableau()
ReDim Tableau(0, 1)

For Each MaTable In CurrentDb.TableDefs
If MaTable.Attributes = 1073741824 Then 'il s'agit d'une table
liée

Set rst = MaTable.OpenRecordset 'essaie d'ouvrir la
table
End If
Next

sortie:
Exit Sub

gest_erreur:
If Err.Number = 3024 Then 'table liée introuvable
Tableau(UBound(Tableau), 0) = MaTable.Name
Tableau(UBound(Tableau), 1) = MaTable.Connect
ReDim Preserve Tableau(0, UBound(Tableau, 1) + 1) 'agrandit le
tableau en conservant ce qu'il contient déjà
Resume Next
Else
MsgBox "erreur n° " & Err.Number & " - " & Err.Description
Resume sortie
End If
End Sub

Au moment de redimensionner le tableau en utilisant Preserve,
j'obtiens

l'erreur d'exécution 9 (l'indice n'appartient pas à la sélection). Si je
supprime Preserve, il n'y a pas d'erreur, le tableau est redimensionné,
mais

je perds ce qu'il contient déjà.

Où ai-je commis une erreur ?
Merci de m'éclairer.




Avatar
Thierry
Merci de tes remarques qui m'ont montré en quoi je faisais erreur. J'ai
compris et ça marche !
A+