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à.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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" <t.a@wawa.be> a écrit dans le message news:
420d1106$0$835$8fcfb975@news.wanadoo.fr...
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
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.
Thierry
Merci de tes remarques qui m'ont montré en quoi je faisais erreur. J'ai compris et ça marche ! A+
Merci de tes remarques qui m'ont montré en quoi je faisais erreur. J'ai
compris et ça marche !
A+