A voir également:
- Programmation VBA Excel 2007
- Save as pdf office 2007 - Télécharger - Bureautique
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
4 réponses
Bonjour
Tu parles d'appel de ton classeur fermé par ADO -ce qui n'ouvre pas le classeur mai s'y connecte le classeur restant fermé-, alors pourquoi FIND ? il me semble (pas sûr) que FIND travaille sur le classeur ouvert de m^me que la recherche de la dernière ligne...
si tu cherches une valeur dans un champ avec ADO la syntaxe SQL sera du genre
Autre chose: c'est une erreur de coller les photos dans XL( grand ralentissement comme tu l'as constaté): il faut les mettre dans un répertoire et appeler la photo
voilà, mais il faudrait que tu sois plus précis
pour joindre une pièce
mettre les classeurs (l'opérateur et le serveur) sans données confidentielles en pièce jointe (format XL97-2003) sur
https://www.cjoint.com/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
mais ce que tu demandes pourrait se faire tranquilou avec access sans peut-être trop utiliser VBA ....
Tu parles d'appel de ton classeur fermé par ADO -ce qui n'ouvre pas le classeur mai s'y connecte le classeur restant fermé-, alors pourquoi FIND ? il me semble (pas sûr) que FIND travaille sur le classeur ouvert de m^me que la recherche de la dernière ligne...
si tu cherches une valeur dans un champ avec ADO la syntaxe SQL sera du genre
"SELECT lesdifférentschamps FROM latableduclasseur WHERE lechamp=lavaleurcherchée";"
Autre chose: c'est une erreur de coller les photos dans XL( grand ralentissement comme tu l'as constaté): il faut les mettre dans un répertoire et appeler la photo
voilà, mais il faudrait que tu sois plus précis
pour joindre une pièce
mettre les classeurs (l'opérateur et le serveur) sans données confidentielles en pièce jointe (format XL97-2003) sur
https://www.cjoint.com/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
mais ce que tu demandes pourrait se faire tranquilou avec access sans peut-être trop utiliser VBA ....
Bonjour,
Guère de temps cet après midi, je te conseille donc de lire ce tuto
https://silkyroad.developpez.com/VBA/ClasseursFermes/
qui te donnera un aperçu de la technologie ADO et pourra t'aider dans tes questions éventuelles (on peut améliorer les techniques indiquées notamment en se dispensant de cocher les références à ADO)
https://silkyroad.developpez.com/VBA/ClasseursFermes/
concernant les photos, il faudra revoir le systeme car le numéro d'inscription sera donné par le classeur partagé
Tu trouveras ci joint un exemple de gestion de photos (trombinoscope) que j'avais réalisé pour l'association 1901 d'un forumeur CCM qui te fournira peut- ^tre une piste
https://www.cjoint.com/?3InortrO67a
désolé pur cet aprèm!
Guère de temps cet après midi, je te conseille donc de lire ce tuto
https://silkyroad.developpez.com/VBA/ClasseursFermes/
qui te donnera un aperçu de la technologie ADO et pourra t'aider dans tes questions éventuelles (on peut améliorer les techniques indiquées notamment en se dispensant de cocher les références à ADO)
https://silkyroad.developpez.com/VBA/ClasseursFermes/
concernant les photos, il faudra revoir le systeme car le numéro d'inscription sera donné par le classeur partagé
Tu trouveras ci joint un exemple de gestion de photos (trombinoscope) que j'avais réalisé pour l'association 1901 d'un forumeur CCM qui te fournira peut- ^tre une piste
https://www.cjoint.com/?3InortrO67a
désolé pur cet aprèm!
Bonjour Michel,
J'ai adapté le code de silkyroad comme suit :
Sub LireClasseurFerme()
'
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, Texte_SQL As String
Dim Rst As ADODB.Recordset
'Définit le classeur fermé servant de base de données qui contient une feuille avec la première ligne
'comme ligne des champs : Nbr|NumCand|Sexe|Nom|Prenoms|DateNaiss
'La feuille Liste contient les données
Fichier = "e:\ClasseurFermé.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Liste$"
'--- Connexion ---
Set Cn = New ADODB.Connection
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
'..... Définit la requête.
Texte_SQL = "SELECT * FROM [" & NomFeuille & "]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(Texte_SQL)
'Ecrit le résultat de la requête (ici toute la base) dans la cellule A2 de la feuille active du classeur actif
Range("A2").CopyFromRecordset Rst
'
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
'
End Sub
J'ai adapté et çà marche mais j'aimerais spécifier un classeur donné pour le résultat de la requête. Je veux comprendre les différentes commandes
De même, les modules "Ajouter un enregistrement", "Modifier les enregistrements" ne fonctionnent pas dans Excel 2007 sous Vista. En particulier
Merci et bon après midi
yapson2011
J'ai adapté le code de silkyroad comme suit :
Sub LireClasseurFerme()
'
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, Texte_SQL As String
Dim Rst As ADODB.Recordset
'Définit le classeur fermé servant de base de données qui contient une feuille avec la première ligne
'comme ligne des champs : Nbr|NumCand|Sexe|Nom|Prenoms|DateNaiss
'La feuille Liste contient les données
Fichier = "e:\ClasseurFermé.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "Liste$"
'--- Connexion ---
Set Cn = New ADODB.Connection
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
'..... Définit la requête.
Texte_SQL = "SELECT * FROM [" & NomFeuille & "]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(Texte_SQL)
'Ecrit le résultat de la requête (ici toute la base) dans la cellule A2 de la feuille active du classeur actif
Range("A2").CopyFromRecordset Rst
'
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
'
End Sub
J'ai adapté et çà marche mais j'aimerais spécifier un classeur donné pour le résultat de la requête. Je veux comprendre les différentes commandes
De même, les modules "Ajouter un enregistrement", "Modifier les enregistrements" ne fonctionnent pas dans Excel 2007 sous Vista. En particulier
Merci et bon après midi
yapson2011
bonjour
P...! je viens de perdre pour la 2° fois tout le baratin que je t'avais préparé (micro coupures electricité):-((
ci dessous code d'extraction des inscrits sain et sauf
je reviens avec des explications (sur Word que je puisse sauvegarder)
P...! je viens de perdre pour la 2° fois tout le baratin que je t'avais préparé (micro coupures electricité):-((
ci dessous code d'extraction des inscrits sain et sauf
Option Explicit Public Source As Object Const Fichier As String = "e:\ClasseurFermé.xlsx" Const Plage As String = "T_inscrits" Sub Extraire_liste_inscrits() Dim Requete As Object se_connecter '..... Définit la requête. Set Requete = CreateObject("ADODB.Recordset") Set Requete = Source.Execute("SELECT * FROM [" & Plage & "]") 'Ecrit le résultat de la requête (ici toute la base) dans le classeur actif Sheets(1).Range("A2").CopyFromRecordset Requete 'sheets(1) à adapter ' '--- Fermeture connexion --- Requete.Close Source.Close Set Requete = Nothing Set Source = Nothing ' End Sub Sub se_connecter() '--- Connexion --- Set Source = CreateObject("ADODB.Connection") With Source .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;""" .Open End With End Sub
je reviens avec des explications (sur Word que je puisse sauvegarder)
la plage "A1:F1" est nommée "T_inscrits"
la macro est coupée en Z car "se connecter" va être utilisée pour l'ajout et la modification, donc inutile de la recopier N fois...
le fait de déclarer en "object et d'utiliser
set xxx=createobject(".......") évite d'avoir à cocher les références sur chaque poste
ces macros sont à installer dans les classeurs "source" de chaque opérateur
j'attends de tes nouvelles avant de continuer mon pensum
la macro est coupée en Z car "se connecter" va être utilisée pour l'ajout et la modification, donc inutile de la recopier N fois...
le fait de déclarer en "object et d'utiliser
set xxx=createobject(".......") évite d'avoir à cocher les références sur chaque poste
ces macros sont à installer dans les classeurs "source" de chaque opérateur
j'attends de tes nouvelles avant de continuer mon pensum
En réalité, j'enregistre des candidats à l'inscription d'un concours à l'aide d'un classeur partagé d'excel 2007 localisé dans un dossier partagé. La feuille a une ligne d'en- tete (Nbre | NumCand | Sexe | Nom | Prenoms | DateNaiss). A chaque saisie dans un userform (ce dernier classeur contient les codes et est copié sur tous les postes), les données sont ajoutées (dernière ligne) dans la feuille . Je peux modifier une ligne (fiche) ou une cellule, consulter une ligne ou la modifier. Les photos ne sont insérées (à partir des numéros des candidats) que pendant l'élaboration des listes de salle et l'édition des résultats (admissibilié et admission). Cela marche mais le classeur partagé pose des problèmes d'ouverture et de sauvagarde, donc d'instabilité. Alors l'on m'a conseillé d'utiliser Ado connexion pour lire et écrire dans un classeur fermé. Malheureusement je n'y arrive pas. Aussi, je ne connais pas Access. Je vais m'y mettre mais pas maintenant compte tenu de l'urgence.
Le lien https://www.cjoint.com/?AInm77ZCR84
Merci de m'aider