Programmation VBA Excel 2007
Fermé
yapson2011
Messages postés
4
Date d'inscription
lundi 12 septembre 2011
Statut
Membre
Dernière intervention
25 septembre 2011
-
12 sept. 2011 à 12:59
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 20 sept. 2011 à 07:48
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 20 sept. 2011 à 07:48
A voir également:
- Programmation VBA Excel 2007
- Liste déroulante excel - Guide
- Si et excel - Guide
- Save pdf office 2007 - Télécharger - Bureautique
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
4 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 306
12 sept. 2011 à 16:47
12 sept. 2011 à 16:47
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 ....
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 306
13 sept. 2011 à 14:25
13 sept. 2011 à 14:25
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!
yapson2011
Messages postés
4
Date d'inscription
lundi 12 septembre 2011
Statut
Membre
Dernière intervention
25 septembre 2011
14 sept. 2011 à 18:29
14 sept. 2011 à 18:29
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 306
15 sept. 2011 à 07:57
15 sept. 2011 à 07:57
Bonjour,
Je serai absent toute la journée. donc réponse ce soir ou demain: Beaucoup de choses à dire sur ton envoi.
merci de mettre tes codes ente les balises de l'onglet "<>" en haut des messages... :o)
Je serai absent toute la journée. donc réponse ce soir ou demain: Beaucoup de choses à dire sur ton envoi.
merci de mettre tes codes ente les balises de l'onglet "<>" en haut des messages... :o)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 306
19 sept. 2011 à 10:33
19 sept. 2011 à 10:33
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)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 306
19 sept. 2011 à 14:07
19 sept. 2011 à 14:07
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 306
Modifié par michel_m le 20/09/2011 à 07:48
Modifié par michel_m le 20/09/2011 à 07:48
abandon du suivi suite à demande technique sur MP
13 sept. 2011 à 13:28
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