EXÉCUTION DES QUESTIONS SQL dans VBA. Effectuez une demande d'accès via Excel Query dans VBA. Sélectionnez Demande à la base de données sur VBA

Accès Enregistré une requête conçue à l'aide d'un designer de requête appelé "MyQuery". La base de données est connectée au système via la connexion ODBC. Macros toutes incluses.

Exceller a une connexion Adodb pour se connecter à la base de données via

Dim con sous forme addb.Connection Dim Rs comme adodb.recordset Set Con \u003d Nouvelle Adodb.Connection avec con .Provider \u003d "Microsoft.ace.Oledb.12.0" .Open "MyDatabase.accdb" fin avec

Généralement, vous allez de l'avant et écrivez simplement votre SQL, ce qui est complètement normal, puis faites quelque chose comme

SQLQUERY DIM SQLQUERY AS STROND SQLQUERY \u003d "SELECT * DE MYTABLE" SET RS \u003d NOUVEAU ADODB.RECORDSET RS.OPEN SQLQUERY, CON, ...

Mais je veux accéder à la demande que j'ai enregistrée dans la base de données d'accès. Ainsi, comme je peux appeler la requête enregistrée dans la base de données, que je viens de connecter.

Déjà essayé

  1. con.Execute ("EXEC MYQUERY") Mais il m'a dit que cela ne pouvait pas être trouvé myquery.
  2. rs.open "myquery", con Mais celui-ci est invalide et veut des déclarations sélectionnées / etc.
vBA Excel-VBA MS-Access-2007 Adodb Excel

5 réponses


6

Je pense que vous pouvez le considérer comme une procédure stockée.

Si nous commençons directement avant Dim SqlQuery en tant que chaîne

Dim CMD comme neuf adodb.command cmd.commandtype \u003d adcmdstortorTreDProc cmd.commandtext \u003d "myQuery" cmd.activeconnection \u003d Contoire rs \u003d cmd.execute ()

Ensuite, prenez votre appareil de configuration de travail après cela.


1

Tu étais presque là:

Dim CON as ADODB.Connection Dim Rs sous forme ADODB.Recordset Set Con \u003d Nouvelle Adodb.Connection avec Con .Provider \u003d "Microsoft.ace.Oledb.12.0" .Open "Z: \\ Docs \\ myDatabase.acc "Myquery"

Juste quitter l'exquire de côté.

Vous pouvez également ajouter des paramètres, il est un peu dépassé, mais devrait aider:


0

C'est une sorte de hackeur, mais vous pouvez demander une demande. C'est-à-dire, remplacez la chaîne SQL sur ce qui suit:

Sqlquerery \u003d "Select * de QueryName;"

Avant de commencer ce programme, vous devez vous assurer que la base de données d'accès a été enregistrée par IE. Appuyez sur Ctrl + S (pas assez pour que la demande soit lancée dans Access).


0

J'ai pu démarrer une demande de mise à jour, qui a déjà été enregistrée dans l'accès à l'aide de:

Connexion.execute "my_update_query_already_saved_in_access", Adexecutenorecords, ADCMDSToreToredProc

Il m'a donné des erreurs jusqu'à ce que je remplace les lacunes du nom de la requête soulignée à la fois dans la base de données d'accès et les instructions d'exécution.


0

Il a passé beaucoup de temps car ce fil a été créé. Si je comprends tout correctement, je peux ajouter quelque chose d'utile. J'ai donné le nom de ce qui décrit OP, c'est-à-dire le processus d'utilisation SQL d'une demande enregistrée dans AccdB à exécuter dans VBA via DAO ou Adobd. Je lui ai donné le nom "Propriétés de l'objet", même avec l'abréviation OPP dans mes notes et pour le nom de l'objet préfixe / suffixe.

L'idée est que l'objet existant dans la FCDB (généralement demande) fournit une propriété (généralement SQL), qui doit être utilisée dans VBA. J'ai rassemblé une fonction uniquement pour sucer SQL des demandes pour cela; voir ci-dessous. AVERTISSEMENT: Désolé, mais tout est à Dao, je n'utilise pas vraiment Adodb. J'espère que vous trouverez toujours ces idées utiles.

Je suis même sorti jusqu'à présent que j'ai développé une méthode d'utilisation / d'insertion de paramètres remplaçables dans SQL, qui provient de ces demandes de l'OPP. Ensuite, j'utilise vba.replace () pour effectuer un remplacement avant d'utiliser SQL dans VBA.

Le chemin de l'objet DAO à la requête SQL dans le FCDB est le suivant:

Mysqlstatement \u003d AccessDB.Querydefs ("MyQueryName"). SQL

J'utilise des paramètres remplaçables, évaluant ce qui devrait être remplacé et choisir un nom inhabituel pour un paramaiteur qui ne peut pas exister dans une base de données réelle. Pour la plupart, les seuls remplaçants que j'ai faits sont les noms des champs ou des tables ou des expressions de l'endroit où et d'avoir des offres. Par conséquent, je les appelle avec des choses telles que "(Remplace00000001)", puis en utilisant la fonction Remplacer () pour effectuer ce travail ...

Sqltext \u003d vba.replace (sqltext, "(Remplacement00000001)", "Someactualparameter") ...

puis utilisez sqltext dans VBA. Voici un exemple de travail:

Fonction publique mysqling () Dim Sqltext sous forme de chaîne Dim MyParamater As String Dim MyExpression en tant que chaîne "Définissez tout. SQLTEXT \u003d getqltextfromQuery (" MyQuery ") MyParameter \u003d" MyExpression \u003d "Somedatorsomething12 / 31/2017" "Faire le remplacement . sqltext \u003d vba.replace (sqltext, myParameter, myExpression) "Utilisez ensuite le SQL. db.execute sqltext, dbfailonerror end fonction fonction getqltextfromQuery (byval oppname comme chaîne) Comme accédez.Application DA DAO.DATABASE DIM QDEFS Comme Dao.Querydefs Dim Qdef as Dao.Querydef Dao.Querydef Dao.Querydef Dao.Querydef Dim Sqltext AS String Set App \u003d Access.Application Set DB \u003d APP.CURENTDB SET QDEFS \u003d DB.QUERYDEFS SET QDEF \u003d QDEFS (OPPNAME) OPPGETSQLTEXT \u003d qdef.SQL Fonction finale


Exécuter dans Access Maketable de Excel

J'ai un fichier Excel que j'ai besoin d'automatiser. Lorsque l'utilisateur ouvre un rapport Excel, il sera invité à mettre à jour les données. S'ils disent oui, je dois lancer la demande ...


Exécutez la fonction VBA via la demande de vue dans MS Access 2013 de JS ActiveX Ado

Comment exécuter la macro VBA à travers la demande de vue dans MS Access 2013 de JS ActiveX Ado? La fonction VBA est conçue pour obtenir l'utilisateur actuel connecté avec: Declare publique ...


Exécutez la requête sauvegardée contenant "fonction" dans Access DB de Excel

J'essaie de démarrer une requête stockée dans la base de données d'accès d'Excel VBA. La demande fonctionne bien si j'oublie et l'exécute dans la base de données d'accès, mais appelez l'erreur lorsqu'elle commence à partir du module ...


MS Access-gérer une demande enregistrée nommée dans VBA

Comment exécuter une requête enregistrée dans MS Access 2007 dans VBA? Je ne veux pas copier et insérer SQL dans VBA. Je préfère simplement effectuer le nom de la demande. Ça ne marchera pas ... VBA ne peut pas trouver une demande ....


Comment exécuter une requête dans MS-Access dans le code VBA?

Comment puis-je interroger pour renvoyer des enregistrements dans la base de données MS-Access à l'aide du code VBA?


Exécutez une demande d'accès Excel et transmettez-lui des paramètres

Comment exécuter une requête dans MS Access DB de Excel VBA ou Macro. La demande MS-Access accepte certains des paramètres à transférer de Excel. Merci


Excel Gestion du livre de l'accès 2010 VBA

J'ai une situation très similaire au message suivant: Demande d'accès à Excel 2010 pour créer un graphique via VBA dans mon cas, j'exporte une table, mais je veux faire beaucoup plus pour le fichier ...


Exécutez la demande de réussite SQL Server de l'accès VBA

J'ai une demande de mise à jour sur demande, enregistrée dans Access 2007. Lorsque je clique sur la demande de réussite, elle fonctionne avec succès. Comment puis-je obtenir cette requête pour exécuter de VBA? Je voudrais...


