[VBA] Opération non autorisée pour ce type d'objet.
Résolu
ludobalu
Messages postés
276
Date d'inscription
Statut
Membre
Dernière intervention
-
ludobalu Messages postés 276 Date d'inscription Statut Membre Dernière intervention -
ludobalu Messages postés 276 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai récemment appris le Visual Basic mais maintenant que je l'utilise avec Access j'ai quelques problèmes, notamment que le je veux indiquer des champs dans des tables etc... car ce n'est pas pareil qu'avec Excel, j'ai un peu de mal. J'espère donc que vous me pardonnerez si jamais vous trouviez mes erreurs grossières.
Avant de vous expliquer mon problème, je vais vous expliquer ce compte réaliser :
Je possède une table nommée "t_Card" dans laquelle je possède une colonne nommée "i_Card" (qui correspond à la clé primaire de cette table).
Je possède une seconde table nommée "t_Channel" dans laquelle je possède encore cette colonne "i_Card", ce sont deux tables liées, à chaque valeur de i_Card dans la table t_Card, correspond un ou plusieurs enregistrement de la table t_Channel.
J'aimerais pouvoir compter le nombre d'enregistrements non vides de la table t_Channel pour chaque valeur de i_Card de la table t_Card et ensuite affecter ce nombre dans une nouvelle colonne de la table t_Card pour chaque enregistrement.
(Désolé si je m'explique mal, mais je en gros je souhaiterais afficher pour tous les enregistrements de la table t_Card, le nombre de d'enregistrements non vides qui leurs corresponds par rapport à la table t_Channel)
Voici le code que j'ai réalisé :
Sub essai()
Dim Card As Object
Dim t_Card As DAO.TableDef
Dim db As DAO.Database
Set db = CurrentDb
Set t_Card = db.TableDefs("t_Card")
For Each Card In t_Card
'Pour chaque enregistrement de la table t_card, i prend la valeur de i_card de la table t_card et
'affecte la variable nbre_channels_occupes dans le champ channels_occupes de la table t_card
i = i_Card.Value
'Compte le nombre total de channels dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_total_channels = DCount("[i_Channel]", "t_Channel", "[i_Card] ='& i&'")
'Compte le nombre de channels non occupés dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_channels_vides = DCount("[i_Channel]", "t_Channel", "IsNull([i_Signal_input])")
'Calcule le nombre de channels occupés dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_channels_occupes = nbre_total_channels - nbre_channels_vides
'Pour chaque valeur de i_Card de la table t_Card, le champ Total_Channels prend la valeur de la variable nbre_channels_occupes
If t_Card.Fields("i_Card") = i Then
t_Card.Fields("Total_Channels") = nbre_channels_occupes
End If
Next Card
End Sub
Le message se trouve au niveau du "For Each...", voici l'erreur que j'obtiens :
Opération non autorisée pour ce type d'objet.
Pourriez-vous m'indiquer un élément de réponse ? Merci beaucoup !
J'ai récemment appris le Visual Basic mais maintenant que je l'utilise avec Access j'ai quelques problèmes, notamment que le je veux indiquer des champs dans des tables etc... car ce n'est pas pareil qu'avec Excel, j'ai un peu de mal. J'espère donc que vous me pardonnerez si jamais vous trouviez mes erreurs grossières.
Avant de vous expliquer mon problème, je vais vous expliquer ce compte réaliser :
Je possède une table nommée "t_Card" dans laquelle je possède une colonne nommée "i_Card" (qui correspond à la clé primaire de cette table).
Je possède une seconde table nommée "t_Channel" dans laquelle je possède encore cette colonne "i_Card", ce sont deux tables liées, à chaque valeur de i_Card dans la table t_Card, correspond un ou plusieurs enregistrement de la table t_Channel.
J'aimerais pouvoir compter le nombre d'enregistrements non vides de la table t_Channel pour chaque valeur de i_Card de la table t_Card et ensuite affecter ce nombre dans une nouvelle colonne de la table t_Card pour chaque enregistrement.
(Désolé si je m'explique mal, mais je en gros je souhaiterais afficher pour tous les enregistrements de la table t_Card, le nombre de d'enregistrements non vides qui leurs corresponds par rapport à la table t_Channel)
Voici le code que j'ai réalisé :
Sub essai()
Dim Card As Object
Dim t_Card As DAO.TableDef
Dim db As DAO.Database
Set db = CurrentDb
Set t_Card = db.TableDefs("t_Card")
For Each Card In t_Card
'Pour chaque enregistrement de la table t_card, i prend la valeur de i_card de la table t_card et
'affecte la variable nbre_channels_occupes dans le champ channels_occupes de la table t_card
i = i_Card.Value
'Compte le nombre total de channels dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_total_channels = DCount("[i_Channel]", "t_Channel", "[i_Card] ='& i&'")
'Compte le nombre de channels non occupés dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_channels_vides = DCount("[i_Channel]", "t_Channel", "IsNull([i_Signal_input])")
'Calcule le nombre de channels occupés dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_channels_occupes = nbre_total_channels - nbre_channels_vides
'Pour chaque valeur de i_Card de la table t_Card, le champ Total_Channels prend la valeur de la variable nbre_channels_occupes
If t_Card.Fields("i_Card") = i Then
t_Card.Fields("Total_Channels") = nbre_channels_occupes
End If
Next Card
End Sub
Le message se trouve au niveau du "For Each...", voici l'erreur que j'obtiens :
Opération non autorisée pour ce type d'objet.
Pourriez-vous m'indiquer un élément de réponse ? Merci beaucoup !
A voir également:
- [VBA] Opération non autorisée pour ce type d'objet.
- Site pour vendre des objets d'occasion - Guide
- Télécharger opera mini pour pc - Télécharger - Navigateurs
- Clear type - Guide
- Objet interdit en cabine ryanair - Guide
- L'opération demandée nécessite une élévation ✓ - Forum Windows
2 réponses
Bonjour,
Merci pour ta réponse, depuis hier on m'a aidé et j'en suis arrivé à ce code :
Option Compare Database
Option Explicit
Sub essai()
Dim sql As String, i As Integer, nbre_total_channels As Integer, nbre_channels_vides As Integer, nbre_channels_occupes As Integer
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("t_Card")
Do Until rst.EOF = False
i = rst.Fields("i_Card")
'Compte le nombre total de channels dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_total_channels = DCount("[i_Channel]", "t_Channel", "[i_Card] =" & i)
'Compte le nombre de channels non occupés dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_channels_vides = DCount("[i_Channel]", "t_Channel", "IsNull([i_Signal_input])")
'Calcule le nombre de channels occupés dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_channels_occupes = nbre_total_channels - nbre_channels_vides
'Pour chaque valeur de i_Card de la table t_Card, le champ Total_Channels prend la valeur de la variable nbre_channels_occupes
If rst.Fields("i_Card") Then
rst.Fields("Total_Channels") = nbre_channels_occupes
End If
rst.MoveNext
Loop
End Sub
Seulement, il n'y a plus de message d'erreur mais rien ne se passe, c'est à dire que la colonne Total_Channels qui est censé est remplie avec la variable nbre_channels_occupes, est vide, je ne comprend pas pourquoi...
Saurais-tu m'aider ?
Merci beaucoup d'avance !
Merci pour ta réponse, depuis hier on m'a aidé et j'en suis arrivé à ce code :
Option Compare Database
Option Explicit
Sub essai()
Dim sql As String, i As Integer, nbre_total_channels As Integer, nbre_channels_vides As Integer, nbre_channels_occupes As Integer
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("t_Card")
Do Until rst.EOF = False
i = rst.Fields("i_Card")
'Compte le nombre total de channels dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_total_channels = DCount("[i_Channel]", "t_Channel", "[i_Card] =" & i)
'Compte le nombre de channels non occupés dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_channels_vides = DCount("[i_Channel]", "t_Channel", "IsNull([i_Signal_input])")
'Calcule le nombre de channels occupés dans la table t_Channel pour t_card.i_card=t_channel.i_card
nbre_channels_occupes = nbre_total_channels - nbre_channels_vides
'Pour chaque valeur de i_Card de la table t_Card, le champ Total_Channels prend la valeur de la variable nbre_channels_occupes
If rst.Fields("i_Card") Then
rst.Fields("Total_Channels") = nbre_channels_occupes
End If
rst.MoveNext
Loop
End Sub
Seulement, il n'y a plus de message d'erreur mais rien ne se passe, c'est à dire que la colonne Total_Channels qui est censé est remplie avec la variable nbre_channels_occupes, est vide, je ne comprend pas pourquoi...
Saurais-tu m'aider ?
Merci beaucoup d'avance !
Oui, cela sert à enregistrer les modifications effectuées, mais cela ne fait pas ces dites modifications,
Il faudrait quelque chose du style :
Seulement, ce qu'il y a en italique je n'arrive pas à le traduire en VBA, j'ai essayé en faisant ça :
Et cela me met ce message d'erreur (pareil en remplaçant Edit par AddNew) :
Au niveau du ".Edit"
Aurais-tu une idée ?
Merci !
Il faudrait quelque chose du style :
If rst.Fields("i_Card") Then Ecris la valeur de nbre_channels_occupes dans le champ Total_Channels de la table t_Card pour l'enregistrement correspondant rst.Update End If
Seulement, ce qu'il y a en italique je n'arrive pas à le traduire en VBA, j'ai essayé en faisant ça :
rst.Edit.Fields("Total_Channels") = nbre_channels_vides
Et cela me met ce message d'erreur (pareil en remplaçant Edit par AddNew) :
Erreur de compilation : Fonction ou variable attendue.
Au niveau du ".Edit"
Aurais-tu une idée ?
Merci !
J'ai essayé et je crois que je vais devenir totalement fou ... Voila le message d'erreur que j'obtiens :
Et pourtant, ma table possède exactement ce nom, de même pour la colonne à remplir, la preuve en image :
http://imagik.fr/view-rl/4756
Je ne sais vraiment plus quoi faire, je suis totalement perdu !
Erreur d'execution '3011' : Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet 't_Card.Total_Channels'. Assurez-vous que l'objet existe et que vous avez correctement saisi son nom et son chemin d'accès.
Et pourtant, ma table possède exactement ce nom, de même pour la colonne à remplir, la preuve en image :
http://imagik.fr/view-rl/4756
Je ne sais vraiment plus quoi faire, je suis totalement perdu !