Amine.ze
Messages postés5Date d'inscriptionlundi 1 décembre 2014StatutMembreDernière intervention 3 décembre 2014
-
Modifié par jordane45 le 1/12/2014 à 16:58
Amine.ze
Messages postés5Date d'inscriptionlundi 1 décembre 2014StatutMembreDernière intervention 3 décembre 2014
-
3 déc. 2014 à 16:07
Bonjour,
J'ai un code qui me permets d'afficher un MsgBox 1 mois avant l'expiration de la date de validité de certain documents.
Il était relié uniquement à la colonne "G" alors que je voudrais qu'il soit appliqué à la colonne "Y" et la colonne "AA" du coup j'ai copié le code en changeant le nom des cases, mais il affiche le premier MsgBox.
Je voudrais qu'a chaque fois il affiche le message qui concerne la colonne en le gardant sur " Workbook_Open"
Le code marche bien sauf qu'il affiche le MsgBox qui est en gras et souligné.
Comment je peux faire pour qu'il affiche les MsgBox qui sont soulignés pour chaque "partie"
Une âme charitable pourrait-elle m'aider ? ^^
Voilà le code :
Private Sub Workbook_open()
Dim <bold>g</bold> As Range
Application.ScreenUpdating = False
With Sheets("Feuil1") ' à modifier
<bold>For Each g In .Range(.[G3], .[G65536].End(xlUp))</bold>
If g.Value < DateSerial(Year(Date), Month(Date) + 1, Day(Date)) Then
If txt = "" Then txt = <underline><ital>"<bold>Avertissement : Expiration Attestation URSSAF:</bold>"</ital></underline> & vbCrLf
txt = txt & g.Offset(, -6) & ", " & g.Offset(, -5) & vbCrLf
End If
Next g
If txt <> "" Then MsgBox txt
End With
Application.ScreenUpdating = True
Application.ScreenUpdating = False
With Sheets("Feuil1") ' à modifier
<bold>For Each y In .Range(.[Y3], .[Y65536].End(xlUp))</bold>
If y.Value < DateSerial(Year(Date), Month(Date) + 1, Day(Date)) Then
If txt = "" Then txt = "<underline>Avertissement : Expiration Extrait Kbis:</underline>" & vbCrLf
txt = txt & y.Offset(, -24) & ", " & y.Offset(, -23) & vbCrLf
End If
Next y
If txt <> "" Then MsgBox txt
End With
Application.ScreenUpdating = True
Dim aa As Range
Application.ScreenUpdating = False
With Sheets("Feuil1") ' à modifier
<bold>For Each aa In .Range(.[AA3], .[AA65536].End(xlUp))</bold>
If aa.Value < DateSerial(Year(Date), Month(Date) + 1, Day(Date)) Then
If txt = "" Then txt = "<underline>Avertissement : Expiration de la liste des salariés étrangers:</underline>" & vbCrLf
txt = txt & aa.Offset(, -26) & ", " & aa.Offset(, -25) & vbCrLf
End If
Next aa
If txt <> "" Then MsgBox txt
End With
Application.ScreenUpdating = True
End Sub
jordane45
Messages postés38112Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention29 mars 2024344 1 déc. 2014 à 17:01
Bonjour,
A mon avis il suffit de tester si la valeur de la cellule n'est pas vide en plus de la comparaison de date...
If y.Value <>"" and y.Value < DateSerial(Year(Date), Month(Date) + 1, Day(Date)) Then
Idem pour chaque block...
Amine.ze
Messages postés5Date d'inscriptionlundi 1 décembre 2014StatutMembreDernière intervention 3 décembre 2014 1 déc. 2014 à 17:06
En fait le code il marché très bien. Sauf qu'il affiche toujours le 1er Msgbox : c'est à dire "Avertissement : Expiration Attestation URSSAF" qui est relatif à la la colonne G.
Alors que moi je voudrais qu'il y ait un Msgbox propre à chaque colonne "Y" et "AA" c'est a dire
pour "Y" : Avertissement : Expiration Extrait Kbis et
pour "AA" : Avertissement Expiration de la liste des salariés étrangers
Merci par avance de ton aide ^^
jordane45
Messages postés38112Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention29 mars 2024344
>
Amine.ze
Messages postés5Date d'inscriptionlundi 1 décembre 2014StatutMembreDernière intervention 3 décembre 2014 1 déc. 2014 à 19:18
Tu ne remets pas ta variable txt à vide entre chaque bloc...
Donc.. ton If txt = "" .. est toujours faux.
L'idéal étant de créer une fonction .. que tu appelles lorsque tu en as besoin plutot que de dupliquer du code....
Function testDateInRange(col As String, Sh As Worksheet) As String
Dim txt As String
Dim R As Range
Dim lastRow As Long
lastRow = Range(col & "65536").End(xlUp).Row
Application.ScreenUpdating = False
With Sh
For Each R In .Range(col & "3:" & col & lastRow)
If R.Value < DateSerial(Year(Date), Month(Date) + 1, Day(Date)) Then
If txt = "" Then txt = "<bold>Avertissement : Expiration Attestation URSSAF:</bold>" & vbCrLf
txt = txt & R.Offset(, -6) & ", " & R.Offset(, -5) & vbCrLf
End If
Next
End With
Application.ScreenUpdating = True
testDateInRange = txt
End Function
Et pour l'utiliser :
Sub toto()
MsgBox testDateInRange("G", sheets('Feuil1'))
MsgBox testDateInRange("Y", sheets('Feuil1'))
MsgBox testDateInRange("AA", sheets('Feuil1'))
End Sub
Amine.ze
Messages postés5Date d'inscriptionlundi 1 décembre 2014StatutMembreDernière intervention 3 décembre 2014 1 déc. 2014 à 20:19
Je n'ai pas réussi à te faire comprendre ce que j'ai fait et ce que je voudrais corriger, car tu n'as pas le fichier devant toi. Je suis sûr qu'il y a une solution toute simple mais je n'arrive pas à la trouver.
Y-a-t-l un moyen de t'envoyer le fichier excel pour voir si tu peux m'aider ?
jordane45
Messages postés38112Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention29 mars 2024344 1 déc. 2014 à 21:00
Tu peux éventuellement le deposer sur le site cijoint.com et nous donner le lien.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 3 déc. 2014 à 15:48
Bonjour,
Plutôt que d'afficher ton MsgBox à chaque boucle de colonnes, affiche-le seulement à la fin en ajoutant si nécessaire le message pour chaque colonne lors du passage de chaque colonne.
Tu auras éventuellement 3 alertes dans un message plutôt que 3 messages...
Amine.ze
Messages postés5Date d'inscriptionlundi 1 décembre 2014StatutMembreDernière intervention 3 décembre 2014 3 déc. 2014 à 16:07
Merci beaucoup, mais finalement j'ai trouvé un ptite astuce qui ressemble un peu à ce que t'as dit.
1 déc. 2014 à 17:06
Alors que moi je voudrais qu'il y ait un Msgbox propre à chaque colonne "Y" et "AA" c'est a dire
pour "Y" : Avertissement : Expiration Extrait Kbis et
pour "AA" : Avertissement Expiration de la liste des salariés étrangers
Merci par avance de ton aide ^^
1 déc. 2014 à 19:18
Donc.. ton If txt = "" .. est toujours faux.
L'idéal étant de créer une fonction .. que tu appelles lorsque tu en as besoin plutot que de dupliquer du code....
Et pour l'utiliser :
1 déc. 2014 à 20:19
Y-a-t-l un moyen de t'envoyer le fichier excel pour voir si tu peux m'aider ?
1 déc. 2014 à 21:00