Mise à jour données du formulaire

Signaler
Messages postés
3
Date d'inscription
samedi 21 avril 2012
Statut
Membre
Dernière intervention
6 mai 2012
-
Messages postés
31204
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
-
Bonjour,

je rencontre un pb de mise à jour des données du formulaire à l'ouverture du fichier.

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 PROV" '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 DEF" '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 PROV")
Worksheets("sie").Range("AD1") = Application.WorksheetFunction.CountIf(Range("P2:P1000"), "=DECLARER DEF")

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 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

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

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

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

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 toute aide.

1 réponse

Messages postés
31204
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
342
Bonjour,

Il semble que ta question concerne du VBA [ sur Excel ] (même si c'est pour l'affichage de userform..). Donc tu n'es pas dans la bonne rubrique du forum.

Ensuite, il existe des balises de codes... ce serait bien de les utiliser afin que l'affichage soit plus lisible...

Ensuite... vu la longueur du code (sans mise en forme) que tu as collé, j'ai un peu la fleme de tout lire... j'ai juste compris que tu as une procédure qui fonctionne et une autre non..

Pourrais-tu reformuler ton souci ?

Peux être pourrais tu nous indiquer où cela bloque ?
Vu ton titre.. c'est la mise à jour des données qui ne fonctionne pas ou bien comme le laisse supposer tes dernières phrases, est-ce le lancement du code ?

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI