Posez votre question Signaler

Programmation VBA Excel 2007

yapson2011 4Messages postés lundi 12 septembre 2011Date d'inscription 25 septembre 2011Dernière intervention - Dernière réponse le 20 sept. 2011 à 07:48
Bonjour,
Je voudrais pouvoir à partir d 'un userform :
1 - accéder à une plage (cellule spécifiée, ligne spécifiée après l'instruction Find dans une colonne) d'une feuille nommée LISTE d'un classeur Excel 2007 fermé et partagé, extraire ces informations et les afficher dans une listview et dans le classeur appelant
2 - ajouter une ligne (enregistrement) à cette cette feuille en dernière position, informations transférées à l'aide d'un userform à partir de plusieurs postes avec l'instruction Range("A65536").End(xlUp)
3 - modifier une ligne spécifiée trouvée à l'aide de Find, modification opérée par plusieurs utilisateurs
Tous les codes obtenus sur le net et qui utilisent les instructions SQL et la connexion ADO ne s'exécutent pas ou pas correctement
Je signale que la connexion ADO m'interesse beaucoup car le classeur en question contient des photos dans des cellules (trombino) pour identifier des candidats. Son ouverture pendant la saisie ralentit le travail et des problèmes d'instabilité surviennent
Pourrais-je avoir des pistes de solution pour résoudre cet épineux problème qui me donne l'insomnie?
Merci
Lire la suite 
Réponse
+0
moins plus
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
"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
http://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 ....
yapson2011 4Messages postés lundi 12 septembre 2011Date d'inscription 25 septembre 2011Dernière intervention - 13 sept. 2011 à 13:28
Bonjour michel,

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 http://cjoint.com/?AInm77ZCR84

Merci de m'aider
Répondre
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+0
moins plus
Bonjour,

Guère de temps cet après midi, je te conseille donc de lire ce tuto
http://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)
http://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
http://cjoint.com/?3InortrO67a

désolé pur cet aprèm!
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+0
moins plus
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
michel_m 11772Messages postés lundi 12 septembre 2005Date d'inscription ContributeurStatut 24 mai 2015Dernière intervention - 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)
Répondre
yapson2011- 16 sept. 2011 à 18:10
Bonsoir Michel,

Est-il possible d'avoir un mail pour t'envoyer les codes (ou tout le projet) par pièce jointe? Le site http://cjoint.com/ ne fonctionne pas très bien., je n'ai pas réussi à ouvrir ton exmple sur l'association 1901

Merci et à demain sinon à lundi. Bon week end
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
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

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 11772Messages postés lundi 12 septembre 2005Date d'inscription ContributeurStatut 24 mai 2015Dernière intervention - 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
Répondre
michel_m 11772Messages postés lundi 12 septembre 2005Date d'inscription ContributeurStatut 24 mai 2015Dernière intervention - 20 sept. 2011 à 07:48
abandon du suivi suite à demande technique sur MP
Répondre
Ajouter un commentaire
Ce document intitulé «  Programmation VBA Excel 2007  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.