Fonction si multiple en vba [Résolu]

Signaler
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020
-
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
-
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

Messages postés
29877
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 octobre 2020
2 884
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

.
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

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
Messages postés
29877
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 octobre 2020
2 884 >
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

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 !
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712
bonjour,
peut-être:
dim classeur as workbook, chemin as string
chemin = "" '...
set classeur=workbooks.open(chemin)
'...
classeur.close
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

Cela sert à ouvrir et fermer uniquement ??
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712 >
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

l'exemple, en effet, ne fait qu'ouvrir et fermer.
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

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 
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020
>
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020

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
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712 >
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

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?
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020
>
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020

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 :)
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020
>
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

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
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712 >
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

finalement, j'ai fini par peut-être deviner ce que tu voulais dire par "je voudrais donc le réouvrir dans le fermer":
- le fermer
- l'ouvrir
- le laisser ouvert

peut-être ainsi:
Sub actualisé()
Dim classeur As Workbook, chemin As String, classeurouvert, 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
classeurouvert = dejaouvert(chemin)
If classeurouvert Then
    classeurouvert.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
End If
End Sub
Private Function dejaouvert(chemin)
Dim wb As Workbook
For Each wb In Workbooks
    If wb.FullName = chemin Then
        Set dejaouvert = wb
        Exit Function
    End If
Next wb
dejaouvert = False
End Function
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

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 ????????‍♂️
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020
>
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020

enfaite j’avais zappé un code entre true et false

Le seul hic c’est que mon fichier ne reste pas ouvert quand je l’ai déjà d’ouvert sur le bureau

Et qu’il me demande si je veux le rouvrir, vu qu’il est déjà ouvert
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712 >
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

j'ai un peu adapté la fonction, pour essayer de comprendre ce qui se passe:
Private Function dejaouvertalorsferme(chemin) As Boolean
Dim wb As Workbook, chemins As String
chemins = ""
For Each wb In Workbooks
    If wb.FullName = chemin Then
        wb.Close (False)
        Call MsgBox(chemin, , "était ouvert")
        dejaouvertalorsferme = True
        Exit Function
    Else
        chemins = chemins + wb.FullName + vbCrLf
    End If
Next wb
Call MsgBox("cherché:" + vbCrLf + chemin + vbCrLf + vbCrLf _
    + "vus:" + vbCrLf + chemins, , "pas trouvé")
dejaouvertalorsferme = False
End Function
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020
>
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020

Je vais essayer et je reviens vers vous merci
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020
>
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020

J’ai pas réussi et je suis un peu perdu dans votre code vu qu’il n’y a pas d’explication sur ce que ça fait ..

J’ai donc laissé pour le moment comme c’était même si ça me pose la question de réouvrir et que ça ferme le fichier (si il était déjà ouvert de base)

Merci encore pour votre aide
Messages postés
12763
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
712 >
Messages postés
33
Date d'inscription
jeudi 1 octobre 2020
Statut
Membre
Dernière intervention
25 octobre 2020

le but des changements que j'ai fait, c'était que le code affiche ce qu'il faisait et ce qu'il voyait, afin de comprendre pourquoi cela ne fonctionne pas comme tu le souhaites.