[VBA] Opération non autorisée pour ce type d'objet.
Résolu/Fermé
ludobalu
Messages postés
276
Date d'inscription
dimanche 18 mai 2008
Statut
Membre
Dernière intervention
13 février 2015
-
29 oct. 2012 à 16:20
ludobalu Messages postés 276 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 13 février 2015 - 5 nov. 2012 à 09:51
ludobalu Messages postés 276 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 13 février 2015 - 5 nov. 2012 à 09:51
A voir également:
- [VBA] Opération non autorisée pour ce type d'objet.
- Vente objet occasion entre particulier - Guide
- Vba dernière colonne non vide ✓ - Forum VB / VBA
- Télécharger opera mini pour pc - Télécharger - Navigateurs
- Carte sim non autorisée samsung - Forum Samsung
- Vba range avec variable ✓ - Forum VB / VBA
2 réponses
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
29 oct. 2012 à 21:03
29 oct. 2012 à 21:03
Card représente un Objet, lequel ?
ludobalu
Messages postés
276
Date d'inscription
dimanche 18 mai 2008
Statut
Membre
Dernière intervention
13 février 2015
6
30 oct. 2012 à 09:35
30 oct. 2012 à 09:35
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 !
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
30 oct. 2012 à 13:09
30 oct. 2012 à 13:09
Salut,
C'est dans un recordset que tu écrit !
Si tu veux faire une mise à jour d'enregistrements, ce n'est pas un UPDATE qu'il faut utiliser ?
C'est dans un recordset que tu écrit !
If rst.Fields("i_Card") Then rst.Fields("Total_Channels") = nbre_channels_occupes End If
Si tu veux faire une mise à jour d'enregistrements, ce n'est pas un UPDATE qu'il faut utiliser ?
ludobalu
Messages postés
276
Date d'inscription
dimanche 18 mai 2008
Statut
Membre
Dernière intervention
13 février 2015
6
30 oct. 2012 à 13:24
30 oct. 2012 à 13:24
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 !
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
Modifié par Heliotte le 30/10/2012 à 13:34
Modifié par Heliotte le 30/10/2012 à 13:34
Je pense plutôt utiliser INSERT INTO Si tu veux ajouter un enregistrement
Dans le cas où tu veux modifier (mettre à jour) un enregistrement, c'est UPDATE qu'il te faudra écrire
A tester !
CurrentDb.Execute "INSERT INTO [NomDeLaTable.Total_Channels] VALUES (nbre_channels_vides);"
Dans le cas où tu veux modifier (mettre à jour) un enregistrement, c'est UPDATE qu'il te faudra écrire
A tester !
ludobalu
Messages postés
276
Date d'inscription
dimanche 18 mai 2008
Statut
Membre
Dernière intervention
13 février 2015
6
30 oct. 2012 à 13:49
30 oct. 2012 à 13:49
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 !
Heliotte
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
92
Modifié par Heliotte le 30/10/2012 à 14:07
Modifié par Heliotte le 30/10/2012 à 14:07
travailles-tu avec ACCESS, car si c'est le cas, par prudence met des crochets aux noms de tableaux et aux noms de champs. ex : '[t_Card].[Total_Channels]'
La base de données est toujours accessible ? ouverte ?
Montre-moi la ligne que tu as écrite, stp
Réessaye
La base de données est toujours accessible ? ouverte ?
Montre-moi la ligne que tu as écrite, stp
Réessaye