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 22/01/2012, 20h30   #1
Invité de passage
 
Homme
Technicien réseau
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 50
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 2
Points : 2
Par défaut Vérifier la S'assurer de la disponibilité de 2 fichiers ouverts sur bureau.

Bonsoir Forum !
Ceci est ma première discussion,et sûrement pas la dernière !
Je réalise un projet et au grès de mes blocages , je suis novice évidemment , je ferai appel à vos suggestions.Cool.

J'ai créér un US Fpour lequel un des boutons (CommandButton1) déclenche une macro.Cette macro récupère des données de 2 fichiers qui doivent être ouverts sur le bureau.Lorsque c'est le cas , ça roule .Je sais faire(parce que c'est simple..).
Par contre , si l'un des 2 fichiers ou les deux ne sont pas ouverts, je souhaiterais éviter le popup VBA qui invite à un débogage.Cette piste doit être remplacée par un contrôle préalable de la disponibilité de ces fichiers ouverts sur le bureau et si ce n'est pas le cas , ne pas lancer la macro et alerter l'utilisateur en l'invitant à ouvrir ces deux fichiers sur son bureau.
Pouvez vous me décrire un "machin" qui peut réaliser celà? (j'insiste sur la partie décrire , qui me permet de comprendre et de progresser,enfin , j'espère !).
Meci par avance.
Katoch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 21h24   #2
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Bienvenue sur le forum.

En parcourant les classeurs ouverts (Workbooks), il est possible de voir si parmi ces classeurs,
figure le nom des fichiers attendus.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Public Function AreRequestedWbOpen(wb1 As String, wb2 As String) As Boolean
    Dim wb As Workbook
    Dim FoundWb As Integer
    FoundWb = 0
    For Each wb In Workbooks ' parcours les classeurs ouverts
        If wb.Name = wb1 Or wb.Name = wb2 Then
            FoundWb = FoundWb + 1
        End If
    Next wb
 
    AreRequestedWbOpen = (FoundWb = 2)
End Function
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 23h12   #3
Invité de passage
 
Homme
Technicien réseau
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 50
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 2
Points : 2
Tout d'abord merci de cette réponse rapide !

je crois comprendre que je dois remplacer wb1 et wb2 de ce code par les noms des classeurs que je recherche.
Mais j'avoue que je vois pas du tout comment récupérer le résultat de ce code pour
"...ne pas lancer la macro et alerter l'utilisateur en l'invitant à ouvrir ces deux fichiers sur son bureau...."
Pouvez vous développer ?
Cdlt
Katoch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 23h27   #4
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 716
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 716
Points : 3 656
Points : 3 656
Salut, une autre méthode, à adapter à ton contexte http://excel.developpez.com/faq/?pag...ClasseurOuvert
en ajoutant une gestion pour Err.Number = 53
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 23h51   #5
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Re.

Citation:
Mais j'avoue que je vois pas du tout comment récupérer le résultat de ce code pour
"...ne pas lancer la macro et alerter l'utilisateur en l'invitant à ouvrir ces deux fichiers sur son bureau...."
La méthode pour détecter et avertir qu'un fichier n'est pas ouvert.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function CheckAndNotifyIsOpenWb(wbName As String) As Boolean
    Dim wb As Workbook
    CheckAndNotifyIsOpenWb = False
    For Each wb In Workbooks ' parcours les classeurs ouverts
        If wb.Name = wbName Then
            CheckAndNotifyIsOpenWb = True
        End If
    Next wb
 
    If Not CheckAndNotifyIsOpenWb Then  ' notifie que le fichier recherché n'est pas ouvert
        Call MsgBox("Fichier " & wbName & " non ouvert", vbExclamation + vbOKOnly, "Erreur")
    End If
 
End Function
Au début de la macro à exécuter, on teste l'ouverture de fichier.
Code :
1
2
3
4
5
6
7
8
9
10
11
Private Sub CBStartMacro_Click()
 
    If Not (CheckAndNotifyIsOpenWb("Classeur1")) Or Not (CheckAndNotifyIsOpenWb("Classeur2")) Then
        Call MsgBox("Le traitement va être interrompu. Ouvrez les fichiers sur le bureau", _
                    vbExclamation + vbOKOnly, "Erreur")
        Exit Sub  ' Met fin à la macro.
    End If
 
    ' effectue le traitement normal
    '...
End Sub
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 00h07   #6
Invité de passage
 
Homme
Technicien réseau
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 50
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 2
Points : 2
Par défaut MERCI super Forum !

BlueMonkey ,kiki29
merci , je vais mettre en oeuvre !
Vous tiendrai informés d'ici quelques jours ...
Pour une première utilisation de ce forum , quelle efficacité !
Bravo à tous/toutes et encore merci.
Katoch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 02h14   #7
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 665
Points : 7 665
Bonjour,

Plutôt que renvoyer un message d'erreur à l'utilisateur, pourquoi ne pas ouvrir les fichiers dans la macro?
__________________
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!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 22h31   #8
Invité de passage
 
Homme
Technicien réseau
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 50
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 2
Points : 2
Par défaut Discussion "réglée !!!!"

Bonsoir Forum !
Alain Tch : je ne désire pas ouvrir les fichier par la macro,merci !
BlueMonkey : ne pas tenir compte du mail Perso... j'ai trouvé mon erreur et biensûr ton code est nickel !!!

Merci à tous.

((je reviendrai !!)
Katoch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 22h35   #9
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Citation:
Envoyé par Katoch
Bonsoir !
Où dois je insérer exactement le code ??

La macro commençant par

Sub Macro6()
Range("A6").Select
Range(Selection, Selection.End(xlDown)).Select
....................etc
End Sub
Et bien là par exemple.

Code :
1
2
3
4
5
6
7
8
9
10
11
Sub Macro6()
   If Not (CheckAndNotifyIsOpenWb("Classeur1")) Or Not (CheckAndNotifyIsOpenWb("Classeur2")) Then
        Call MsgBox("Le traitement va être interrompu. Ouvrez les fichiers sur le bureau", _
                    vbExclamation + vbOKOnly, "Erreur")
        Exit Sub  ' Met fin à la macro.
    End If
 
    Range("A6").Select
    Range(Selection, Selection.End(xlDown)).Select
 ....................etc
End Sub
Mais je suis d'accord avec AlainTech : plutôt que de dire à l'utilisateur d'aller ouvrir les fichiers,
autant les ouvrir depuis la macro.
_______________________________________
PS.
Le mieux est d'utiliser le forum pour les questions.
De cette manière tout le monde peut réagir, et apporter ses idées pour
faire progresser le sujet.
BlueMonkey 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 16h40.


 
 
 
 
Partenaires

Hébergement Web