[Catégorie modifiée .Net -> VBA] VBA qui ouvre un classeur, avec condition [Résolu]

- - Dernière réponse : cs_Le Pivert
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
- 22 nov. 2012 à 11:49
[b]Bonjour à tous.
Je suis nouveau sur ce forum, que je trouve intéréssant, Ma questio est la suivante. j'ai un classeur avec plusieurs feuilles, chacune dispose d'un bouton qui renvoie à un autre classeur en correspondance a cette même feuille.
Je voudrais poser des conditions a ces boutons, si le classeur à ouvrir est vide, a la case A1, donc c'est pas la peine de l'ouvrir, pour cela je dispose d'un MSGBOX deja qui dis " si vous voulez verifier, en cliquant sur oui le classeur s'ouvre.
Voila Le VB des boutons :

Private Sub CommandButton1_Click()
If (Range("G1")) = 1 Then
ActiveWorkbook.FollowHyperlink Address:="chemin d'accès du fichier.XLS"
Else
If IsEmpty(Range("G1")) Then
Select Case MsgBox("Pas de Message à Afficher. Voulez-vous Vérifier?", vbYesNo + vbQuestion, "Information")
Case vbYes
ActiveWorkbook.FollowHyperlink Address:="\chemin d'accès du fichier.XLS"
End Select
End If
End If
End Sub

- Seulement la case G1 ici correspond a la feuille sur laquelle je travaille, par contre moi je voudrais la condition sur la cellule A1 du classeur a ouvrir ?
Merci par avance.


/b
Afficher la suite 

20/24 réponses

Meilleure réponse
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
87
3
Merci
C'est pas toujours evident quand on n'a pas le classeur sous les yeux. J'étais parti sur un UserForm, nous n'étions pas pret de se comprendre. Tu cliques sur réponse accepté à l'endroit de la solution.
A plus tard sur ce forum, j'espère!

@+Le Pivert

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Le Pivert
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bonjour,
Nous avons tous ici bonne vue. Evite donc s'il te plait de nous éblouir en écrivant en gras.
Tu es ici dans la section
Forum > VB.NET et VB 2005

qui n'a absolument rien à voir avec la section Langages dérivés > VBA dont relève ta question.
J'attendrai donc personnellement qu'un administrateur bienveillant passant par là déplace cette discussion.
Dans cette attente, je vais me contenter de te rappeler que VBA/Excel fonctionne avec les objets de Excel.
Un classeur, une feuille, par exemple, sont des objets Excel
ainsi :
toto.titi.range("A1") se réfère à la cellule A1 de la feuille représentée par l'objet titi et appartenant au classeur représenté par toto.
De même :
Workbooks("machin").worksheets("chose").Range("A1") se réfère à la cellule A1 de la feuille nommée "chose" appartenant au classeur ouvert nommé "machin"

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
0
Merci
Tout d'abord merci pour ta réponse, tout de même tu n'a pas a être arrogant.
ab irato tu me saute dessus, avec acrimonie.
oui mon auguste pour te faire plaisir, c'est moi même qui va supprimer ce message, et d'ailleurs mon compte avec.

je refuse de vivre dans un monde de béotien.
Commenter la réponse de macmanan
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
On se relaxe...
Tu dois ouvrir le fichier pour savoir si une de ses cellules est vide ou non.
Si tu utilises Application.ScreenUpdating = False en début de procédure, tu ne verras pas le fichier s'ouvrir et se fermer.
Et n'oublie pas de remettre à True à la fin de la procédure...


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Commenter la réponse de cs_MPi
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Ben ...
Je venais aider en voyant que le discussion avait été déplacée ...
Mais voilà : j'ai lu, du coup, la réaction du demandeur...
Je repars donc, sans un seul mot de plus


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
0
Merci
Merci énorméement pour la réponse.
j'avoue qu'on s'est mal compris peut être, moi je voulais une condition pour ouvrir le fichier.

le bouton va ouvrir le fichier "x", si la cellule "xx" de ce même fichier n'est pas vide, sinon je renvoie le bouton au MsgBox.

pour ucfoutu. merci encore pour ta réponse, pourtant mon premier mot, était je suis nouveau sur ce forum, c'est la première fois d'ailleurs de ma vie que je fais appel sur un forum, et tu me rentre dedans en me corrigeant. " je suis désolé, moi aussi j'ai dis ben hier"
Commenter la réponse de macmanan
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Désolé, mais le rappel à l'ordre était nécessaire. Il en va du bon fonctionnement de ce forum.
Il a été fait de manière que j'estime parfaitement correcte et tu y a vu de l' "arrogance" et de l' "acrimonie"... .
Ta réaction est surprenante et laisse deviner, d'emblée, que tu es du genre à tout "prendre" de cette manière (expérience, quand tu nous tiens ...!) et ne m'encourage pas, bien au contraire, à continuer dans cette discussion.
La réponse que je t'ai déjà donnée est déjà un fil conducteur...
Bonne chance.



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
87
0
Merci
Bonjour,
MPI et UCFOUTU t'avaient mis sur la voie. Tu as simplement oublié de remplir la case vbNo pour fermer le classeur:

Private Sub CommandButton1_Click()
 Application.ScreenUpdating = False
 ActiveWorkbook.FollowHyperlink Address:="chemin Classeur1.xls"
If Range("A1") = 1 Then
'on laisse ouvert
Else
If IsEmpty(Range("A1")) Then
Select Case MsgBox("Pas de Message à Afficher. Voulez-vous Vérifier?", vbYesNo + vbQuestion, "Information")
Case vbYes
ActiveWorkbook.FollowHyperlink Address:="chemin Classeur1.xls"
Case vbNo
ActiveWorkbook.Close
End Select
End If
End If
 Application.ScreenUpdating = True
End Sub



@+Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bonjour, Le Pivert,
Juste pour toi : relis === >>
Seulement la case G1 ici correspond a la feuille sur laquelle je travaille , par contre moi je voudrais la condition sur la cellule A1 du classeur a ouvrir

Amitiés à toi.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
87
0
Merci
Bonjour UCFOUTU,
j'avais très bien compris, cela fonctionne comme cela.
On peut améliorer le code comme ceci:

Private Sub CommandButton1_Click()
 Application.ScreenUpdating = False
 ActiveWorkbook.FollowHyperlink Address:="chemin Classeur1.xls"
If Range("A1") = 1 Then 'classeur nouvellement ouvert
'on laisse ouvert
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Else
If IsEmpty(Range("A1")) Then
Select Case MsgBox("Pas de Message à Afficher. Voulez-vous Vérifier?", vbYesNo + vbQuestion, "Information")
Case vbYes
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Case vbNo
ActiveWorkbook.Close
End Select
End If
End If
 Application.ScreenUpdating = True
End Sub




@+ Le Pivert
Commenter la réponse de cs_Le Pivert
0
Merci
Bonjour à tous, et merci énorméement

je ne sais pas si c'est moi qui me trempe, ou je me suis mal fait comprendre.

car la solution la, est toujours pour la feuille sur laquelle je traville.
je reexplique mon problème.

je travaille sur le classeur TR.XLS a plusieurs onglet.
Onglet 1 de TR.XLS est fonction d'un autre classeur Fn.xls

une fois rendu sur l'onglet 1 je voudrais consulter mes données sur Fn.Xls, alors je clique sur mon bouton qui renvoi a lui, et il s'ouvre, avec ma condition qui est inscrite sur l'onglet 1.....

moi je voudrais que la condition soit sur la cellule A1 du classeur Fn.Xls.
si A1 = 1 ce classeur va s'ouvrir.

sinon je renvoie au MsgBox qui donne le choix de verifier ou pas.

j'avoue que je suis perdu, j'ai reussi une fois, mais je ne sais même pas comment j'ai fait, du coup j'arrive pas a reproduire.
Commenter la réponse de macmanan
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
87
0
Merci
Cela fait 2 conditions. Il faut qu'il y ai "1" en G1 de ton classeur ouvert pour ouvrir un nouveau classeur avec lien hypertexte et vérifier s'il y a "1" dans la cellule A1 de ce nouveau classeur ouvert.
Voici le code si j'ai bien tout compris:

Private Sub CommandButton1_Click()
 Application.ScreenUpdating = False
 If Range("G1") = 1 Then 'classeur ouvert
ActiveWorkbook.FollowHyperlink Address:="Chemin du Classeur.xls"
Else
If Range("A1") = 1 Then 'classeur nouvellement ouvert
'on laisse ouvert
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Else
If IsEmpty(Range("A1")) Then
Select Case MsgBox("Pas de Message à Afficher. Voulez-vous Vérifier?", vbYesNo + vbQuestion, "Information")
Case vbYes
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Case vbNo
ActiveWorkbook.Close 'classeur nouvellement ouvert
End Select
End If
End If
End If
 Application.ScreenUpdating = True
End Sub


@+Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
87
0
Merci
Erreur de ma part voici donc le nouveau code:

Private Sub CommandButton1_Click()
 Application.ScreenUpdating = False
 If Range("G1") = 1 Then 'classeur ouvert
ActiveWorkbook.FollowHyperlink Address:="chemin du Classeur.xls"
If Range("A1") = 1 Then 'classeur nouvellement ouvert
'on laisse ouvert
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Else
If IsEmpty(Range("A1")) Then
Select Case MsgBox("Pas de Message à Afficher. Voulez-vous Vérifier?", vbYesNo + vbQuestion, "Information")
Case vbYes
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Case vbNo
ActiveWorkbook.Close 'classeur nouvellement ouvert
End Select
End If
End If
Else
Exit Sub
End If
 Application.ScreenUpdating = True
End Sub


Le Pivert
Commenter la réponse de cs_Le Pivert
0
Merci
Bonjour Le Pivert, grand merci pour toutes tes réponses.

exactement on s'est mal compris, je voudrais une seule condition :
qui est la case A1 du classeur a ouvrir = 1 "c'est à dire A1=1"

la condition G1 n'est pas nécessaire, en fait c'est moi qui a crée cette condition "G1" en attendant, car j'arrivait pas à faire la condition "A1"

j'espère que je me suis fait comprendre.

encore MERCI
Commenter la réponse de macmanan
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
87
0
Merci
J'ai fait l'essai avec 1 classeur, ce code fonctionne très bien chez moi:


Private Sub CommandButton1_Click()
 Application.ScreenUpdating = False
 ActiveWorkbook.FollowHyperlink Address:="chemin du Classeur.xls"
If Range("A1") = 1 Then 'classeur nouvellement ouvert
'on laisse ouvert
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Else
If IsEmpty(Range("A1")) Then
Select Case MsgBox("Pas de Message à Afficher. Voulez-vous Vérifier?", vbYesNo + vbQuestion, "Information")
Case vbYes
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Case vbNo
ActiveWorkbook.Close 'classeur nouvellement ouvert
End Select
End If
End If
 Application.ScreenUpdating = True
End Sub


@+Le Pivert
Commenter la réponse de cs_Le Pivert
0
Merci
Avec mon classeur ca ne marche pas, en fait le code ne tient pas compte de la valeur de la cellule "A1"
lorsque je clique sur le bouton il ouvre directement le fichier ActiveWorkbook.FollowHyperlink Address:="chemin du Classeur.xls"

A moins que j'ai zappé un truc.
tu voulait dire quoi exactement par :
'classeur nouvellement ouvert
'on laisse ouvert
ActiveWorkbook.Activate 'classeur nouvellement ouvert

c'est peut être la que ca marche pas pour moi.
Merci, au plaisir de te lire.
Commenter la réponse de macmanan
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
87
0
Merci
Je cherche à comprendre:
J'ai fait mes essais avec un button dans un UserForm et cela fonctionne.
J'ai mis un button sur la feuille et le même code ne fonctionne pas.
Chercher l'erreur?
J'avoue que je ne comprends pas
Quelque chose m'échappe.
Commenter la réponse de cs_Le Pivert
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
87
0
Merci
Nos mails se sont croisés


Le Pivert
Commenter la réponse de cs_Le Pivert
0
Merci
Oui c'est ce que je vois.
alors ca marche pas, avec un bouton, je viens de passer plusieurs heures dessus.
et le hic j'ai un classeur d'une centaine de feuille, avec des bouton chacun sa fonction dependant d'un autre classeur.

honnettement j'arrive pas, je sais qu'il doit y avoir un truc qui fonctionne pas.

zzzzzzzzzzzzzzzzzzzzzzzzzzz
Commenter la réponse de macmanan
Messages postés
6271
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2019
87
0
Merci
J'ai trouvé!
Il faut mettre le code dans un module(insertion module) comme ceci:

Public Sub openclasseur_1()
Application.ScreenUpdating = False
ActiveWorkbook.FollowHyperlink Address:="C:\Documents and Settings\Propriétaire\Mes documents\Classeur1.xls"
If Range("A1") = "1" Then 'classeur nouvellement ouvert
'on laisse ouvert
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Else
If IsEmpty(Range("A1")) Then
Select Case MsgBox("Pas de Message à Afficher. Voulez-vous Vérifier?", vbYesNo + vbQuestion, "Information")
Case vbYes
ActiveWorkbook.Activate 'classeur nouvellement ouvert
Case vbNo
ActiveWorkbook.Close 'classeur nouvellement ouvert
End Select
End If
End If
Application.ScreenUpdating = True
End Sub

et pour ouvrir:

Private Sub CommandButton2_Click()
openclasseur_1
End Sub


Le Pivert
Commenter la réponse de cs_Le Pivert