Importez une énorme définition de données dans l'accès de Excel via VBA

J'ai un énorme ensemble de données que je dois importer d'Excel dans l'accès (~ 800k Strings). Cependant, je peux ignorer les chaînes avec une certaine valeur de la colonne, ce qui représente 90% ...


Toute requête MDX dans Excel VBA?

existe-t-il un moyen d'exécuter la demande MDX dans Excel VBA? Je pensais que cela pourrait être fait à travers ADO, ainsi que dans le cas de SQL (oui, je sais que SQL est différent de MDX - un problème à plusieurs reprises ...

L'accès a enregistré la demande qui a été développée à l'aide du constructeur de requêtes MyQuery. La base de données est connectée au système via la connexion ODBC. Les macros sont toutes incluses.

Excel a installé la connexion Adodb pour se connecter à la base de données via

Dim con sous forme addb.Connection Dim Rs comme adodb.recordset Set Con \u003d Nouvelle Adodb.Connection avec con .Provider \u003d "Microsoft.ace.Oledb.12.0" .Open "MyDatabase.accdb" fin avec

Habituellement, vous écrivez simplement votre SQL, qui fonctionne parfaitement, puis faites quelque chose comme

SQLQUERY DIM SQLQUERY AS STROND SQLQUERY \u003d "SELECT * DE MYTABLE" SET RS \u003d NOUVEAU ADODB.RECORDSET RS.OPEN SQLQUERY, CON, ...

Mais je veux accéder à la demande que j'ai enregistrée dans la base de données d'accès. Donc, comment appeler une requête enregistrée dans la base de données que je viens de connecter.

J'ai déjà essayé

  1. con.Execute ("EXEC MYQUERY"), mais il m'a dit qu'il ne pouvait pas trouver MyQuery.
  2. rs. Option "MyQuery", mais ce n'est pas valide et nécessite des opérateurs Select / etc

5 réponses

Je pense que vous pouvez le considérer comme une procédure stockée.

Si nous commençons directement avant Dim SqlQuery en tant que chaîne

Dim CMD comme neuf adodb.command cmd.commandtype \u003d adcmdstortorTreDProc cmd.commandtext \u003d "myQuery" cmd.activeconnection \u003d Contoire rs \u003d cmd.execute ()

Ensuite, prenez votre travail avec un ensemble d'enregistrements après cela.

Tu étais presque là

Dim CON as ADODB.Connection Dim Rs sous forme ADODB.Recordset Set Con \u003d Nouvelle Adodb.Connection avec Con .Provider \u003d "Microsoft.ace.Oledb.12.0" .Open "Z: \\ Docs \\ myDatabase.acc "Myquery"

Il suffit de quitter EXEC.

Vous pouvez également ajouter des paramètres, il est un peu dépassé, mais devrait aider: mettre à jour 2 champs dans la base de données d'accès des données Excel et, éventuellement, macro

J'ai réussi à exécuter une demande de mise à jour déjà enregistrée pour accéder à l'aide de:

Connexion.execute "my_update_query_already_saved_in_access", Adexecutenorecords, ADCMDSToreToredProc

Cela m'a donné des erreurs jusqu'à ce que je remplace les lacunes dans le nom de la requête souligne à la fois dans la base de données d'accès et dans la déclaration Exécuter.

Ceci est une sorte de travail informatique, mais vous pouvez demander une demande. C'est-à-dire remplacer la chaîne SQL comme suit:

Sqlquerery \u003d "Select * de QueryName;"

Avant de commencer, vous devez vous assurer que la base de données d'accès a été enregistrée, c'est-à-dire Appuyez sur CTRL + S (pas assez pour que la demande soit exécutée dans l'accès).

Pendant longtemps depuis la création de ce sujet. Si je comprends bien, je pourrais ajouter quelque chose d'utile. J'ai donné le nom de ce qui décrit OP: Ceci est le processus d'utilisation de SQL à partir d'une requête enregistrée dans AccdB pour exécuter VBA via DAO ou Adobd. Je l'ai appelé "Propriétés du fournisseur de l'objet", même avec l'APRONIEM OPP dans mes notes et pour le préfixe / suffixe du nom d'objet.

L'idée est que l'objet existant dans la FCDB (généralement demande) fournit une propriété (généralement SQL), qui doit être utilisée dans VBA. J'ai rassemblé une fonction, juste pour sucer SQL des demandes pour cela; Voir ci-dessous. AVERTISSEMENT: Désolé, mais tout est à Dao, je n'utilise pas vraiment Adodb. J'espère que vous trouverez toujours des idées utiles.

Je suis même allé jusqu'à présent que j'ai développé une méthode d'utilisation / d'insertion de paramètres remplaçables dans SQL, qui provient de ces demandes d'OPP. Ensuite, j'utilise vba.replace () à remplacer avant d'utiliser SQL dans VBA.

Le chemin de l'objet DAO à la requête SQL dans le FCDB est le suivant:

Mysqlstatement \u003d AccessDB.Querydefs ("MyQueryName"). SQL

J'utilise des paramètres remplaçables, évaluant ce qui doit être remplacé et choisir un nom inhabituel pour un paramètre qui ne peut pas exister dans une base de données réelle. Pour la plupart, les seuls remplaçants que j'ai réalisés sont des noms de champs ou des tables ou des expressions d'où et d'avoir des offres. Par conséquent, je les appelle comme "(Remplacement00000001)", puis utilisez la fonction Remplacer () pour effectuer le travail ...

Sqltext \u003d vba.replace (sqltext, "(Remplacement00000001)", "Someactualparameter")

Puis utilisez sqltext dans VBA. Voici un exemple de travail:

Fonction publique mysqling () Dim Sqltext sous forme de chaîne Dim MyParamater As String Dim MyExpression en tant que chaîne "Définissez tout. SQLTEXT \u003d getqltextfromQuery (" MyQuery ") MyParameter \u003d" MyExpression \u003d "Somedatorsomething12 / 31/2017" "Faire le remplacement . sqltext \u003d vba.replace (sqltext, myParameter, myExpression) "Utilisez ensuite le SQL. db.execute sqltext, dbfailonerror end fonction fonction getqltextfromQuery (byval oppname comme chaîne) Comme accédez.Application DA DAO.DATABASE DIM QDEFS Comme Dao.Querydefs Dim Qdef as Dao.Querydef Dao.Querydef Dao.Querydef Dao.Querydef Dim Sqltext AS String Set App \u003d Access.Application Set DB \u003d APP.CURENTDB SET QDEFS \u003d DB.QUERYDEFS SET QDEF \u003d QDEFS (OPPNAME) OPPGETSQLTEXT \u003d qdef.SQL Fonction finale

Cette leçon est dédiée Demandes SQL à la base de données sur VBA Access.. Nous examinerons la manière dont l'insertion, la mise à jour, les demandes de suppression de la base de données et apprendrons comment obtenir une valeur spécifique de la requête SELECT.

Ceux qui programment VBA Access. et travailler avec une base de données SQL Server, rencontrez très souvent une tâche aussi simple et nécessaire comme envoi d'une demande de base de données SQL, que ce soit dans l'insertion, la mise à jour ou simple. Sélectionnez la requête SQL . Et puisque nous commencer les programmeurs, nous devons également être en mesure de le faire, alors aujourd'hui, nous allons traiter cette question.

Nous avons déjà affecté le sujet de l'obtention de données à partir du serveur SQL, où le code a été effectué sur VBA pour obtenir ces données, par exemple, dans l'article de Téléchargement de données sur le fichier texte de MSSQL 2008 Ou aussi un peu affecté dans le matériau Déchargement des données de l'accès dans le modèle Word et Excel Mais de toute façon, il nous avons examiné superficiellement, et aujourd'hui je vous propose de parler un peu plus de détail.

Noter! Tous les exemples ci-dessous sont considérés comme utilisant projet ADP Access 2003 et la base de données MSSQL 2008. Si vous ne savez pas que ce soit du tout un tel projet ADP, nous étions considérés comme dans le matériau Comment créer et configurer l'accès du projet ADP

Données source pour exemples

Supposons que nous ayons une table TEST_TABLE qui contiendra les numéros et les noms des mois de l'année (les requêtes sont effectuées à l'aide Studio de gestion.)

Créer une table. (Not Null, (50) NULL) ON GO

Comme je l'ai dit, nous allons utiliser le projet d'ADP configuré pour fonctionner avec MS SQL 2008, dans lequel j'ai créé une forme de test et a ajouté la touche START avec la signature "Cours"dont nous avons besoin de tester notre code, c'est-à-dire Tout code nous écrirons dans le gestionnaire d'événements " Appuyer sur le bouton».

Insérer, mettre à jour, supprimer des demandes de base de données pour VBA

Pour ne pas tirer à la fois pour commencer immédiatement, disons que nous avons besoin d'ajouter une corde à notre table de test ( code commenté)/

sous start_click privé () "Nous déclarons une variable pour le stockage de la DIM sql_query AS String chaîne de requête" écriture à elle la sql_query \u003d "Insérer dans test_table (ID, Name_Mon) Valeurs (" 6 "" Juin ")" "" « Je l' exécuter Docmd. RunSQL sql_query End Sub

Dans ce cas, la requête est exécutée à l'aide des paramètres de connexion actuels à la base de données. Nous pouvons vérifier si les données sont ajoutées ou non.

Comme vous pouvez le constater, les données ont été insérées.

Afin de supprimer une ligne, nous écrivons ce code.

sous start_click privé () "Nous déclarons une variable pour stocker la chaîne de requête DIM sql_query AS STRING" écrire une demande de suppression sql_query \u003d "Supprimer test_table où id \u003d 6" "" exécuter DoCmd.RunSQL sql_query End Sub

Si nous vérifions, nous verrons que la chaîne souhaitée a été supprimée.

Pour mettre à jour les données, écrivez à la demande de mise à jour de la variable SQL_Query, j'espère que le point est clair.

Sélectionnez Demande à la base de données sur VBA

Il y a une petite chose plus intéressante ici qu'avec le reste de SQL.

Tout d'abord, devons-nous obtenir toutes les données de la table et, par exemple, nous les traiterons et nous retirerons dans le message, et vous pouvez bien sûr les utiliser à d'autres fins, car nous écrivons ce code.

Sous-start privé_click () "Nous déclarons des variables" pour définir des enregistrements de la ligne de base de données Dim RS addb.recordset "DIM SQL_QUERY en tant que ligne à chaîne" Ligne pour afficher les données finales dans le message Dim Str en tant que chaîne "Créer un nouvel objet pour SET RS \u003d NOUVEAU ADODB .RecordSet "sql_query \u003d" requête SELECT ID, name_mon de test_table "" "Vous faites une demande en utilisant les paramètres de connexion de projet en cours RS.Open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic" records rail cycle de (sans être de rs.EOF) "Remplir la variable pour afficher la STR STR \u003d & rS.fields message (" ID ") et "-" et rs.fields (" Name_mon ") & vbNewLine "Allez à l'entrée suivante rs.MoveNext WEND" MSGBOX STR END SUB

Ici nous utilisons déjà vBA Cycles d'accès Afin de trier toutes les valeurs de notre ensemble d'enregistrement.

Mais, il est souvent nécessaire d'obtenir toutes les valeurs de l'ensemble d'enregistrement, mais un seul, par exemple, le nom du mois sur son code. Et pour cela, le cycle est considérablement considérablement, nous pouvons simplement écrire une demande qui ne renvoie qu'une seule valeur et le contactera, par exemple, nous recevrons le nom du mois sur le code 5

Sous-start privé_click () "Nous déclarons des variables" pour définir des enregistrements à partir de la ligne de données Dim RS sous forme ADODB.RECORDSET "DIM SQL_QUERY en tant que ligne de chaîne" Rangez pour émettre la valeur finale de DIM STR en tant que chaîne "Créer un nouvel objet pour SET RS \u003d Nouveau ADODB.RecordSet "sql_query \u003d" SELECT NAME_MON dE TEST_TABLE WHER ID \u003d 5 "" "SELECT NAME_MON dE TEST_TABLE wheer ID \u003d 5" "" Actuellement en utilisant les paramètres actuels pour connecter le projet RS.Open sql_query, CurrentProject.Connection, AdopeEndynamic, adLockOptimistic « Nous obtenons notre valeur str \u003d RS.fields (0) MSGBOX STR End Sub.

Pour la polyvalence, nous avons déjà fait appel de ce nom de la cellule, mais par son index, c'est-à-dire 0, et c'est la première valeur dans Recordset.En fin de compte, nous avons eu une valeur "Mai".

