Utiliser un fichier exel sans l'ouvrir VB

vacilis Messages postés 5 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je reprends le code de quelqu'un, je dois l'omptimiser. On utilise une grande quantitée de fichier excel qui servent à effectuer des calculs . Le problème est qu'à chaque utilisation d'un fichier il est affiché ( une feuille excel apparaît). Il disparait une fois qu'il a finit d'être utilisé mais cela ralenti les calculs et bloque le pc pendant ce temps. Le bout de code pour ouvrir le fichier est :

If toto = tata Then
pathname = pathinit & "\titi.xlsx"
Workbooks.Open pathname
Sheets(Phase).Select
End If

J'ai essayé de placer un opendata mais je n'arrive pas à le faire fonctionner .

Merci.
Configuration: Windows XP  Microsoft Visual Basic

6 réponses

  1. Ran2
     
    J'ai pas fait de VBA depuis des siècles mais essai de remplacer :

    Workbooks.Open pathname
    Sheets(Phase).Select
    par un truc du genre (pas sur que ça marche XD)
    Workbooks("file.xls").Worksheets("Sheet1").select

    Sinon pour activer une feuille y'a ça qui marche :
    Workbooks("file.xls").Worksheets("Sheet1").Activate

    puis comme c'est la feuille active, tu en fait ce que tu veux...

    Sinon cherche là dedans : https://docs.microsoft.com/fr-fr/welcome-to-docs
    0
  2. vacilis Messages postés 5 Statut Membre
     
    Merci pour la réponse rapide !

    Les lignes de code ci dessus ne fonctionnent pas pour mon projet. Cependant j'ai trouvé une astuce pour ne plus lui demander d'ouvrir la feuille. Cependant , il me faut tout de même activer le workbook et là je suis encore coincé.

    Merci de me consacrer un peu de temps.

    ps j'ai regardé sur le lien fournit mais mon problème n'est pas dans l'aide ni dans les forums.
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    la méthode à utiliser est d'aller chercher les données sans ouvrir les classeurs sous certaines conditions

    si tu as peu de données à chercher dans chaque classeur tu pourrais utiliser la macro dite de Walkenbach
    voici un exemple
    Range("E9") = ExecuteExcel4Macro("'" & chemin & "\[source.xls]Feuil1'!R7C4")
    renvoie dans E9 la valeur de D7 (R7C4)
    démo:
    https://www.cjoint.com/?mookudu5Zv

    Autrement, tu as la méthode ADO: il faut que les zones sources soient sous forme de bases de données
    ci joint petite démo basique
    https://www.cjoint.com/?mooaiLOsGF

    de toutes façons, évite d'utiliser select-selection ainsi que copy-paste
    tu iras beaucoup + vite en insérant cette ligne au départ
    application.screenupdating=false qui fige le défilement de l'écran (temps divisé par 10)

    0
  4. vacilis Messages postés 5 Statut Membre
     
    Ca marche nikel ! Merci beaucoup !!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. inthes Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   6
     
    Bonjour,
    je dois faire une application sous VB Excel, à chaque utilisation de cette application necessitera l'utilisation d'un nouveau fichier excel toujours avec le même mais pas le même contenu. Ce fichier à toujours 36 colonnes par contreles lignes peuvent aller jusqu'a 4000. Je ne peux pas contourner ce contraintes: utilisation de excel pour faire l'application. Comment puis je faire pour exploiter ce fichier sans l'ouvrir.
    Merci de votre collaboration.
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour,

      Il manque beaucoup de renseignements dans ta demande notamment dans la restitution dans ton classeur cible: feuille, emplacement de la restitution, compilation ou non des précédentes extractions...
      macro ci dessous non testée sous XL<2007
      si difficultés mettre un extrait du classeur source

      Const Camin As String = "D:\ledossierdufichier"  'CONSTANTES A ADAPTER  AU CLASSEURSOURCE
      Const Fichier As String = "monfichier.xls"
      Const onglet As String = "Feuil1"
      Const plage As String = "A1:AH4500"
      
      Sub extraire()
      Dim Source As Object, Requete As Object
      Dim Col As String, Lig As Byte
      Dim Texte_SQL As String
      
      
      onglet = onglet & "$" ' le $ est obligatoire après le nom de l'onglet
      
      'connexion ADO au fichier mensuel désigné par etape (1 à 255)
      Set Source = CreateObject("ADODB.Connection")
          Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & Camin & "\" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
          
           'exerce la requete ADO sur la donnée à recopier
          Texte_SQL = "SELECT * FROM [" & onglet & plage & "]"
          Set Requete = CreateObject("ADODB.Recordset")
          Set Requete = Source.Execute(Texte_SQL)
          
       'restitue sur le classeur récap
          Cells(2, "A").CopyFromRecordset Requete 'A ADAPTER AU CLASSEUR CIBLE
          
      End Sub
      
      0
  7. Vacilis
     
    Mets :
    Application.ScreenUpdating = False
    en début de code et ta macro tournera plus vite
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      relire le lien #3....
      0