A voir également:
- Affecter une valeur en fonction d'un champ d'une table
- Table ascii - Guide
- Fonction si et - Guide
- Table des matières word - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Excel : Remplir une cellule en fonction d'une autre ✓ - Forum Excel
6 réponses
EDIT-1 : Je cherche énormément pour essayer d'améliorer ce code, j'ai changé le For Each (après avoir initialiser la variable Card en tant qu'objet), voilà ce que j'ai mis maintenant :
Dim Card As Object
For Each Card In CurrentDb().TableDefs("t_Card")
Et j'ai un nouveau message que voici :
Opération non autorisée pour ce type d'objet.
Dim Card As Object
For Each Card In CurrentDb().TableDefs("t_Card")
Et j'ai un nouveau message que voici :
Opération non autorisée pour ce type d'objet.
Bonjour ludobalu,
Une bonne pratique en Visual Basic est de mettre "Option Explicit" en haut de chaque feuille ou module, de cette façon, tes variables doivent toujours être déclarée, et pour ne rien gâcher, on sait ce que l'on met dedans !!
Travailles-tu avec SQL ou MySQL ?
Tu peux m'expliquer
- "DCount("[i_Channel]", "t_Channel", "[i_Card] ='& i&'")" et
- "DCount("[i_Channel]", "t_Channel", "IsNull([i_Signal_input])")"
Je veux dire, tu ne peux pas faire ta sélection en concaténant les deux, style :
Je veux que tu me compte le nombre d'occurence correspondant à "i_Card".i dont le champ "machin" n'est pas vide ?
Une bonne pratique en Visual Basic est de mettre "Option Explicit" en haut de chaque feuille ou module, de cette façon, tes variables doivent toujours être déclarée, et pour ne rien gâcher, on sait ce que l'on met dedans !!
Travailles-tu avec SQL ou MySQL ?
Tu peux m'expliquer
- "DCount("[i_Channel]", "t_Channel", "[i_Card] ='& i&'")" et
- "DCount("[i_Channel]", "t_Channel", "IsNull([i_Signal_input])")"
Je veux dire, tu ne peux pas faire ta sélection en concaténant les deux, style :
Je veux que tu me compte le nombre d'occurence correspondant à "i_Card".i dont le champ "machin" n'est pas vide ?
Bonjour,
Tout d'abord merci pour ta réponse, oui "Option Explicit" est une bonne habitude à prendre que je n'ai pas encore assimilée désolé.
Je travaille avec SQL.
Non, j'ai cherché mais je n'ai pas trouvé de fonction tel que IsEmpty ou IsNull qui correspondrait à "n'est pas vide" ou "n'est pas nul".
Tout d'abord merci pour ta réponse, oui "Option Explicit" est une bonne habitude à prendre que je n'ai pas encore assimilée désolé.
Je travaille avec SQL.
Non, j'ai cherché mais je n'ai pas trouvé de fonction tel que IsEmpty ou IsNull qui correspondrait à "n'est pas vide" ou "n'est pas nul".
EDIT-2 :
En cherchant encore, j'ai réussi à arriver à ce résultat en essayant de comprendre comment fonctionne le VB sous Access :
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.i_Card = i Then
t_Card.Total_Channels = nbre_channels_occupes
End If
Next Card
End Sub
Maintenant l'erreur se situe au niveau du If à la fin du code, il me disent que les données sont introuvables pour le "t_Card.i_Card", sauriez vous comment indiquer en VBA que je souhaite que le champ "i_Card" de ma table "t_Card" soit égal à ma variable i ? Merci.
En cherchant encore, j'ai réussi à arriver à ce résultat en essayant de comprendre comment fonctionne le VB sous Access :
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.i_Card = i Then
t_Card.Total_Channels = nbre_channels_occupes
End If
Next Card
End Sub
Maintenant l'erreur se situe au niveau du If à la fin du code, il me disent que les données sont introuvables pour le "t_Card.i_Card", sauriez vous comment indiquer en VBA que je souhaite que le champ "i_Card" de ma table "t_Card" soit égal à ma variable i ? Merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Edit-4 :
Voici où j'en suis arrivé, je crois que j'ai réussi à situer comment indiquer les tables et les champs, voici mon code :
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 !
Voici où j'en suis arrivé, je crois que j'ai réussi à situer comment indiquer les tables et les champs, voici mon code :
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 !
Bonjour ludobalu,
Je vois que tu travaille avec "DAO" qui, je crois, n'est plus supporté.
Le but est de faire avancer le smilblick, je vais essayer de comprendre car je ne suis pas très doué en ce qui concerne DAO et Cie
Donc:
- Card As Object --> Card est un Object
- t_Card As DAO.TableDef --> une définition de table ?
. Pourquoi t_Card, qui est une table, devrait recevoir les propriétés d'une table ?
Je vois que tu travaille avec "DAO" qui, je crois, n'est plus supporté.
Le but est de faire avancer le smilblick, je vais essayer de comprendre car je ne suis pas très doué en ce qui concerne DAO et Cie
Donc:
- Card As Object --> Card est un Object
- t_Card As DAO.TableDef --> une définition de table ?
. Pourquoi t_Card, qui est une table, devrait recevoir les propriétés d'une table ?