comment réactiver automatiquement la feuille en cours après affichage d'un userform

Le
TILLOUX
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un listbox.Le
vbmodeless permet à la procédure de continuer son exécution donc de faire
le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille en
cours ne l'a plus. Par coséquent, je ne peux rien saisir en direct dans la
cells(3,2). Il faut aller cliquer dedans pour que la feuille redevienne
active.

Comment redonner la main à la feuille après le Tableau.show par une
instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne marche.
Le userform reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
IMER09
Le #18401601
Si j'ai bien compris tu voudrais pouvoir intervenir sur ta feuille tout en
ayant ton UF ouvert
Si c'est le cas as tu regardé ShowModal (ds proprieté du UF) le mettre a
"False"

Rémi

"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un
listbox.Le vbmodeless permet à la procédure de continuer son exécution
donc de faire le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille en
cours ne l'a plus. Par coséquent, je ne peux rien saisir en direct dans la
cells(3,2). Il faut aller cliquer dedans pour que la feuille redevienne
active.

Comment redonner la main à la feuille après le Tableau.show par une
instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne
marche. Le userform reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.



michdenis
Le #18401571
Voici une façon de faire :

Dans le haut d'un module standard, tu déclares
L'API suivant :
'----------------------------------
Private Declare Function BringWindowToTop _
Lib "user32" (ByVal hwnd As Long) As Long
'----------------------------------

Ta procédure d'appel devrait ressembler à ceci :
'-------------------------------
Sub test()
UserForm1.Show 0
Activer_Application_Excel
Range("A1").Select
End Sub
'-------------------------------

Un petit bout de code qui va rendre active la feuille.(excel)
'---------------------------------
Sub Activer_Application_Excel()
Dim Ret, myhnd As Long
myhnd = Application.hwnd
BringWindowToTop myhnd
End Sub
'---------------------------------





"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un listbox.Le
vbmodeless permet à la procédure de continuer son exécution donc de faire
le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille en
cours ne l'a plus. Par coséquent, je ne peux rien saisir en direct dans la
cells(3,2). Il faut aller cliquer dedans pour que la feuille redevienne
active.

Comment redonner la main à la feuille après le Tableau.show par une
instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne marche.
Le userform reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.
garnote
Le #18401561
Bonjour,

Voudrais bien savoir aussi ;-)

Viens de constater que si la feuille active contient une forme nommée
«rectangle», alors on obtient ce que tu veux avec cette macro :

Sub Piste()
Tableau.Show vbModeless
ActiveSheet.Shapes("rectangle").Select
Cells(3, 2).Select
End Sub

Il y a sûrement quelque chose de plus intelligent à faire !

Serge










"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un listbox.Le vbmodeless permet à la procédure de continuer
son exécution donc de faire le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille en cours ne l'a plus. Par coséquent, je ne peux rien
saisir en direct dans la cells(3,2). Il faut aller cliquer dedans pour que la feuille redevienne active.

Comment redonner la main à la feuille après le Tableau.show par une instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne marche. Le userform reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.



garnote
Le #18401931
Et un peu de bricolage :

Sub Truc()
'...
'...
Set forme = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 10, 10, 10, 10)
Tableau.Show vbModeless
forme.Select
forme.Delete
Cells(3, 2).Select
End Sub


Serge


"garnote"
Bonjour,

Voudrais bien savoir aussi ;-)

Viens de constater que si la feuille active contient une forme nommée
«rectangle», alors on obtient ce que tu veux avec cette macro :

Sub Piste()
Tableau.Show vbModeless
ActiveSheet.Shapes("rectangle").Select
Cells(3, 2).Select
End Sub

Il y a sûrement quelque chose de plus intelligent à faire !

Serge










"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un listbox.Le vbmodeless permet à la procédure de continuer
son exécution donc de faire le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille en cours ne l'a plus. Par coséquent, je ne peux
rien saisir en direct dans la cells(3,2). Il faut aller cliquer dedans pour que la feuille redevienne active.

Comment redonner la main à la feuille après le Tableau.show par une instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne marche. Le userform reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.







michdenis
Le #18402321
tu as bien raison, pourquoi faire long, lorsque l'on peut faire court

Sub Truc()
With ActiveSheet.Shapes
With .AddShape(msoShapeRectangle, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete
End With
End With
Range("B3").Select
End Sub

;-))



"garnote"
Et un peu de bricolage :

Sub Truc()
'...
'...
Set forme = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 10, 10, 10, 10)
Tableau.Show vbModeless
forme.Select
forme.Delete
Cells(3, 2).Select
End Sub


Serge


"garnote" O0T%
Bonjour,

Voudrais bien savoir aussi ;-)

Viens de constater que si la feuille active contient une forme nommée
«rectangle», alors on obtient ce que tu veux avec cette macro :

Sub Piste()
Tableau.Show vbModeless
ActiveSheet.Shapes("rectangle").Select
Cells(3, 2).Select
End Sub

Il y a sûrement quelque chose de plus intelligent à faire !

Serge










"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un listbox.Le vbmodeless
permet à la procédure de continuer
son exécution donc de faire le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille en cours ne l'a
plus. Par coséquent, je ne peux
rien saisir en direct dans la cells(3,2). Il faut aller cliquer dedans pour que la
feuille redevienne active.

Comment redonner la main à la feuille après le Tableau.show par une instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne marche. Le userform
reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.







garnote
Le #18402431
Et tant qu'à faire :

Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule()
With ActiveSheet.Shapes.AddShape(msoShapeSun, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete: [A1].Select
End With
End Sub

;-)


"michdenis"
tu as bien raison, pourquoi faire long, lorsque l'on peut faire court

Sub Truc()
With ActiveSheet.Shapes
With .AddShape(msoShapeRectangle, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete
End With
End With
Range("B3").Select
End Sub

;-))



"garnote"
Et un peu de bricolage :

Sub Truc()
'...
'...
Set forme = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 10, 10, 10, 10)
Tableau.Show vbModeless
forme.Select
forme.Delete
Cells(3, 2).Select
End Sub


Serge


"garnote" O0T%
Bonjour,

Voudrais bien savoir aussi ;-)

Viens de constater que si la feuille active contient une forme nommée
«rectangle», alors on obtient ce que tu veux avec cette macro :

Sub Piste()
Tableau.Show vbModeless
ActiveSheet.Shapes("rectangle").Select
Cells(3, 2).Select
End Sub

Il y a sûrement quelque chose de plus intelligent à faire !

Serge










"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un listbox.Le vbmodeless
permet à la procédure de continuer
son exécution donc de faire le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille en cours ne l'a
plus. Par coséquent, je ne peux
rien saisir en direct dans la cells(3,2). Il faut aller cliquer dedans pour que la
feuille redevienne active.

Comment redonner la main à la feuille après le Tableau.show par une instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne marche. Le userform
reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.










michdenis
Le #18402721
Tu peux mettre presque tout sur la même ligne :

Cette sub à 2 lignes : mais là, cela ne fonctionne plus
Trouve un autre truc ! ;-))

Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule(): With
ActiveSheet.Shapes.AddShape(msoShapeSun, 10, 10, 10, 10): UserForm1.Show 0: .Select:
.Delete: [A1].Select: End With
End Sub




"garnote" eolM2K#
Et tant qu'à faire :

Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule()
With ActiveSheet.Shapes.AddShape(msoShapeSun, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete: [A1].Select
End With
End Sub

;-)


"michdenis"
tu as bien raison, pourquoi faire long, lorsque l'on peut faire court

Sub Truc()
With ActiveSheet.Shapes
With .AddShape(msoShapeRectangle, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete
End With
End With
Range("B3").Select
End Sub

;-))



"garnote"
Et un peu de bricolage :

Sub Truc()
'...
'...
Set forme = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 10, 10, 10, 10)
Tableau.Show vbModeless
forme.Select
forme.Delete
Cells(3, 2).Select
End Sub


Serge


"garnote" O0T%
Bonjour,

Voudrais bien savoir aussi ;-)

Viens de constater que si la feuille active contient une forme nommée
«rectangle», alors on obtient ce que tu veux avec cette macro :

Sub Piste()
Tableau.Show vbModeless
ActiveSheet.Shapes("rectangle").Select
Cells(3, 2).Select
End Sub

Il y a sûrement quelque chose de plus intelligent à faire !

Serge










"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un listbox.Le
vbmodeless
permet à la procédure de continuer
son exécution donc de faire le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille en cours ne l'a
plus. Par coséquent, je ne peux
rien saisir en direct dans la cells(3,2). Il faut aller cliquer dedans pour que la
feuille redevienne active.

Comment redonner la main à la feuille après le Tableau.show par une instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne marche. Le
userform
reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.










TILLOUX
Le #18410761
La fonction Activer_Application_Excel marche très bien.

En revanche, le coup de la forme qu'on affiche, puis qu'on sélectionne et
efface ne marche pas chez moi.
C'est curieux car ça marche dans une exécution pas à pas (F8) mais pas en
exécution normale. Le Userform garde la main.

Si quelqu'un a une idée, elle sera la bienvenue.

Merci à tous

Tilloux

"michdenis"
Tu peux mettre presque tout sur la même ligne :

Cette sub à 2 lignes : mais là, cela ne fonctionne plus
Trouve un autre truc ! ;-))

Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule(): With
ActiveSheet.Shapes.AddShape(msoShapeSun, 10, 10, 10, 10): UserForm1.Show
0: .Select:
.Delete: [A1].Select: End With
End Sub




"garnote" discussion :
eolM2K#
Et tant qu'à faire :

Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule()
With ActiveSheet.Shapes.AddShape(msoShapeSun, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete: [A1].Select
End With
End Sub

;-)


"michdenis"
tu as bien raison, pourquoi faire long, lorsque l'on peut faire court

Sub Truc()
With ActiveSheet.Shapes
With .AddShape(msoShapeRectangle, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete
End With
End With
Range("B3").Select
End Sub

;-))



"garnote" de discussion :

Et un peu de bricolage :

Sub Truc()
'...
'...
Set forme = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 10, 10, 10, 10)
Tableau.Show vbModeless
forme.Select
forme.Delete
Cells(3, 2).Select
End Sub


Serge


"garnote" O0T%
Bonjour,

Voudrais bien savoir aussi ;-)

Viens de constater que si la feuille active contient une forme nommée
«rectangle», alors on obtient ce que tu veux avec cette macro :

Sub Piste()
Tableau.Show vbModeless
ActiveSheet.Shapes("rectangle").Select
Cells(3, 2).Select
End Sub

Il y a sûrement quelque chose de plus intelligent à faire !

Serge










"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un
listbox.Le
vbmodeless
permet à la procédure de continuer
son exécution donc de faire le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille
en cours ne l'a
plus. Par coséquent, je ne peux
rien saisir en direct dans la cells(3,2). Il faut aller cliquer dedans
pour que la
feuille redevienne active.

Comment redonner la main à la feuille après le Tableau.show par une
instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne
marche. Le
userform
reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.













michdenis
Le #18410931
| C'est curieux car ça marche dans une exécution pas à pas (F8) mais pas en
| exécution normale. Le Userform garde la main.

Cette procédure fonctionne sous Excel 2007,
mais ne donne pas le résultat escompté
sous Excel 2003, après test. Pour ce qui
est des autres versions d'excel je n'en sais rien !

Procédure testée :
Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule()
With ActiveSheet.Shapes.AddShape(msoShapeSun, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete: [A1].Select
End With
End Sub




"TILLOUX" #
La fonction Activer_Application_Excel marche très bien.

En revanche, le coup de la forme qu'on affiche, puis qu'on sélectionne et
efface ne marche pas chez moi.
C'est curieux car ça marche dans une exécution pas à pas (F8) mais pas en
exécution normale. Le Userform garde la main.

Si quelqu'un a une idée, elle sera la bienvenue.

Merci à tous

Tilloux

"michdenis"
Tu peux mettre presque tout sur la même ligne :

Cette sub à 2 lignes : mais là, cela ne fonctionne plus
Trouve un autre truc ! ;-))

Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule(): With
ActiveSheet.Shapes.AddShape(msoShapeSun, 10, 10, 10, 10): UserForm1.Show
0: .Select:
.Delete: [A1].Select: End With
End Sub




"garnote" discussion :
eolM2K#
Et tant qu'à faire :

Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule()
With ActiveSheet.Shapes.AddShape(msoShapeSun, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete: [A1].Select
End With
End Sub

;-)


"michdenis"
tu as bien raison, pourquoi faire long, lorsque l'on peut faire court

Sub Truc()
With ActiveSheet.Shapes
With .AddShape(msoShapeRectangle, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete
End With
End With
Range("B3").Select
End Sub

;-))



"garnote" de discussion :

Et un peu de bricolage :

Sub Truc()
'...
'...
Set forme = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 10, 10, 10, 10)
Tableau.Show vbModeless
forme.Select
forme.Delete
Cells(3, 2).Select
End Sub


Serge


"garnote" O0T%
Bonjour,

Voudrais bien savoir aussi ;-)

Viens de constater que si la feuille active contient une forme nommée
«rectangle», alors on obtient ce que tu veux avec cette macro :

Sub Piste()
Tableau.Show vbModeless
ActiveSheet.Shapes("rectangle").Select
Cells(3, 2).Select
End Sub

Il y a sûrement quelque chose de plus intelligent à faire !

Serge










"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un
listbox.Le
vbmodeless
permet à la procédure de continuer
son exécution donc de faire le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille
en cours ne l'a
plus. Par coséquent, je ne peux
rien saisir en direct dans la cells(3,2). Il faut aller cliquer dedans
pour que la
feuille redevienne active.

Comment redonner la main à la feuille après le Tableau.show par une
instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne
marche. Le
userform
reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.













TILLOUX
Le #18412151
Effectivement, j'ai Excel 2003 d'où le non fonctionnement. Mais le problème
est réglé avec ta fonction Activer_application_excel.

Le 7.1, j'ai posté une question relative aux commentaires qui ne passent pas
avec un fichier partagé. Il se peut qu'avec Excel 2007 le problème soit
résolu.

Peux-tu regarder cette question et tester chez toi ?

Merci d'avance.

Tilloux.
"michdenis"
| C'est curieux car ça marche dans une exécution pas à pas (F8) mais pas en
| exécution normale. Le Userform garde la main.

Cette procédure fonctionne sous Excel 2007,
mais ne donne pas le résultat escompté
sous Excel 2003, après test. Pour ce qui
est des autres versions d'excel je n'en sais rien !

Procédure testée :
Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule()
With ActiveSheet.Shapes.AddShape(msoShapeSun, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete: [A1].Select
End With
End Sub




"TILLOUX" discussion :
#
La fonction Activer_Application_Excel marche très bien.

En revanche, le coup de la forme qu'on affiche, puis qu'on sélectionne et
efface ne marche pas chez moi.
C'est curieux car ça marche dans une exécution pas à pas (F8) mais pas en
exécution normale. Le Userform garde la main.

Si quelqu'un a une idée, elle sera la bienvenue.

Merci à tous

Tilloux

"michdenis"
Tu peux mettre presque tout sur la même ligne :

Cette sub à 2 lignes : mais là, cela ne fonctionne plus
Trouve un autre truc ! ;-))

Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule(): With
ActiveSheet.Shapes.AddShape(msoShapeSun, 10, 10, 10, 10): UserForm1.Show
0: .Select:
.Delete: [A1].Select: End With
End Sub




"garnote" de
discussion :
eolM2K#
Et tant qu'à faire :

Sub Affice_UserForm_Et_Permet_Entrée_Directe_Dans_Une_Cellule()
With ActiveSheet.Shapes.AddShape(msoShapeSun, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete: [A1].Select
End With
End Sub

;-)


"michdenis"
tu as bien raison, pourquoi faire long, lorsque l'on peut faire court

Sub Truc()
With ActiveSheet.Shapes
With .AddShape(msoShapeRectangle, 1, 1, 1, 1)
UserForm1.Show 0: .Select: .Delete
End With
End With
Range("B3").Select
End Sub

;-))



"garnote" de discussion :

Et un peu de bricolage :

Sub Truc()
'...
'...
Set forme = ActiveSheet.Shapes.AddShape _
(msoShapeRectangle, 10, 10, 10, 10)
Tableau.Show vbModeless
forme.Select
forme.Delete
Cells(3, 2).Select
End Sub


Serge


"garnote" O0T%
Bonjour,

Voudrais bien savoir aussi ;-)

Viens de constater que si la feuille active contient une forme nommée
«rectangle», alors on obtient ce que tu veux avec cette macro :

Sub Piste()
Tableau.Show vbModeless
ActiveSheet.Shapes("rectangle").Select
Cells(3, 2).Select
End Sub

Il y a sûrement quelque chose de plus intelligent à faire !

Serge










"TILLOUX"
Bonjour,

Voici la fin du code d'une procédure VBA que j'ai écrite:
..
..
Tableau.show vbmodeless
cells(3,2).select
end sub

Tableau.show vbmodeless ouvre le userform Tableau qui contient un
listbox.Le
vbmodeless
permet à la procédure de continuer
son exécution donc de faire le cells(3,2) .select

En fait le userform garde la min (bandeau allumé) alors que la feuille
en cours ne l'a
plus. Par coséquent, je ne peux
rien saisir en direct dans la cells(3,2). Il faut aller cliquer dedans
pour que la
feuille redevienne active.

Comment redonner la main à la feuille après le Tableau.show par une
instruction ?

J'ai essayé Activesheet.select, thisworkbook.activate mais rien ne
marche. Le
userform
reste actif.

Quelqu'un a-t-il une idée ?

Merci d'avance.
















Publicité
Poster une réponse
Anonyme