IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recupération valeur ds d'autres classeurs sans pour autant l'ouvrir [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut Recupération valeur ds d'autres classeurs sans pour autant l'ouvrir
    Bonjour Forum et à tous ceux qui me liront,

    J'aurais une question sur un problème que j'ai lorsque j'utilise une macro de recup de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Public Sub Affaire()
    Dim fich$, feuil$, i&, Cell   As Range
    On Error Resume Next
     
    If Range("F3").Value = "1" Then
    Set Cell = Range("b2")
    ElseIf Range("F3").Value = "2" Then
    Set Cell = Range("g7")
    ElseIf Range("F3").Value = "" Then Exit Sub
    End If
     
    feuil = Sheets(2)
    For i = 6 To 300 ' a adapter
    Range("F" & i).Value = GetValueWithADO(Range("E" & i), feuil, Cell)
     
    Next i
     
    End Sub

    Mon PC est en reseau et le probleme est le suivant si sur un autre PC un des fichiers et ouvert , il s'ouvrira aussi chez moi (lecture seul)
    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If thisworkbook.readonly = true then....
    mais c'est comme si j'avais rien mis.

    J'espère avoir été clair, je suis au boulot et ai écrit un peu rapidement
    n'hésiter à me contacter pour d'autres renseignements


    Merci d'avance Forum.

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Et quelle est la question?

    Accessoirement, que contient ta macro GetValueWithADO?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Je pensais que le titre était assez parlant ,je vais tacher d’être un peu plus clair.

    J'ai une une liste de fichier xls mise en forme grâce à une macro dans un premier temps.
    Ensuite avec la petite macro ci-dessus (fait à la va-vite je l’avoue) je vais chercher quelques valeurs dans ces fichiers(classeurs fermés) gràce comme tu peux le voir avec "GetValueWithADO" c'est un peux long mais bon, j'ai pas mieux.

    Ces fichiers sont stockés en réseau, ce sont des gamme de fabrication avec toutes les étapes d'une production.
    Le problème surviens lorsque je fais ma prise d'info dans ces classeur alors que l'un d'eux est ouvert, utilisé par un opérateur, et là la macro s’arrête, pas de message d'erreur, elle s’arrête et le fichier s'ouvre en lecture seul.

    L'idée serait de repérer les fichiers ouvert ,et de les zapper et de passer au suivant.

    Merci pour votre patience.

    Cordialement

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je répète donc la question:

    Citation Envoyé par AlainTech Voir le message
    que contient ta macro GetValueWithADO?
    La méthode ADO se fout pas mal qu'un classeur soit ouvert ou fermé.
    On peut même faire une requête ADO dans le classeur où se trouve cette requête.

    Donc la question a toute sa pertinence ici.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut
    Bonjour AlainTech,

    Désolé si je ne comprend pas ta demande , je n'arrive pas à décortiquer ces macro et en sortir les éléments problématiques.

    Voici la macro "ADO" que j'utilise ,je l'ai quelque peu adapté à ma sauce ( peut etre en créant moi meme des conflits )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Function GetValueWithADO(Classeur$, Feuille$, Cell As Range)
    'renvoie la valeur de la cellule Cell de la feuille Feuille
    'du classeur fermé Classeur
    Dim RcdSet As Object
    Dim strConn As String
    Dim strCmd As String
    Dim dummyBase As Range
     
      'prépare une "base de données" bidon pour la clause SELECT
      '(une entête fictive et une ligne de données)
      Set dummyBase = Cell.Resize(2)
     
      'prépare les commandes ADO et SQL
      strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & Classeur & ";" & _
                    "Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
      strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
     
      'crée l'objet Recordset
      Set RcdSet = CreateObject("ADODB.Recordset")
     
      'va chercher l'info
      RcdSet.Open strCmd, strConn, 0, 1, 1 'adOpenForwardOnly, adLockReadOnly, adCmdText
     
      'et la renvoie
      GetValueWithADO = Application.Clean(RcdSet(0))
     
      'autre syntaxe possible
    '  GetValueWithADO =Application.Clean(RcdSet.GetString(NumRows:=1))
     
      'nettoyage
      Set RcdSet = Nothing
    End Function
    J'espère que cela aidera

    @bientot

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Il me semble que, si tu cherches à lire des fichiers Excel 2007, ta chaîne de connexion n'est pas correcte.
    Il se peut que ce soit ce qui provoque l'ouverture du fichier.

    Vois dans ce lien quelle est la méthode qui convient le mieux à ton besoin.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut
    Bonjour AlainTech,

    J'ai bien pris en compte le lien seulement cela ne m'a pas plus avancé, comme je te l'ai dit j'ai copier cette macro "ADO" sur un forum et je ne saurais la manipuler avec les éléments trouvés suivant ton lien.C'est pas grave.
    J'essaierai de contourner le problème.

    Merci tout de méme pour ton aide.

    Je laisse un jour ou deux ce topic ouvert ( on sait jamais quelqu'un pourrais me débloquer la situation) sinon je la clôturerai sans faute.

    @ bientot

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Alors là j'abandonne

    Je n'y comprend rien à rien, j'ai pensé à un moment avoir trouvé en Readonly = false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Extended Properties=""Excel 8.0;HDR=no;ReadOnly=false;IMEX=1;"";"
    Bizarement ça a marché une fois et au second essai la macro arrete sa recupération de données et m'ouvre le fichier déja ouvert sur le reseau

    Bon tant pis, encore merci AlainTech

    @ plus pour une prochaine colle

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    As-tu essayé cette chaine de connexion:
    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";


    En adaptant le chemin complet de ton fichier, bien entendu.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Oh un rebondissement.

    Merci , je test ça et je reviens vers toi.

    J'en demande pas mal ,mais le chemin complet du fichier,
    c'est bien le fichier excel d'ou est faite la demande de recup,c'est bien ça??


    Cdt

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut
    Re,

    Rien à faire je copie/colle simplement ta chaine de connexion et rien,
    là je baisse dans mon estime

    En plus la chaine apparait en rouge avec divers problemes apparemment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'prépare les commandes ADO et SQL
      strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";
      strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
    Je fait un tour sur la toile, je vois et je reviens

    Cdt

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    J'ai beau tourner le probleme dans tous les sens ,rien y fait.

    Contournons le.

    Les points à savoir:

    -J'ai le nom du classeur en A dans ma liste
    -L'adresse du classeur dans le reseau en E

    Y a t il possibilité de repérer dans cette liste le classeur ouvert et d'effecer purement et simplement la ligne entiere, avec une boucle "for i = 6 to 300" ...... next i

    Là il faut être radical


    Cdt

  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par NulenExcel77 Voir le message
    je copie/colle simplement ta chaine de connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";
      strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"
    Si tu as copié/collé, comme tu dis, il est tout-à-fait normal que ça ne fonctionne pas.

    Il faut, au minimum, que tu modifies le chemin de ton fichier (celui que tu veux lire).
    De plus, il faut doubler les guillemets autour des Extended Properties.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'prépare les commandes ADO et SQL
      strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\TonDossier\TonFichier.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES"";
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut
    Bonjour AlainTech,

    La macro se déroule trés bien et jusqu'à la fin mais ne me reporte pas les éléments demandés.
    J'ai fais en sorte qu'en cas de case vide, il me retourne "Néant" et là c''est néant sur toute la colonne.

    Et puis il faudrait adapter cette ligne de commande avec environ 300 adresse "source" comme l'indique ma premiere macro en début de topic.

    A part ça j'avais quelques 30sec d'attente avant pour avoir mes 300 lignes d'info et là avec ta modif ça a été plutôt instantané

    Merci à toi j'ai enfin l'impression d'avancer.

  15. #15
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par NulenExcel77 Voir le message
    J'ai fais en sorte qu'en cas de case vide, il me retourne "Néant" et là c''est néant sur toute la colonne.
    Un petit bout de code pour montrer comment tu as "fait en sorte"?

    Citation Envoyé par NulenExcel77 Voir le message
    Et puis il faudrait adapter cette ligne de commande avec environ 300 adresse "source" comme l'indique ma premiere macro en début de topic.
    Si tu expliquais, en français (pas en essais de code) ce que tu veux obtenir, ça nous aiderait à t'aider.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Je pense avoir donné tous les éléments nécessaire à la compréhension de mon problème d'origine dans un 1er temps et dans un 2° temps, expliqué (avec des mots, fautes d'orthographes ou pas) la façon pour passer outre LE soucis.
    C'est à vous de me fournir la solution "codée VBA".

    La solution, quelqu'un me la donnait sur un autre forum et ils avaient les mêmes explications qu'ici, le problème vient d'ailleurs peut être, je repasserai la mettre en ligne ici pour tout ceux qui comme moi ont attendu après toi.

    Je pense avoir fait montre d'une certaine patience quant à ta façon plutôt hautaine de répondre à mes demandes, la plupart des gens qui comptent sur vous n'ont pas forcement le langage Excel ( mon pseudo était bien trouvé je trouve).
    Pédagogie, ça je sais l'écrire et en plus je comprend la signification de ce mot,
    et toi ??

    Je t'ai accordé des points alors que tu ne m'a rien appris, je ne referai plus cette erreur .


    Cordialement

    ps: ne prend pas la peine de me répondre, je ne te relierai pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Macro pour copier valeurs dans 1 autre classeur
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/11/2013, 09h42
  2. [XL-2003] exécution d'une macro qui appel un autre classeur sans raisons
    Par fllyann dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/03/2011, 11h38
  3. [XL-2003] incrémenter une valeur d'un autre classeur
    Par Nightwhisper dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 19/06/2009, 23h14
  4. Récupérer des valeurs d´un autre classeur sans l´ouvrir
    Par jguenot dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/05/2009, 16h43
  5. comment exécuter macro d'un autre classeur sans avoir à l'ouvrir
    Par zerti dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/07/2007, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo