Mise à jour données userform [Résolu]

Messages postés
3
Date d'inscription
samedi 21 avril 2012
Statut
Membre
Dernière intervention
6 mai 2012
- - Dernière réponse : montedobispo
Messages postés
3
Date d'inscription
samedi 21 avril 2012
Statut
Membre
Dernière intervention
6 mai 2012
- 6 mai 2012 à 19:47
bonjour,

je vous remercie par avance de l'aide que vous pourrez m'apporter.

j'ai créé une feuille L 97 pour la gestion de diverses procédures. Elle permet notamment d'alerter les utilisateurs des dates limites pour effectuer une opération particulière. Les informations sont récupérées dans différents USF (menu principal, consultation, alertes etc...).

Lors du lancement, c'est l'USF (frmAlertes) qui s'affiche en premier, puisque le but est d'apporter une information immédiate sur les échéances à venir.

J'ai un pb à ce niveau: le contenu des listbox n'est pas actualisé. Ainsi, en J+1, l'USF reprend les données de J.

Or, lorsque je lance la même procédure (code identique) par un bouton du menu principal (Alertes), les données immédiatement actualisées.

Avez-vous quelques pistes ? Je peux bien entendu vous envoyer la copie du code.

Merci de votre aide
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
3
Date d'inscription
samedi 21 avril 2012
Statut
Membre
Dernière intervention
6 mai 2012
3
Merci
Merci pour ces pistes. Je t'apporte des précisions complémentaires.

Pour l'ouverture, module avec le code suivant:

Sub auto_open()
frmAlertes.Show
Application.ScreenUpdating = False
End Sub

Dans une feuille (SIE) sont effectués différents tris qui alimentent ensuite deux autres feuilles PROV et DEF. Après, ces deux feuilles sont récupéréees dans deux listbox (LstProv et LstDef) de l'USF (frmAlertes).

Le code (dans frmAlertes) est le suivant:

'Début
Private Sub UserForm_Initialize()

'Tris pour les alertes

Application.ScreenUpdating = False 'Pas d'affichage de la feuille lors du lancement
Me.Repaint 'Initilisation de l'affichage

'On affiche la feuille PROV pour la vider des données précédentes

LstProv.Clear 'Init liste Prov

Worksheets("Prov").Visible = True
Worksheets("Prov").Select
Columns("A:K").Select
Selection.Delete Shift:=xlToLeft
Worksheets("Prov").Range("A1").Select
'Et aussi Def

LstDef.Clear 'Init liste Def

Worksheets("Def").Visible = True
Worksheets("Def").Select
Columns("A:N").Select
Selection.Delete Shift:=xlToLeft
Worksheets("Def").Range("A1").Select

'Et on filtre la feuille SIE pour Prov

Worksheets("sie").Activate

Worksheets("sie").Range("J1").Select
Selection.AutoFilter
Worksheets("sie").Range("A1").Select
Selection.AutoFilter Field:=10, Criteria1:="DECLARER PROVISIONNELLE" 'Field =n° de colonne pour le filtre
Worksheets("sie").Range("J:Y,AB:AE").Select
Selection.EntireColumn.Hidden = True
Worksheets("sie").Range("A1").Select
Selection.CurrentRegion.Select
Application.CutCopyMode = False
Selection.Copy

'Puis on colle la sélection dans la feuille PROV

Worksheets("Prov").Select
Worksheets("Prov").Range("A1").Select
ActiveSheet.Paste
Columns("A:K").Select
Selection.Columns.AutoFit
Worksheets("Prov").Range("A1").Select

Selection.Columns.AutoFit 'Ajustement automatique de la taille des colonnes

'Sauf les suivantes qui sont précisées pour prov

Columns("A:A").ColumnWidth = 30
Columns("B:B").ColumnWidth = 3
Columns("D:D").ColumnWidth = 11
Columns("E:E").ColumnWidth = 6
Columns("F:H").ColumnWidth = 10
Columns("I:I").ColumnWidth = 4
Columns("J:K").ColumnWidth = 6

Worksheets("Prov").Range("A2").Select

'Et on trie nombre de jours limite par ordre croissant

Worksheets("Prov").Range("I2").Select
Selection.Sort Key1:=Range("I2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Worksheets("Prov").Range("I2").Select

' On paramètre le format de la DATE PROV en JJ/MM/AAAA

Columns("H:H").Select
Selection.NumberFormat = "dd/mm/yyyy"
Worksheets("Prov").Range("A2").Select

'Et on supprime le filtre pour Prov

Worksheets("sie").Activate
Cells.Select
Selection.EntireColumn.Hidden = False
Selection.AutoFilter
Worksheets("sie").Range("A1").Select

'On fait la même opération pour Def

Worksheets("sie").Activate

Worksheets("sie").Range("P1").Select
Selection.AutoFilter
Worksheets("sie").Range("A1").Select
Selection.AutoFilter Field:=16, Criteria1:="DECLARER DEFINITIVE OU SAISIR 0 SI NEANT" 'Field= n° de colonne pour le filtre
Worksheets("sie").Range("H:J,P:Y,AB:AE").Select
Selection.EntireColumn.Hidden = True
Worksheets("sie").Range("A1").Select
Selection.CurrentRegion.Select
Application.CutCopyMode = False
Selection.Copy

'Puis on colle la sélection dans la feuille DEF

Worksheets("Def").Select
Worksheets("Def").Range("A1").Select
ActiveSheet.Paste
Columns("A:N").Select
Selection.Columns.AutoFit
Worksheets("Def").Range("A1").Select

'On ajuste les colonnes du tableau Def

Columns("A:A").ColumnWidth = 30
Columns("B:B").ColumnWidth = 3
Columns("D:D").ColumnWidth = 11
Columns("E:E").ColumnWidth = 6
Columns("F:K").ColumnWidth = 10
Columns("L:L").ColumnWidth = 4
Columns("M:N").ColumnWidth = 6

Worksheets("Def").Range("A2").Select

'Puis on trie nombre de jours par ordre croissant

Worksheets("Def").Range("L2").Select
Selection.Sort Key1:=Range("L2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Worksheets("Def").Range("L2").Select

' On paramètre le format de la DATE DEF en JJ/MM/AAAA

Columns("K:K").Select
Selection.NumberFormat = "dd/mm/yyyy"
Worksheets("Def").Range("A2").Select

'On supprime les filtres de la feuille SIE

Worksheets("sie").Activate
Cells.Select
Selection.EntireColumn.Hidden = False
Selection.AutoFilter
Worksheets("sie").Range("A1").Select

'Et on fait une recopie des formules alerte Prov et Def

'Colonne Prov

Worksheets("sie").Range("H2:J2").Select
Selection.AutoFill Destination:=Range("H2:J1000")

'Sheets("sie").Range("H2:J1000").Select

Worksheets("sie").Range("A2").Select

'Colonne Def

Worksheets("sie").Range("N2:P2").Select
Selection.AutoFill Destination:=Range("N2:P1000")

'Sheets("sie").Range("N2:P1000").Select

Worksheets("sie").Range("A2").Select

'Comptage des éléments - lignes 2 à 1000

With Application.WorksheetFunction

Worksheets("sie").Range("AC1") = Application.WorksheetFunction.CountIf(Range("J2:J1000"), "=DECLARER PROVISIONNELLE")
Worksheets("sie").Range("AD1") = Application.WorksheetFunction.CountIf(Range("P2:P1000"), "=DECLARER DEFINITIVE OU SAISIR 0 SI NEANT")

End With

'Alertes provisionnelles

'On récupère les infos sur la feuille Prov

LstProv.RowSource = ("Prov!A2:K50") '!!!! Depuis le titre jusqu'à ligne 50

With Worksheets("Prov")
'
'For Int_Indice = 0 To Int_MaxLigneProv 'il faut limiter la recherche au nombre de lignes du tableau

For Each c In Worksheets("Prov").Range("i2")

If c.Value < 15 Then 'rouge

LblProv.BackColor = &HFF&
LblProv.ForeColor = &HFFFFFF
NbProv.BackColor = &HFF&
NbProv.ForeColor = &HFFFFFF

'Envoi d'une alerte E-MAIL - à venir
'
End If

If c.Value >= 15 And c.Value <= 30 Then 'orange

LblProv.BackColor = &H80FF&
LblProv.ForeColor = &HFFFFFF
NbProv.BackColor = &H80FF&
NbProv.ForeColor = &HFFFFFF

End If

If c.Value > 30 Or c.Value = "" Then 'vert

LblProv.BackColor = &H8000&
LblProv.ForeColor = &HFFFFFF
NbProv.BackColor = &H8000&
NbProv.ForeColor = &HFFFFFF

End If

Next c

'Next Int_Indice

End With

'Alertes définitives

'On récupère les infos sur la feuille Def

LstDef.RowSource = ("Def!A2:N50") '!!!! Depuis le titre jusqu'à ligne 50

With Worksheets("Def")
'
'For Int_Indice = 0 To Int_MaxLigneDef

For Each c In Worksheets("Def").Range("L2")

If c.Value < 60 Then

LblDef.BackColor = &HFF&
LblDef.ForeColor = &HFFFFFF
NbDef.BackColor = &HFF&
NbDef.ForeColor = &HFFFFFF

'Envoi d'une alerte E-MAIL - INACTIF
'
End If

If c.Value >= 60 And c.Value <= 150 Then

LblDef.BackColor = &H80FF&
LblDef.ForeColor = &HFFFFFF
NbDef.BackColor = &H80FF&
NbDef.ForeColor = &HFFFFFF

End If

If c.Value > 150 Or c.Value = "" Then

LblDef.BackColor = &H8000&
LblDef.ForeColor = &HFFFFFF
NbDef.BackColor = &H8000&
NbDef.ForeColor = &HFFFFFF

End If

Next c

'Next Int_Indice

End With

Application.ScreenUpdating = True

End Sub
'Fin

L'autre procédure, qui fonctionne parfaitement, est la suivante:

A partir du menu principal, on peut générer les mêmes alertes en cliquant sur un bouton ALERTES :

Private Sub GenerAlertes_Click()
'Unload Me
frmAlertes.Show 'On affiche à nouveau les alertes
End Sub

On accède ainsi au frmAlertes (code ci-dessus).

Merci pour ton aide.

Dire « Merci » 3

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

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

Commenter la réponse de montedobispo
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Bonjour,
Difficile de te répondre avec assurance sur la base de ces seules indications.
On ne peut que faire des suppositions diverses, parmi lesquelles la "montre" du userform alors que la feuille n'a pas encore été actualisée.
Quels sont l'ordre et la nature exacts des opérations effectuées (avec précision) ?


________________________
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