Comme vous pouvez le constater, tout est assez simple. Si vous avez souvent besoin d'obtenir une valeur spécifique de la base de données ( comme dans le dernier exemple), Je recommande d'apporter tout le code dans une fonction distincte ( Comment écrire une fonctionnalité sur VBA Access 2003) Avec un paramètre entrant, par exemple, le code du mois ( si nous considérons notre exemple) Et simplement, où il est nécessaire de produire cette valeur, appelez la fonction dont vous avez besoin avec le paramètre souhaité et tout ce que nous réduisons de manière significative le code VBA et améliorez la perception de notre programme.

Aujourd'hui c'est tout. Bonne chance!

Avec l'aide de macros Section ouverte Dans les bases de données d'accès, vous pouvez ouvrir des demandes pour un échantillon et des demandes de croisement dans le mode Table, dans le concepteur ou en mode de prévisualisation. Cette action lance une demande de changement. Vous pouvez également sélectionner le mode de saisie de données pour la demande.

Noter: Ces macros sont disponibles uniquement dans la base de données d'accès (MDB ou AccdB). Si vous utilisez l'environnement de projet d'accès (ADP), voir Macrocomands Informations d'identification ouvertes, Ouvert montré par Hostupôt et Opprimité. Macrocomanda Section ouverte Non disponible dans Access Web Applications.

Réglage

Macrocomanda Section ouverte Il a les arguments suivants:

Argument macrocomands

La description

Nom de la demande

Le nom de la demande ouverte. Sélectionnez un nom dans la liste déroulante. C'est un argument obligatoire.

Lorsqu'il est exécuté dans la base de données de la bibliothèque macro contenant une macro Section ouverte, Access cherche d'abord une demande avec ce nom dans la base de données de la bibliothèque, puis dans la base de données actuelle.

La vue dans laquelle la demande sera ouverte. Sélectionnez dans le champ Vue valeur Tableau, Constructeur, Aperçu, Sommaire ou alors Tableau sommaire. La valeur par défaut est utilisée Tableau.

Noter: Présentations "Table de synthèse" et "Summer" ne sont pas disponibles dans les versions d'accès, à commencer par Access 2013.

Mode de données

Mode de saisie de données pour demande. Ce paramètre s'applique uniquement aux demandes ouvertes en mode Table. Choisir Ajouter (Les utilisateurs pourront ajouter de nouveaux enregistrements, mais ne changent pas de changement existant), Changer (Les utilisateurs pourront modifier les enregistrements existants, ainsi que d'ajouter de nouveau) ou Seulement pour la lecture (Les utilisateurs peuvent uniquement voir les enregistrements). La valeur par défaut est Changer.

Remarques

Si pour l'argument Vue Fixer la valeur Tableau, Access affiche l'ensemble résultant, si une demande de sélection est utilisée, une demande croisée, une demande de combinaison ou d'une demande au serveur, propriété RetournementsRecords. qui compte Oui. S'il s'agit d'une demande de changement, une demande de définition de données ou une demande de serveur pour une propriété RetournementsRecords. dont la valeur est définie PasLa requête est exécutée.

Macrocomanda Section ouverte Semblable à double-cliquez sur la requête dans la zone de navigation ou cliquez avec le bouton droit de la souris sur la zone de navigation et l'option facultative. Lorsque vous utilisez les commandes de macro, vous pouvez sélectionner des paramètres supplémentaires.

Conseils

    Vous pouvez faire glisser la demande de la zone de navigation dans la fenêtre de la constructeur de macro. Cela créera automatiquement une macro Section ouvertequi ouvre une demande dans le mode Table.

    Si vous passez au constructeur lorsque la requête est ouverte, la valeur de l'argument Mode de données Supprimé. Ce paramètre n'agira pas, même si l'utilisateur retourne au mode Table.

    Si vous ne souhaitez pas afficher les messages système qui apparaissent généralement lors de la réalisation d'une demande de changement (ils disent qu'il s'agit d'une demande de changement et indique le nombre d'entrées auquel elle affecte), vous pouvez les éteindre à l'aide de macros Mettre en sécurité.

Pour effectuer une macro Section ouverte Dans le module Visual Basic pour les applications (VBA), utilisez la méthode Section ouverte Objet Docmd..

Avez-vous aimé l'article? Partager avec des amis: