Un private sub dans un sub
Résolu/Fermé
hcetat
Messages postés
8
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
14 mai 2020
-
26 févr. 2016 à 11:18
hcetat Messages postés 8 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 14 mai 2020 - 26 févr. 2016 à 15:15
hcetat Messages postés 8 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 14 mai 2020 - 26 févr. 2016 à 15:15
A voir également:
- Call private sub vba
- Navigation in private - Guide
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
4 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
26 févr. 2016 à 11:39
26 févr. 2016 à 11:39
Bonjour,
Basé sur la fonction WaitForUserInput de Chip Pearson.
Il te faut :
Dans un module standard le code :
et dans le module de la Feuil1 (pour l'exemple) :
Basé sur la fonction WaitForUserInput de Chip Pearson.
Il te faut :
Dans un module standard le code :
Option Explicit Public Changee As Boolean Sub Test() Dim B As Boolean MsgBox "Vous devez faire votre choix dans la cellule A1 Feuil1" 'ici on attends B = Attente_Utilisateur(Worksheets(1).Range("A1"), 10) 'après l'attente If B = True Then MsgBox "la cellule A1 a changée, elle contient : " & Range("A1").Value Else MsgBox "la cellule n'a pas changé" End If End Sub Public Function Attente_Utilisateur(Cell_Changeante As Range, Duree_Max As Integer) As Boolean Dim Debut As Double Changee = False Debut = Now Do DoEvents If Changee = True Then Attente_Utilisateur = True Exit Function End If Loop While Now - Debut < TimeSerial(0, 0, Duree_Max) Attente_Utilisateur = False End Function
et dans le module de la Feuil1 (pour l'exemple) :
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Changee = True End Sub
hcetat
Messages postés
8
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
14 mai 2020
26 févr. 2016 à 12:58
26 févr. 2016 à 12:58
Merci pour la réponse.
Ma problématique est légèrement différente puisque je dois attendre, indéfiniment s'il le faut, que l'utilisateur fasse sont choix dans la liste ci-dessous:
Une fois que son choix est fait, la macro doit continuer à s'exécuter.
D'après votre article, on peut l'appeler avec une commande comme
mais ma question est : comment faire démarrer automatiquement la suite (call...) lorsque la cellule E1 qui contient le choix est remplie ?
Merci pour votre patience
Henri
Ma problématique est légèrement différente puisque je dois attendre, indéfiniment s'il le faut, que l'utilisateur fasse sont choix dans la liste ci-dessous:
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="BIACCDF ,BIACUSD ,RAWUSD ,TMBCNF ,TMBUSD "
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Vos comptes"
.ErrorTitle = ""
.InputMessage = "Choisissez un compte en cliquant sur la flèche"
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Une fois que son choix est fait, la macro doit continuer à s'exécuter.
D'après votre article, on peut l'appeler avec une commande comme
Call Module1.ListeDesPaiementsSuite
mais ma question est : comment faire démarrer automatiquement la suite (call...) lorsque la cellule E1 qui contient le choix est remplie ?
Merci pour votre patience
Henri
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
26 févr. 2016 à 14:18
26 févr. 2016 à 14:18
C'est très voisin de ce que je proposais.
Dans le module de la Feuil1
Et dans un module standard :
Dans le module de la Feuil1
Private Sub Worksheet_Change(ByVal Target As Range) If Target = Cell_Changeante Then Changee = True End Sub
Et dans un module standard :
Option Explicit Public Changee As Boolean, Cell_Changeante As Range Sub test() Dim B As Boolean Worksheets("Feuil1").Range("E1").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="BIACCDF ,BIACUSD ,RAWUSD ,TMBCNF ,TMBUSD " .IgnoreBlank = True .InCellDropdown = True .InputTitle = "Vos comptes" .ErrorTitle = "" .InputMessage = "Choisissez un compte en cliquant sur la flèche" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Set Cell_Changeante = Worksheets("Feuil1").Range("E1") B = Attente_Utilisateur MsgBox "valeur changée, suite" End Sub Public Function Attente_Utilisateur() As Boolean Dim Debut As Double Changee = False Debut = Now Do DoEvents If Changee = True Then Attente_Utilisateur = True Exit Function End If Loop Attente_Utilisateur = False End Function
hcetat
Messages postés
8
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
14 mai 2020
26 févr. 2016 à 14:33
26 févr. 2016 à 14:33
Merci beaucoup ça commence à sentir l'écurie ! :-)
Je sens effectivement que nous sommes tout proches du jackpot, mais il y a encore un petit détail à régler.
La feuille sur laquelle s'applique le traitement est ouverte au début par
Ce qui fait que je ne peux pas placer d'avance ce qui suit dans la feuil1
Comment faire alors ?
Encore merci pour votre réactivité.
Je sens effectivement que nous sommes tout proches du jackpot, mais il y a encore un petit détail à régler.
La feuille sur laquelle s'applique le traitement est ouverte au début par
On Error Resume Next
ChDrive "X:"
If Error Then
ChDrive "C:"
ChDir "C:\WinBooks\DataExcel"
Else
ChDir "X:\DataExcel"
End If
nom = Application.GetOpenFilename("Nom fichier,*.XLS")
If nom <> False Then
Workbooks.Open nom
Else
Exit Sub
End If
On Error GoTo 0
Ce qui fait que je ne peux pas placer d'avance ce qui suit dans la feuil1
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Cell_Changeante Then Changee = True
End Sub
Comment faire alors ?
Encore merci pour votre réactivité.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 26/02/2016 à 14:44
Modifié par pijaku le 26/02/2016 à 14:44
Option Explicit Public Cell_Changeante As Range Sub test() Dim B As Boolean, Valeur_Initiale As String Worksheets("Feuil1").Range("E1").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="BIACCDF ,BIACUSD ,RAWUSD ,TMBCNF ,TMBUSD " .IgnoreBlank = True .InCellDropdown = True .InputTitle = "Vos comptes" .ErrorTitle = "" .InputMessage = "Choisissez un compte en cliquant sur la flèche" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Set Cell_Changeante = Worksheets("Feuil1").Range("E1") Valeur_Initiale = CStr(Cell_Changeante.Value) B = Attente_Utilisateur(Valeur_Initiale) MsgBox "valeur changée, suite" End Sub Public Function Attente_Utilisateur(Valeur As String) As Boolean Do DoEvents If Cell_Changeante.Value <> Valeur Then Attente_Utilisateur = True Exit Function End If Loop Attente_Utilisateur = False End Function
hcetat
Messages postés
8
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
14 mai 2020
26 févr. 2016 à 15:15
26 févr. 2016 à 15:15
Alléluia ! Ça marche !
J'ai remplacé par MsgBox "valeur changée, suite" par le Call et bingo !
Félicitations et merci !
Je devrais absolument consacrer quelques jours à suivre des cours, je pense que j'y gagnerais énormément !
Encore merci !
Henri
J'ai remplacé par MsgBox "valeur changée, suite" par le Call et bingo !
Félicitations et merci !
Je devrais absolument consacrer quelques jours à suivre des cours, je pense que j'y gagnerais énormément !
Encore merci !
Henri