Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2012, 11h54   #1
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut Vérifier classeur ouvert

Bonjour à tous et bonne année!

bon je la commence bien j'ai un petit problème avec un bout de code,
je voudrais vérifier qu'un classeur est fermé avant de sauvegarder des données dedans voilà ce que j'ai écrit :
Code :
1
2
3
4
Dim Wdest As Workbook
Set Wdest = Workbooks("CC2011T.xlsx")
If Ouvert(Wdest) Then MsgBox "Attention le classeur d'archivage est ouvert veuillez le fermer pour sauvegarder le devis"
Exit Sub
Manque de pot ça ne marche pas donc vu que c est facile à résoudre pour un pro j'imagine qu'une âme charitable pourra m' aider merci d'avance.!
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h59   #2
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Bonjour,

Le test concerne-t-il l'ouverture dans la même session d'Excel (utilisteur), ou bien une ouverture quelque soit la session (autre utilisateur)?
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 12h40   #3
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Bonjour,
c'est quelque soit la session (autres utilisateurs)
les classeurs sont en réseaux donc faudrait pas qu'un opérateur du premier
ouvre une session et sauvegarde pendant qu'un autre du second l'utilise...
même s'il ya le message d'excel "ouvrir en lecture seule" j'aimerai quand même un message d'avertissement avant toute sauvegarde.
C compliqué?
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 12h54   #4
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Citation:
C compliqué?
Non, avec cette fonction à intégrer dans un module standard.

Code :
1
2
3
4
5
6
7
8
9
10
11
Function FichierEstOuvert(ByRef FichierTeste As Variant) As Boolean
    Dim FICHIER As Long
    On Error GoTo Erreur
    FICHIER = FreeFile
    Open FichierTeste For Input Lock Read As #FICHIER
    Close #FICHIER
    FichierEstOuvert = False
    Exit Function
Erreur:
    FichierEstOuvert = True
End Function
Utilisation :

Code :
1
2
If FichierEstOuvert(FichierTeste) = True Then _
    MsgBox "Désolé, ce fichier est ouvert.", vbOKOnly, "Alerte"
Remarque imortante. Ici, en lieu et place de "FichierTeste", tu dois écrire le chemin complet (répertoire avec "antislash") suivi du nom du classeur et de son extension.

Un modeste conseil. Evite le langage SMS. Ecrire "Est-ce" au lieu de "C" n'est pas bien compliqué.

Reviens si nécessaire.
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 15h00   #5
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut oups réponse tardive

Merci MarcelG pour ta réponse et ton petit avertissement sur mon français peu académique (ma femme et ma mère étant prof de français elles te féliciteraient de ton engagement à l'égard de la nation ).

Cependant, je ne suis pas sûr d'avoir bien écrit la fonction car je n'ai pas de résultat à part le fait qu'il me propose de sauvegarder une copie ce qui n'est pas mon but. voici le bout de code adapté :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 Function FichierEstOuvert(ByRef FichierTeste As Variant) As Boolean
 
     Dim FICHIER As Long
    Set FichierTeste = "Z:\Gestion entreprise\VBA\Atest\CC2011T.xlsx"
   On Error GoTo Erreur
   FICHIER = FreeFile
    Open FichierTeste For Input Lock Read As #FICHIER
   Close #FICHIER
   FichierEstOuvert = False
  Exit Function
Erreur:
   FichierEstOuvert = True
End Function
Manque-t-il un je-ne-sais-quoi?

J'aimerai que l'opérateur soit averti par un message que le classeur C2011T est ouvert et que du coup la sauvegarde est annulée.
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h05   #6
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,



http://www.developpez.net/forums/d10...oste-instance/

Code :
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
Sub Testeur()
Dim wbkAtester As Workbook
Dim strChemin As String
Dim strNom As String
'********************* rajouter pour si macro dans cible : Application.EnableEvents = False / True
strNom = "Fichier a tester.xls"
On Error Resume Next
Set wbkAtester = Workbooks(strNom) 'Si le classeur n'est pas ouvertdans cette instance, on affecte à la variable Objet un objet qui n'existe pas dans l'Application. Le on Error Resume next passe à la lignee suivante, wbkAtester est donc resté à Nothing.
On Error GoTo 0
If wbkAtester Is Nothing Then
    MsgBox "Ce Classeur n'est pas ouvert dans cette instance d'Excel"
Else
    MsgBox "Déjà Ouvert dans cette instance d'Excel!"
    Set wbkAtester = Nothing
    Exit Sub
End If
 
strChemin = "E:\+ Cliparts\"
'strChemin = "\\Toto-PC\Users\Public\Documents\"
Set wbkAtester = Workbooks.Open(strChemin & strNom)
    If wbkAtester.ReadOnly Then
        MsgBox "Déjà Ouvert sur un autre poste ou dans une autre instance"
        wbkAtester.Close
    Else
        MsgBox "Ce Classeur n'est pas ouvert sur un autre poste ou dans une autre instance !"
        wbkAtester.Close 'ligne à activer ou non selon le test voulu classeur reste ouvert ou non
    End If
End Sub

Cordialement,

Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 15h32   #7
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut ok

Merci pour ta réponse Ormonth et désolé j'avais fait une recherche qui ne m'a pas amené sur ton lien ou alors elle a du m'échapper.

Ps: Le langage SMS est définitivement banni de ma pratique du clavier. (Sans quoi je sens que je serai brûlé ...)
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 15h43   #8
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Par défaut Version Marcel

Salut Didier,

Sinon, en ce qui concerne la version que j'utilise.

Le code de la fonction doit rester intact.

C'est dans la procédure Sub faisant appel à elle qu'il faut informer le chemin complet.

Code :
If FichierEstOuvert(chemincomplet\nomdufichier.extension) Then
Cette information sera l'argument de ta fonction.

Bon week-end à tous.
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 16h03   #9
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut Merci pour la précision

D'accord MarcelG et merci pour tes réponses
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h16.


 
 
 
 
Partenaires

Hébergement Web