Fonction si multiple en vba

Résolu
Akatsucki Messages postés 94 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Étant novice en programmation je recherche de l’aide pour mon code vba ...
Je souhaiterais lors du lancement de ma macro ouvrir un fichier selon une cellule référence A1 qui varie, puis le refermer.. mais il ce peut aussi que ce fichier soit déjà ouvert sur mon bureau donc j’aimerais le réouvrir et le laisser ouvert

Bref j’espère avoir était assez clair

Pour le moment j’ai un début de code mais pas vraiment optimal


Merci d’avance

4 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour
    Merci de partager ton code correctement en utilisant les balises de code
    Explications à lire entièrement disponibles ici :

    https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    .
    0
    1. Akatsucki Messages postés 94 Statut Membre
       
      J’aimerais bien pouvoir pouvoir partager mon code mais je suis au travail et je n’est pas l’autorisation d’utiliser internet sur le PC
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > Akatsucki Messages postés 94 Statut Membre
         
        Tu arrives bien à nous envoyer des messages non ? (depuis ton smartphone je suppose... )
        Donc, tu réécris le code depuis ton tel... ou alors tu te l'envois par mail puis tu nous le copie/colle depuis ton tel...
        bref...
        Le code, il se partage en "text" et non en image.... sinon c'est inexploitable pour nous !
        0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    peut-être:
    dim classeur as workbook, chemin as string
    chemin = "" '...
    set classeur=workbooks.open(chemin)
    '...
    classeur.close
    0
    1. Akatsucki Messages postés 94 Statut Membre
       
      Cela sert à ouvrir et fermer uniquement ??
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Akatsucki Messages postés 94 Statut Membre
         
        l'exemple, en effet, ne fait qu'ouvrir et fermer.
        0
  3. Akatsucki Messages postés 94 Statut Membre
     
    J'ai taper le plus important :)

    Sub actualisé()
    
    With thisworkbook
    
    If sheets("stock cein ”).range("s1") ="poste 1” then
    Workbooks.open filename:="Q:\deprog\.fichier1..xlsm”, readonly:=1, updatelinks:=0
    
    If sheets("stock cein ”).range("s1") ="poste 2” then
    Workbooks.open filename:="Q:\deprog\.fichier2..xlsm”, readonly:=1, updatelinks:=0
    
    If sheets("stock cein ”).range("s1") ="poste 3” then
    Workbooks.open filename:="Q:\deprog\.fichier3..xlsm”, readonly:=1, updatelinks:=0
    
    .refreshAll
    
    Windows("fichiers1.xlms").close savechanges:= false
    Windows("fichiers2.xlms").close savechanges:= false
    Windows("fichiers3.xlms").close savechanges:= false
    
    End if
    End With
    
    End sub 
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      alors peut-être ainsi:
      Sub actualisé()
      Dim classeur As Workbook, chemin As String
      Select Case ThisWorkbook.Sheets("stock cein ").Range("s1")
          Case "poste 1"
              chemin = "Q:\deprog\.fichier1.xlsm"
          Case "poste 2"
              chemin = "Q:\deprog\.fichier2.xlsm"
          Case "poste 3"
              chemin = "Q:\deprog\.fichier3.xlsm"
      End Select
      
      Set classeur = Workbooks.Open(Filename:=chemin, ReadOnly:=1, UpdateLinks:=0)
      ThisWorkbook.RefreshAll
      classeur.Close
      
      End Sub
      0
    2. Akatsucki Messages postés 94 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Merci je vais tester ce code et je reviens vers vous pour vous confirmer si ça fonctionne

      Par curiosité vous seriez aussi comment coder si le fichier voulu et déjà ouvert je reçois un message d’erreur( fichier déjà ouvert voulez vous le réouvrir), je voudrais donc le réouvrir dans le fermer merci d’avance si vous prenez du temps pour trouver la solution
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Akatsucki Messages postés 94 Statut Membre
       
      quand tu écris "je voudrais donc le réouvrir dans le fermer", que signifie "dans"?
      quel est l'utililité de rouvrir un fichier déjà ouvert?
      0
    4. Akatsucki Messages postés 94 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Autant pour moi c’est une erreur de frappe le « dans » signifie SANS le refermer

      Enfaite j’ai des formules dans un fichier principal qui récupère des données dans ces fichiers secondaire. Seulement j’ai un collègue qui travail avec ce fichier et change des valeurs pour faire une programmation pour le poste suivant...donc je dois ouvrir constamment ce fichier pour que mes données ce mettent a jour sinon ils ce mettent en défaut par #VALEUR!

      J’espère avoir était assez clair :)
      0
    5. Akatsucki Messages postés 94 Statut Membre > Akatsucki Messages postés 94 Statut Membre
       
      J’ai réussi à faire fonctionner ton code mais il me reste le cas ou le fichier et déjà ouvert ... il me demande de le réouvrir
      0
  4. Akatsucki Messages postés 94 Statut Membre
     
    Salut merci d’avoir pris du temps pour ma macro

    Je reçois un déboggage a la ligne 11 : classeurouvert = dejaouvert (chemin)

    Si tu vois le soucis ????????‍♂️
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      quel message d'erreur?
      0
    2. Akatsucki Messages postés 94 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Je ne suis plus au travail je vous tiens informé demain
      0
    3. Akatsucki Messages postés 94 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      On faite ta macro fonctionne si je n’est pas de fichier ouvert, mais si j’ai déjà un fichier ouvert il me met ce message

      Alors le message d’erreur est :

      Erreur d’exécution ´438´:
      Propriété ou méthode non gérée par cet objet

      Et donc debogage

      0
    4. Akatsucki Messages postés 94 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      J’ai enlevé ce code et ça marche

      Maintenant mon soucis c’est que je reçois la demande si je veux réouvrir le fichier quand je l’ai déjà ouvert sur le bureau

      Et l’autre chose c’est qu’il ce place sur le fichier qu’on rouvre alors que je voudrais rester sur ma page ou j’ai le bouton de ma macro
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Akatsucki Messages postés 94 Statut Membre
       
      tu n'expliques pas ce que tu as enlevé.
      ceci devrait mieux fonctionner:
      Sub actualisé()
      Dim classeur As Workbook, chemin As String, garderouvert As Boolean
      Select Case ThisWorkbook.Sheets("stock cein ").Range("s1")
          Case "poste 1"
              chemin = "Q:\deprog\.fichier1.xlsm"
          Case "poste 2"
              chemin = "Q:\deprog\.fichier2.xlsm"
          Case "poste 3"
              chemin = "Q:\deprog\.fichier3.xlsm"
      End Select
      If dejaouvert(chemin) Then
          Workbooks(chemin).Close
          garderouvert = True
      Else
          garderouvert = False
      End If
      Set classeur = Workbooks.Open(Filename:=chemin, ReadOnly:=1, UpdateLinks:=0)
      ThisWorkbook.RefreshAll
      If Not garderouvert Then
          classeur.Close
      Else
          ThisWorkbook.Activate
      End If
      End Sub
      Private Function dejaouvert(chemin) As Boolean
      Dim wb As Workbook
      For Each wb In Workbooks
          If wb.FullName = chemin Then
              dejaouvert = True
              Exit Function
          End If
      Next wb
      dejaouvert = False
      End Function
      0