Bonjour,
J'ai un problème particulièrement agaçant avec access. Quand j'essaie de vider une table(temp_seance) aux travers de code vba avec
CurrentDb.Execute "DELETE * FROM [temp_seance];" , il m'affiche l'erreur suivante :
"Erreur d'exécution '3008' : la table 'temp_seance' est déjà ouverte en mode exclusif par un autre utilisateur, ou elle est déjà ouverte par l'interface utilisateur et ne peut pas être manipulée par programmation".Je vous mets le code du formulaire(principal) et aussi le code du formulaire(seance_fin) qui ouvre "principal".
Si vous pouviez me dire pourquoi ça bug

ou comment faire pour que ça fonctionne, merci.



Principal :Private Sub fonct_assoc_AfterUpdate() Call update
End SubPrivate Sub fonct_ext_AfterUpdate() Call update
End SubPrivate Sub update() If fonct_assoc.Value = 6
Then ' Verifie si on affiche tous les associations If fonct_ext.Value = 6
Then ' Verifie si on affiche tous les extensions Forms![principal]![rq_finalbis subform].Form.RecordSource = "SELECT membre.nom_membre, membre.prenom, membre.prevenu, membre.id_membre FROM fonction_assoc INNER JOIN membre ON fonction_assoc.id_fonction_assoc=membre.ID_fonction_assoc GROUP BY membre.nom_membre, membre.prenom, membre.prevenu, membre.id_membre;"
'affiche tout Else 'Si les fonctions exterieurs ne sont pas affichés Forms![principal]![rq_finalbis subform].Form.RecordSource = "SELECT membre.nom_membre, membre.prenom, membre.prevenu, fonction_ext.id_fonction_ext FROM fonction_ext INNER JOIN (fonction_assoc INNER JOIN membre ON fonction_assoc.id_fonction_assoc = membre.ID_fonction_assoc) ON fonction_ext.id_fonction_ext = membre.ID_fonction_ext WHERE (((fonction_ext.id_fonction_ext)=[Forms]![principal]![fonct_ext]));"
'affiche en fonction de fonct_ext End If Else ' pas assoc If fonct_ext.Value = 6 Then
' ext tous Forms![principal]![rq_finalbis subform].Form.RecordSource = "SELECT membre.nom_membre, membre.prenom, membre.prevenu, fonction_assoc.id_fonction_assoc FROM fonction_ext INNER JOIN (fonction_assoc INNER JOIN membre ON fonction_assoc.id_fonction_assoc = membre.ID_fonction_assoc) ON fonction_ext.id_fonction_ext = membre.ID_fonction_ext WHERE (((fonction_assoc.id_fonction_assoc)=[Forms]![principal]![fonct_assoc]));"
'affiche en fonction de fonct_assoc Else ' ext pas tous Forms![principal]![rq_finalbis subform].Form.RecordSource = "SELECT membre.nom_membre, membre.prenom, membre.prevenu, fonction_assoc.id_fonction_assoc, fonction_ext.id_fonction_ext FROM fonction_ext INNER JOIN (fonction_assoc INNER JOIN membre ON fonction_assoc.id_fonction_assoc = membre.ID_fonction_assoc) ON fonction_ext.id_fonction_ext = membre.ID_fonction_ext WHERE (((fonction_assoc.id_fonction_assoc)=[Forms]![principal]![fonct_assoc]) AND ((fonction_ext.id_fonction_ext)=[Forms]![principal]![fonct_ext]));"
'affiche en fonction des 2, séparéments End If End If DoCmd.RunMacro "actualiser"
End SubPrivate Sub fonct_assoc_Click() inviter.Value = False
DoCmd.RunMacro "actualiser"
End SubPrivate Sub fonct_ext_Click() inviter.Value = False
DoCmd.RunMacro "actualiser"
End SubPrivate Sub Form_Load() inviter = False
DoCmd.RunMacro "raz_prevenu"
fonct_ext.Value = 6
fonct_assoc.Value = 6
DoCmd.Close acTable, "temp_seance" 'et la pourtant je demande la fermeture de la table "temp_seance" CurrentDb.Execute "DELETE * FROM [temp_seance];" 'access situe l'erreur à ce niveauEnd SubPrivate Sub inviter_Click() DoCmd.SetWarnings False
If inviter.Value = True Then
If fonct_ext.Value = 6 Then
If fonct_assoc.Value = 6 Then
DoCmd.OpenQuery "mas_tous_v"
Else DoCmd.OpenQuery "mas_tous_ext_v"
End If Else If fonct_assoc.Value = 6 Then
DoCmd.OpenQuery "mas_tous_assoc_v"
Else DoCmd.OpenQuery "mas_invit_v"
End If End If DoCmd.RunMacro "actualiser"
End If If inviter.Value = False Then
If fonct_ext.Value = 6 Then
If fonct_assoc.Value = 6 Then
DoCmd.OpenQuery "mas_tous_f"
Else DoCmd.OpenQuery "mas_tous_ext_f"
End If Else If fonct_assoc.Value = 6 Then
DoCmd.OpenQuery "mas_tous_assoc_f"
Else DoCmd.OpenQuery "mas_invit_f"
End If End If DoCmd.RunMacro "actualiser"
End IfEnd SubSeance_fin:Option Compare Database
Private Sub confirm_AfterUpdate() If confirm.Value = False Then
envoyer.Enabled = False
Else envoyer.Enabled = True
End IfEnd SubPrivate Sub envoyer_Click() 'Créations des objets utiles Dim varOpen
As String Dim varOpen2
As String Dim varOpen3
As String Dim objMail
As Object
Dim MaBase
As New ADODB.Recordset 'Création de l'objet permettant une interaction avec la BDD ouverte Set objMail = CreateObject("CDO.Message")
'Création de l'objet permettant de manipuler l'envoi d'email Dim result
As VbMsgBoxResult
Dim result2
As Variant
Dim corpsMail
As Variant
Dim result3
As Variantdepart: corpsMail = "Madame, Monsieur, Voici les informations utiles à notre prochaine rencontre."
result3 = MsgBox("Voulez-vous laissez le corps du message par défaut ?" & vbNewLine & vbNewLine & "Le message par défaut est:" & vbNewLine & vbNewLine & """" & corpsMail & """", vbYesNo, "Envoi d'E-Mail")
Select Case result3
Case vbYes
GoTo suite0:
End Select corpsMail = InputBox("Ecrivez le message voulu", "Envoi d'E-Mail")
suite0: MaBase.Open "Rsrtd", CurrentProject.Connection '
Connexion avec une requête de la BDD MaBase.MoveFirst
'Déplace le curseur sur la première ligne de la requête result2 = InputBox("Sélectionner le nombre de pièce jointe" & vbNewLine & "(Maximum 3;Minimum 0)")
'Boite de dialogue demandant le nombre de fichiers joints avec ses différents sorties If result2 = 0
Then GoTo suite:
If result2 = 2
Then GoTo deux:
If result2 = 3
Then GoTo trois:
If result2 > 3
Then GoTo Erreur:
If result2 < 0
Then GoTo Erreur:
suite1: varOpen = OpenIt()
'Définition de l'objet en tant que fonction objMail.AddAttachment varOpen
'Définit le fichier sélectionné comme fichier jointsuite: If varOpen = ""
Then varOpen = "(Aucun fichier joint)"
result = MsgBox(varOpen & vbNewLine & varOpen2 & vbNewLine & varOpen3, vbYesNo, "Envoyer Emails avec ce(s) fichier(s) joint(s) ?")
Select Case result
Case vbNo
GoTo fin:
End Select While Not MaBase.EOF '
Début de la boucle vérifiant toutes les lignes de la requête jusaqu'à la dernière ligne (End Of File) objMail.To = MaBase("email")
'Définition des différentes variables utile à l'envoi mail (A, Objet...) objMail.From = "Administrateur"
objMail.Subject = "Informations AVFPI"
objMail.TextBody = corpsMail
objMail.Send
'Envoie les Mails MaBase.MoveNext
'Passe à la ligne suivante de la requête Wend MaBase.Close
'Après utilisation, fermeture de la connexion avec la BDD Set objMail = Nothing
'Vidage de l'objet de la mémoire Set MaBase = Nothing
'Vidage de la BDD de la mémoire MsgBox ("Messages envoyés avec succès")
GoTo fin:
deux: varOpen2 = OpenIt2()
'Définit une autre variable pour chaque fichier joint objMail.AddAttachment varOpen2
GoTo suite1:
trois: varOpen2 = OpenIt2()
objMail.AddAttachment varOpen2
varOpen3 = OpenIt3()
objMail.AddAttachment varOpen3
GoTo suite1:
Erreur:blabla = MsgBox("Vous n'avez pas spécifié un nombre de fichier joint supporté par le programme" & vbNewLine & vbNewLine & "OU vous avez interrompu le programme en cours.", vbCritical, "Erreur")
GoTo fin:
'config:
'Ces différentes propriété de l'objet objMail permettent d'utiliser la librairie CDO hors d'un serveur Exchange
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "Adresse SMTP"
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Identifiant"
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Password"
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = Port smtp
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True Passer ou non par une connection SSL
'objMail.Configuration.Fields.Updatefin: DoCmd.SetWarnings (off)
DoCmd.Close acQuery, "update_seance", acSaveNo
DoCmd.Close acTable, "temp_seance", acSaveNo 'et la pourtant je demande la fermeture de la table "temp_seance" DoCmd.Close acForm, "seance_fin"
DoCmd.OpenForm "principal"
End SubPrivate Sub Form_Load() confirm.Value = False
envoyer.Enabled = False
End SubPrivate Sub Commande7_Click() DoCmd.Close
DoCmd.OpenForm "t_ajout_seance1"
End SubPrivate Sub confirm_Click() If confirm.Value = False
Then envoyer.Enabled = False
Else envoyer.Enabled = True
End IfEnd SubMerci d'avance.
Muramasa
L'esprit n'a comme limite que celle que nous lui fixons.
Le bonheur est tel le papillon, on croit l'attraper... il s'envole...
