Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

message specifique a l'ouverture d'un fichier

9 réponses
Avatar
j
Bonjour à tous

Voilà ce que je souhaite faire : avoir un message spécifique lors de
l'ouverture du fichier.
Je m'explique avec un exemple simple, restera à l'adapter une fois bien
compris.

J'ai un fichier avec plusieurs données en :

Colonne A : Code
Colonne B : Nom
Colonne C : Date d'expiration

Je souhaiterai que lorsque j'ouvre le fichier plusieurs messages s'affiche
avec le Code, le No
Un si la date d'expiration est a 60 j
Un autre si la date d'expiration est a 30j
et un autre sir la date d'expiration est dépassée

La référence étant la date du jour

Merci de votre aide

9 réponses

Avatar
Jacky
Bonjour,
Ceci peut-être......

Dans le Thisworkbook
'---------
Private Sub Workbook_Open()
Call jj
End Sub
'----------------
Dans un module standard
'--------------
Sub jj()
With Sheets("feuil1")
derlg = .Cells(Rows.Count, "C").End(3).Row
For i = 2 To derlg
If Date - .Cells(i, 3) = -60 Then MsgBox "Expiration dans 60 Jours pour" & vbLf & Cells(i, 1) & vbLf &
Cells(i, 2) & vbLf & Cells(i, 3)
If Date - .Cells(i, 3) = -30 Then MsgBox "Expiration dans 30 Jours pour" & vbLf & Cells(i, 1) & vbLf &
Cells(i, 2) & vbLf & Cells(i, 3)
If Date > .Cells(i, 3) Then MsgBox "Date dépassée de " & Date - .Cells(i, 3) & " jour(s) pour" & vbLf &
Cells(i, 1) & vbLf & Cells(i, 2) & vbLf & Cells(i, 3)
Next
End With
End Sub
'----------------
Voir ici
http://www.cijoint.fr/cjlink.php?file=cj201103/cijiOVl45g.xls

--
Salutations
JJ


"" a écrit dans le message de news: 4d776a73$0$17828$
Bonjour à tous

Voilà ce que je souhaite faire : avoir un message spécifique lors de
l'ouverture du fichier.
Je m'explique avec un exemple simple, restera à l'adapter une fois bien
compris.

J'ai un fichier avec plusieurs données en :

Colonne A : Code
Colonne B : Nom
Colonne C : Date d'expiration

Je souhaiterai que lorsque j'ouvre le fichier plusieurs messages s'affiche
avec le Code, le No
Un si la date d'expiration est a 60 j
Un autre si la date d'expiration est a 30j
et un autre sir la date d'expiration est dépassée

La référence étant la date du jour

Merci de votre aide



Avatar
michdenis
Bonjour,

Au lieu de message, ce qui peut devenir fastidieux, pourquoi ne pas
afficher ces données dans une feuille dédiée à ce type de résultat en
ouverture de fichier.

Pour ce faire :

Dans le thisWorkbook de ton classeur :
'-----------------------------------------------
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Call test

'La feuille où seront copiées les données
Worksheets("Feuil2").Select
Application.ScreenUpdating = False
End Sub
'-----------------------------------------------

Dans un module standard :
'----------------------------------------------
Sub test()
Dim D As Date, Ligne As Long, Sh As Worksheet
Dim DerLig As Long, Rg As Range

'La feuille où seront affichés les données
Set Sh = Worksheets("Feuil2")
Sh.Cells.Clear

'la feuille où sont les données actuellement
With Worksheets("Feuil1")
DerLig = .Range("A:C").Cells.Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:C" & DerLig)
End With
With Rg
With .Columns(3)
.AutoFilter field:=1, Criteria1:=">=" & (Date - 30) * 1
Sh.Range("A1") = "Items datant de moins de 30 jours"
Sh.Range("A1").Font.Bold = True
.SpecialCells(xlVisible).EntireRow.Copy Sh.Range("A2")
.AutoFilter field:=1, Criteria1:="<" & (Date - 30) * 1, _
Operator:=xlAnd, Criteria2:=">=" & (Date - 60) * 1
Ligne = Sh.Range("A65536").End(xlUp).Row + 2
Sh.Range("A" & Ligne) = "Items datant de plus de 30 jours et de moins de 60 jours"
Sh.Range("A" & Ligne).Font.Bold = True
.SpecialCells(xlVisible).EntireRow.Copy Sh.Range("A" & Ligne + 1)
.AutoFilter field:=1, Criteria1:="<" & (Date - 60) * 1
Ligne = Feuil2.Range("A65536").End(xlUp).Row + 2
Sh.Range("A" & Ligne) = "Items datant de plus de 60 jours."
Sh.Range("A" & Ligne).Font.Bold = True
.SpecialCells(xlVisible).EntireRow.Copy Sh.Range("A" & Ligne + 1)
.AutoFilter
End With
End With
End Sub
'----------------------------------------------



MichD
--------------------------------------------
"" a écrit dans le message de groupe de discussion : 4d776a73$0$17828$

Bonjour à tous

Voilà ce que je souhaite faire : avoir un message spécifique lors de
l'ouverture du fichier.
Je m'explique avec un exemple simple, restera à l'adapter une fois bien
compris.

J'ai un fichier avec plusieurs données en :

Colonne A : Code
Colonne B : Nom
Colonne C : Date d'expiration

Je souhaiterai que lorsque j'ouvre le fichier plusieurs messages s'affiche
avec le Code, le No
Un si la date d'expiration est a 60 j
Un autre si la date d'expiration est a 30j
et un autre sir la date d'expiration est dépassée

La référence étant la date du jour

Merci de votre aide
Avatar
Jacky
Re...
Quelques . (point) se sont égarés ;o)
'-----------------
Sub jj()
With Sheets("feuil1")
derlg = .Cells(Rows.Count, "C").End(3).Row
For i = 2 To derlg
If Date - .Cells(i, 3) = -60 Then MsgBox "Expiration dans 60 Jours pour" & vbLf & .Cells(i, 1) & vbLf &
.Cells(i, 2) & vbLf & .Cells(i, 3)
If Date - .Cells(i, 3) = -30 Then MsgBox "Expiration dans 30 Jours pour" & vbLf & .Cells(i, 1) & vbLf &
.Cells(i, 2) & vbLf & .Cells(i, 3)
If Date > .Cells(i, 3) Then MsgBox "Date dépassée de " & Date - .Cells(i, 3) & " jour(s) pour" & vbLf &
.Cells(i, 1) & vbLf & .Cells(i, 2) & vbLf & .Cells(i, 3)
Next
End With
End Sub
'-----------------
Au cas ou la feuille active n'est pas la feuille ou sont placé les informations


--
Salutations
JJ


"Jacky" a écrit dans le message de news: il7t72$6q8$
Bonjour,
Ceci peut-être......

Dans le Thisworkbook
'---------
Private Sub Workbook_Open()
Call jj
End Sub
'----------------
Dans un module standard
'--------------
Sub jj()
With Sheets("feuil1")
derlg = .Cells(Rows.Count, "C").End(3).Row
For i = 2 To derlg
If Date - .Cells(i, 3) = -60 Then MsgBox "Expiration dans 60 Jours pour" & vbLf & Cells(i, 1) & vbLf &
Cells(i, 2) & vbLf & Cells(i, 3)
If Date - .Cells(i, 3) = -30 Then MsgBox "Expiration dans 30 Jours pour" & vbLf & Cells(i, 1) & vbLf &
Cells(i, 2) & vbLf & Cells(i, 3)
If Date > .Cells(i, 3) Then MsgBox "Date dépassée de " & Date - .Cells(i, 3) & " jour(s) pour" & vbLf &
Cells(i, 1) & vbLf & Cells(i, 2) & vbLf & Cells(i, 3)
Next
End With
End Sub
'----------------
Voir ici
http://www.cijoint.fr/cjlink.php?file=cj201103/cijiOVl45g.xls

--
Salutations
JJ


"" a écrit dans le message de news: 4d776a73$0$17828$
Bonjour à tous

Voilà ce que je souhaite faire : avoir un message spécifique lors de
l'ouverture du fichier.
Je m'explique avec un exemple simple, restera à l'adapter une fois bien
compris.

J'ai un fichier avec plusieurs données en :

Colonne A : Code
Colonne B : Nom
Colonne C : Date d'expiration

Je souhaiterai que lorsque j'ouvre le fichier plusieurs messages s'affiche
avec le Code, le No
Un si la date d'expiration est a 60 j
Un autre si la date d'expiration est a 30j
et un autre sir la date d'expiration est dépassée

La référence étant la date du jour

Merci de votre aide







Avatar
j
Merci
C'est pas cela, mais ne peut on pas regrouper les massages dans un seul
MsgBox par catégorie
Car il est vrai qu'avec environ une centaine de cas cela devient fastidieux.

Si vous avez une idée


"Jacky" a écrit dans le message de news:
il83a2$odr$
Re...
Quelques . (point) se sont égarés ;o)
'-----------------
Sub jj()
With Sheets("feuil1")
derlg = .Cells(Rows.Count, "C").End(3).Row
For i = 2 To derlg
If Date - .Cells(i, 3) = -60 Then MsgBox "Expiration dans 60 Jours pour"
& vbLf & .Cells(i, 1) & vbLf & .Cells(i, 2) & vbLf & .Cells(i, 3)
If Date - .Cells(i, 3) = -30 Then MsgBox "Expiration dans 30 Jours pour"
& vbLf & .Cells(i, 1) & vbLf & .Cells(i, 2) & vbLf & .Cells(i, 3)
If Date > .Cells(i, 3) Then MsgBox "Date dépassée de " & Date -
.Cells(i, 3) & " jour(s) pour" & vbLf & .Cells(i, 1) & vbLf & .Cells(i, 2)
& vbLf & .Cells(i, 3)
Next
End With
End Sub
'-----------------
Au cas ou la feuille active n'est pas la feuille ou sont placé les
informations


--
Salutations
JJ


"Jacky" a écrit dans le message de news:
il7t72$6q8$
Bonjour,
Ceci peut-être......

Dans le Thisworkbook
'---------
Private Sub Workbook_Open()
Call jj
End Sub
'----------------
Dans un module standard
'--------------
Sub jj()
With Sheets("feuil1")
derlg = .Cells(Rows.Count, "C").End(3).Row
For i = 2 To derlg
If Date - .Cells(i, 3) = -60 Then MsgBox "Expiration dans 60 Jours
pour" & vbLf & Cells(i, 1) & vbLf & Cells(i, 2) & vbLf & Cells(i, 3)
If Date - .Cells(i, 3) = -30 Then MsgBox "Expiration dans 30 Jours
pour" & vbLf & Cells(i, 1) & vbLf & Cells(i, 2) & vbLf & Cells(i, 3)
If Date > .Cells(i, 3) Then MsgBox "Date dépassée de " & Date -
.Cells(i, 3) & " jour(s) pour" & vbLf & Cells(i, 1) & vbLf & Cells(i, 2)
& vbLf & Cells(i, 3)
Next
End With
End Sub
'----------------
Voir ici
http://www.cijoint.fr/cjlink.php?file=cj201103/cijiOVl45g.xls

--
Salutations
JJ


"" a écrit dans le message de news:
4d776a73$0$17828$
Bonjour à tous

Voilà ce que je souhaite faire : avoir un message spécifique lors de
l'ouverture du fichier.
Je m'explique avec un exemple simple, restera à l'adapter une fois bien
compris.

J'ai un fichier avec plusieurs données en :

Colonne A : Code
Colonne B : Nom
Colonne C : Date d'expiration

Je souhaiterai que lorsque j'ouvre le fichier plusieurs messages
s'affiche
avec le Code, le No
Un si la date d'expiration est a 60 j
Un autre si la date d'expiration est a 30j
et un autre sir la date d'expiration est dépassée

La référence étant la date du jour

Merci de votre aide











Avatar
Jacky
Re..
Car il est vrai qu'avec environ une centaine de cas cela devient fastidieux.



Alors la solution de Denis sera bien plus appropriée.

--
Salutations
JJ


"" a écrit dans le message de news: 4d77bbe8$0$17751$
Merci
C'est pas cela, mais ne peut on pas regrouper les massages dans un seul MsgBox par catégorie
Car il est vrai qu'avec environ une centaine de cas cela devient fastidieux.

Si vous avez une idée

Avatar
j
et si on regroupait les fiches en ne donnant pas le détail dans le msgbox
mais simplement un nombre de fiches concernées par la condition ??

sous la forme Attention 10 fiches sont hors delais de plus de 30 jours ...
etc ..
ce qui ferait monter que 3 msgbox

Bon c'est une idée !!

Merci d'avance

"Jacky" a écrit dans le message de news:
il8ukf$61i$
Re..
Car il est vrai qu'avec environ une centaine de cas cela devient
fastidieux.



Alors la solution de Denis sera bien plus appropriée.

--
Salutations
JJ


"" a écrit dans le message de news:
4d77bbe8$0$17751$
Merci
C'est pas cela, mais ne peut on pas regrouper les massages dans un seul
MsgBox par catégorie
Car il est vrai qu'avec environ une centaine de cas cela devient
fastidieux.

Si vous avez une idée





Avatar
Jacky
Re...
Ceci......??
'-----------------
Sub jj()
With Sheets("feuil1")
derlg = .Cells(Rows.Count, "C").End(3).Row
For i = 2 To derlg
If Date - .Cells(i, 3) = -60 Then msg60 = msg60 & " " & .Cells(i, 1) & " " & .Cells(i, 2) & vbLf
If Date - .Cells(i, 3) = -30 Then msg30 = msg30 & " " & .Cells(i, 1) & " " & .Cells(i, 2) & vbLf
If Date > .Cells(i, 3) Then msgp = msgp & .Cells(i, 1) & " " & .Cells(i, 2) & vbLf
Next
'par groupe
MsgBox "Expiration dans 60 Jours pour" & vbLf & vbLf & msg60 & vbLf
MsgBox "Expiration dans 30 Jours pour" & vbLf & vbLf & msg30 & vbLf
MsgBox "Date dépassée ce jour" & vbLf & vbLf & msgp
'l'ensemble s'il n'y en a pas trop
MsgBox "Expiration dans 60 Jours pour" & vbLf & msg60 & vbLf & _
"Expiration dans 30 Jours pour" & vbLf & msg30 & vbLf & _
"Date dépassée ce jour" & vbLf & msgp
End With
End Sub
'--------------------
Voir ici
http://www.cijoint.fr/cjlink.php?file=cj201103/cijQfBWtbP.xls

--
Salutations
JJ


"" a écrit dans le message de news: 4d7803f5$0$20770$
et si on regroupait les fiches en ne donnant pas le détail dans le msgbox mais simplement un nombre de
fiches concernées par la condition ??

sous la forme Attention 10 fiches sont hors delais de plus de 30 jours ... etc ..
ce qui ferait monter que 3 msgbox

Bon c'est une idée !!

Merci d'avance

"Jacky" a écrit dans le message de news: il8ukf$61i$
Re..
Car il est vrai qu'avec environ une centaine de cas cela devient fastidieux.



Alors la solution de Denis sera bien plus appropriée.

--
Salutations
JJ


"" a écrit dans le message de news: 4d77bbe8$0$17751$
Merci
C'est pas cela, mais ne peut on pas regrouper les massages dans un seul MsgBox par catégorie
Car il est vrai qu'avec environ une centaine de cas cela devient fastidieux.

Si vous avez une idée









Avatar
michdenis
Si tu y tiens, tu pourrais appeler cette procédure à partir
de l'événement Workbook_Open dans le Thisworkbook

Tu adaptes le nom de la feuille au besoin:
'------------------------------------------
Sub test()
Dim D As Date, Ligne As Long
Dim DerLig As Long, Rg As Range

'la feuille où sont les données actuellement
With Worksheets("Feuil1")
DerLig = .Range("A:C").Cells.Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:C" & DerLig)
End With
Application.ScreenUpdating = False
With Rg
With .Columns(3)
.AutoFilter field:=1, Criteria1:=">=" & (Date - 30) * 1
Message = "Items datant de 30 jours et moins :"
Message = Message & vbCrLf _
& vbTab & Application.Subtotal(3, .Cells) - 1 & _
" données correspond à ce critère." & vbCrLf & vbCrLf

.AutoFilter field:=1, Criteria1:="<" & (Date - 30) * 1, _
Operator:=xlAnd, Criteria2:=">=" & (Date - 60) * 1
Message = Message & "Items datant de plus de 30 jours et de 60 jours et moins :"
Message = Message & vbCrLf _
& vbTab & Application.Subtotal(3, .Cells) - 1 & _
" données correspond à ce critère." & vbCrLf & vbCrLf

.AutoFilter field:=1, Criteria1:="<" & (Date - 60) * 1
Message = Message & "Items datant de plus de 60 jours"
Message = Message & vbCrLf _
& vbTab & Application.Subtotal(3, .Cells) - 1 & _
" données correspond à ce critère." & vbCrLf & vbCrLf
.AutoFilter
Application.ScreenUpdating = True
MsgBox Message, vbInformation + vbOKOnly, "Attention"
End With
End With

End Sub
'------------------------------------------




MichD
--------------------------------------------
"" a écrit dans le message de groupe de discussion : 4d7803f5$0$20770$

et si on regroupait les fiches en ne donnant pas le détail dans le msgbox
mais simplement un nombre de fiches concernées par la condition ??

sous la forme Attention 10 fiches sont hors delais de plus de 30 jours ...
etc ..
ce qui ferait monter que 3 msgbox

Bon c'est une idée !!

Merci d'avance

"Jacky" a écrit dans le message de news:
il8ukf$61i$
Re..
Car il est vrai qu'avec environ une centaine de cas cela devient
fastidieux.



Alors la solution de Denis sera bien plus appropriée.

--
Salutations
JJ


"" a écrit dans le message de news:
4d77bbe8$0$17751$
Merci
C'est pas cela, mais ne peut on pas regrouper les massages dans un seul
MsgBox par catégorie
Car il est vrai qu'avec environ une centaine de cas cela devient
fastidieux.

Si vous avez une idée





Avatar
j
Trop genial
MERCIIIIIIIIIIIIIIIIIIIIIIIII

ça me va je vais adapter tout cela, j'ai la solution grâce a vous

Milles merci


"michdenis" a écrit dans le message de news:
il947s$j4b$
Si tu y tiens, tu pourrais appeler cette procédure à partir
de l'événement Workbook_Open dans le Thisworkbook

Tu adaptes le nom de la feuille au besoin:
'------------------------------------------
Sub test()
Dim D As Date, Ligne As Long
Dim DerLig As Long, Rg As Range

'la feuille où sont les données actuellement
With Worksheets("Feuil1")
DerLig = .Range("A:C").Cells.Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:C" & DerLig)
End With
Application.ScreenUpdating = False
With Rg
With .Columns(3)
.AutoFilter field:=1, Criteria1:=">=" & (Date - 30) * 1
Message = "Items datant de 30 jours et moins :"
Message = Message & vbCrLf _
& vbTab & Application.Subtotal(3, .Cells) - 1 & _
" données correspond à ce critère." & vbCrLf & vbCrLf

.AutoFilter field:=1, Criteria1:="<" & (Date - 30) * 1, _
Operator:=xlAnd, Criteria2:=">=" & (Date - 60) * 1
Message = Message & "Items datant de plus de 30 jours et de 60
jours et moins :"
Message = Message & vbCrLf _
& vbTab & Application.Subtotal(3, .Cells) - 1 & _
" données correspond à ce critère." & vbCrLf & vbCrLf

.AutoFilter field:=1, Criteria1:="<" & (Date - 60) * 1
Message = Message & "Items datant de plus de 60 jours"
Message = Message & vbCrLf _
& vbTab & Application.Subtotal(3, .Cells) - 1 & _
" données correspond à ce critère." & vbCrLf & vbCrLf
.AutoFilter
Application.ScreenUpdating = True
MsgBox Message, vbInformation + vbOKOnly, "Attention"
End With
End With

End Sub
'------------------------------------------




MichD
--------------------------------------------
"" a écrit dans le message de groupe de discussion :
4d7803f5$0$20770$

et si on regroupait les fiches en ne donnant pas le détail dans le msgbox
mais simplement un nombre de fiches concernées par la condition ??

sous la forme Attention 10 fiches sont hors delais de plus de 30 jours ...
etc ..
ce qui ferait monter que 3 msgbox

Bon c'est une idée !!

Merci d'avance

"Jacky" a écrit dans le message de news:
il8ukf$61i$
Re..
Car il est vrai qu'avec environ une centaine de cas cela devient
fastidieux.



Alors la solution de Denis sera bien plus appropriée.

--
Salutations
JJ


"" a écrit dans le message de news:
4d77bbe8$0$17751$
Merci
C'est pas cela, mais ne peut on pas regrouper les massages dans un seul
MsgBox par catégorie
Car il est vrai qu'avec environ une centaine de cas cela devient
fastidieux.

Si vous avez une idée