[RESOLU]Afficher mon UF uniquement quand je suis dans le bon classeur Excel

alex53

XLDnaute Junior
Bonjour le forum,

J'ai un userform qui fonctionne comme je le souhaite (au passage merci au forum pour votre aide). Cet UF me permet de rentrer des donnees de maniere ordonnee dans un classeur excel
J'ai cependant un petit souci: Pour remplir mon UF, je suis amene a ouvrir d'autres classeur excel. Or, si par inadvertance je valide mon UF alors que je ne suis pas dans le bon classeur excel (=celui ou sont enregistre les donnees), alors j'ai un message d'erreur qui s'affiche et je dois recommencer toute la saisie de mon UF.

Par consequent, j'aimerais pouvoir afficher mon UF que lorsque je suis dans le bon classeur. Pouvez vous m'aider?

J'ai 1 question liee a ce sujet:
-ce qui se passe avec mon UF, est-ce le fonctionnement "par defaut" , ou bien est-ce du a mon code?

Merci pour votre aide
Alex53
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Bonjour,

peut être avec un test comme celui-ci :
Code:
If ActiveWorkbook.Name = "monclasseur.xls" Then UserForm1.Show
peut être faire aussi un test sur la feuille active avec le même principe...

bonne journée
@+
 

Gorfael

XLDnaute Barbatruc
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Salut alex53 et le forum
-ce qui se passe avec mon UF, est-ce le fonctionnement "par defaut" , ou bien est-ce du a mon code?
Les deux : Juste une question... c'est quoi ton code ? Personnellement, n'étant ni devin ni télépathe, j'ai du mal à lire ta troisième ligne de la seconde macro ! :D

Si tu ne précise pas le classeur, Excel prend par défaut celui actif.

Il te reste à lui préciser dans quel classeur, dans quelle feuille tu doit mettre tes données : Si tu as une "erreur de classeur", la même chose pourra arriver pour la feuille, même si aujourd'hui tu n'en as qu'une.

Deux solutions à envisager pour le classeur :
- WorkBooks("X")
ou
- ThisWorkbook (si le USF est dans le classeur désiré)
La première fige "définitivement" le nom de ton classeur, la seconde, permet de changer le nom du classeur, ou de copier ton USF dans un autre classeur (dans lequel s'enregistreront les données).

Donc tes macros devront avoir la syntaxe suivante pour un Range("A1")
- ThisWokBook.Sheets(Y).range (A1")
ou
- WorkBooks("X").Sheets("Y").Range ("A1")

Comme vraisemblablement tu n'as pas qu'un range par macro, je conseillerais d'utiliser With... End With
A+
 
Dernière édition:

alex53

XLDnaute Junior
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Bonjour Pierrot, bonjour Gorfael et merci pour vos reponses.

Gorfael,
Ta solution fonctionne, cependant, ce n'est pas exactement ce que je souhaite faire. En effet je souhaite que le USF ne soit plus visible quand je passe sur un autre workbook excel. (Avec ta solution, je peux valider mon USF tout en etant sur un autre classeur excel et sans avoir le message d'erreur, ce qui est en soi deja une bonne nouvelle)

Pierrot,
le probleme avec ce genre de solution est que cela ouvre automatiquement le USF quand je vais sur le workbook en question, ce que je ne souhaite pas.

Si vous avez d'autres idees...
Je mets un exemple simple en PJ.


Merci
 

Fichiers joints

Pierrot93

XLDnaute Barbatruc
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Re,

essaye avec ceci, à placer dans le module "thisworkbook" :
Code:
Private Sub Workbook_Deactivate()
Unload UserForm1
End Sub
 

Misange

XLDnaute Barbatruc
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Bonjour
En complément avec la proposition de Gorfael :
Il te suffit de préciser l'adresse complète des cellules dans lesquelles tu écris. Nul besoin d'activer ou pire encore de sélectionner un classeur pour écrire dedans
with workbooks("monclasseur.xls").sheets("mafeuille")
.cells(1,2) = txtbox1
end with

de la sorte quel que soit le classeur qui est affiché "derrière" ton USF, ça remplira le bon.
 

alex53

XLDnaute Junior
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Re-
Bonjour Misange,

Pierrot,
ok, mais ca ne fontionne pas jusqu au bout. Si je vais sur un autre classeur Excel, alors grace a ton code le USF n'est plus visible. Mais si je reviens sur mon classeur ou j enregistre l'information, alors le USF est ferme et il faut tout remplir a nouveau. C'est comme ci le Hide fonctionnait comme un unload

Misange,
Merci pour ta reponse, mais je souhaite plus precisement a cacher le USF quand je ne suis pas sur le bon classeur.

Alex53
 

Pierrot93

XLDnaute Barbatruc
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Re,
C'est comme ci le Hide fonctionnait comme un unload
bah en l'état c'est un 'unloa" mais tu peux utiliser un "hide"
Code:
Private Sub Workbook_Deactivate()
UserForm1.Hide
End Sub
et pour l'afficher à la réactivation du classeur :
Code:
Private Sub Workbook_Activate()
UserForm1.Show
End Sub
 

alex53

XLDnaute Junior
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Merci Pierrot,

En fait j 'avais deja essaye ton code, mais il y a un petit souci :
-Supposons que j'ai 2 classeurs ouverts, j'ouvre le USF dans mon classeur 1 et je rempli la case prenom. Ensuite je fais un tour dans mon classeur 2, puis revient dans mon classeur 1: alors je suis bloque=je ne peux plus aller dans mon classeur 2
-De plus le USF s'ouvre automatiquement a l'ouverture du classeur, ce que je ne souhaite pas...

Alex53
 

Pierrot93

XLDnaute Barbatruc
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Re,

Ensuite je fais un tour dans mon classeur 2, puis revient dans mon classeur 1: alors je suis bloque=je ne peux plus aller dans mon classeur 2
bah, je comprends pas trop....
 

Pierrot93

XLDnaute Barbatruc
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Re,

pour le 2ème point :
-De plus le USF s'ouvre automatiquement a l'ouverture du classeur, ce que je ne souhaite pas...
modifie comme suit :
dans un module standard :
Code:
Public b As Boolean
dans le module "thisworkbook" :
Code:
Private Sub Workbook_Deactivate()
UserForm1.Hide
b = True
End Sub
Private Sub Workbook_Activate()
If b Then UserForm1.Show
End Sub
 

alex53

XLDnaute Junior
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Merci pour la solution au 2 eme probleme.

Pour le 1er probleme, je me re-explique:
Si j ai plusieurs classeur excel ouvert (y compris celui avec le USF), alors si j'ouvre le USF et que ensuite je navigue entre les classeurs excel, puis je reviens a mon classeur qui possede le USF alors je ne peux plus changer de classeur excel (=plus possible de naviguer entre les classeurs)

J espere que c est plus clair
 

Fichiers joints

Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Re,

Aarf j'ai compris le 1er point, il faut que l'usf soit toujours non modal :
Code:
Private Sub Workbook_Activate()
If b Then UserForm1.Show 0
End Sub
Edition : regarde également le post 11, vient en complément....
 

alex53

XLDnaute Junior
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Bonjour,
Il semblerait que j'ai parle un peu trop vite. Il reste un petit bug que je n'arrive pas a resoudre.
Si j'ai 2 fichiers excel ouvert (dont celui avec la macro), alors quand je passe d'un fichier excel lambda vers le fichier excel avec la macro, alors le USF s'ouvre automatiquement....
Une idee?

Ci-joint le fichier exemple

Merci
Alex53
 

Fichiers joints

alex53

XLDnaute Junior
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Merci Beaucoup

Bon apres-midi
 

Misange

XLDnaute Barbatruc
Re : Afficher mon UF uniquement quand je suis dans le bon classeur Excel

Si votre problème est résolu, modifiez le titre de votre question dans le premier message en ajoutant [Résolu]. Merci !
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas