Excel alerte
CUTUITIOJ Messages postés 9 Statut Membre -
Bonjour ,
est ce qu'il ya une possibilté de faire une alerte sur un fichier excel ,pour me permettre de changé le permis de mes chauffeurs a chaque fin de validité.
Salutations
- Excel alerte
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Fausse alerte mcafee - Accueil - Piratage
- Si ou excel - Guide
- Déplacer colonne excel - Guide
37 réponses
Une macro VBA, déclenchée à l'ouverture du classeur, permet d'afficher des alertes pour les échéances de permis et pour les visites techniques.
Elle calcule les jours restants en faisant la différence entre la date actuelle et les dates d'échéance, et déclenche une alerte lorsque ce délai est entre 0 et 7 jours.
Le balayage parcourt les lignes à partir d'une ligne de départ (par exemple 7) jusqu'à la dernière ligne remplie sur les feuilles concernées et peut ignorer les valeurs 'N/A' ou les cas 'Exempté'.
Des propositions complémentaires prévoient l'utilisation de formules en colonnes M et N pour préparer les échéances et l'extension du code à plusieurs feuilles ou à un démarrage automatique.
c'est exactement ça ,donc j'aimerai que si c'est livré que le sous douane s'efface.
en outre es ce on peut faire en sorte que l'alerte soit un tableau avec les libellés.
Private Sub Workbook_Open()
On Error Resume Next
mes = "ALERTE pour :" & Chr(10) & Chr(10) & "SUPPLIER ORDER ABW LIVRAISON TRANSIT" & Chr(10) & Chr(10)
Sheets("Feuil1").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
nom = Cells(n, 3)
ord = Cells(n, 9)
abw = Cells(n, 4)
If Cells(n, 4).Value <> "" Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") Else GoTo suite
If Cells(n, 14).Value <> "N/A" And Cells(n, 13) = "N/A" Then mes = mes & "Sous douane"
If Cells(n, 13).Value <> "N/A" Then mes = mes & "le " & Cells(n, 13).Value & " " & (Cells(n, 13).Value - Cells(n, 12).Value + 3)
mes = mes & Chr(10)
suite:
Next
MsgBox (mes)
End Sub
Excellent,juste aligner les donner sous leur libellés et mettre un clisseur pour me permettre de defiler en cas ou il aura plus de donner.
Les données sont "alignées" par le remplacement des caracteres manquants par rapport à 15 caracteres par des espaces mais alignement ne peut pas être parfait car dans les noms de départ des mots de même nombre de caractères n'ont pas la même longueur (un i est moins large qu'un m par exemple)
Quant à la fenetre d'alerte elle s'agrandit automatiquement en fonction du nombre de lignes
mais ATTENTION une messagebox est limitée à un millier de caractères donc si tu beaucoup de lignes il y en a qui ne seront pas affichées
Si tu as beaucoup de données ce n'est pas par Messagebox qu'il faut proceder, il faut faire recopier les données que tu veux dans une 2nde feuille dans un tableau et que l'alerte se contente à afficher cette feuille à l'ouverture du classeur
Mais là je te laisse faire le boulot !
la même formule peut s'appliquer sur une 2e feuille dont l'alerte va prendre en charge en utilisant le même tableau que tu vien de faire pour la macro alerte
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionj'ai finalement obter pour l'alerte avec la MACRO ,Mais la formule s'arrête a la ligne 21 du tableau je veus celà prenne tout le tableau en compte.
donc j'aimerai modifier l'alerte qui doit prend en charge que ce qui sont seulement sous douane et recenment livrer c'est à dire livrer il ya 7jours.
Sincère Salutation
le principe de base sont des tests de condition :
IF la condition qu'on veut THEN ce qu'on veut si la condition est bonne
ou
IF 1ere condition AND 2eme condition THEN
Par exemple : If Cells(n, 14).Value <> "N/A" and if cells((n,13).value then mes="Sous douane"
signifie SI la valeur decellule ligne n colonne 14 est differente de "N//A" ET la valeur de la cellule ligne n colonne 13 est aussi differente de "N/A" ALORS la variable mes est égale à elle même à laquelle on ajoute le texte "Sous douane"
Pour faire la différence entre aujourd'hui et la date d'une colonne le code est
dif = Date - cells(n,14).value
dif est le nom que tu donnes à la variable (tu peux mettre autre chose)
Date est la date du jour
Cells (n,14).value est la date contenue dans la cellule ligne n colonne 14
Ensuite tu peux tester avec une condition si la difference convient , ici tu veux ne retenir que les livraisons depuis 7 jours donc inferieures à 8 jours donc tu codes :
IF dif <8 THEN ..........
Bon courage
Voir ci dessous la formule que j'ai utilisé celà ne prend pas en compte seulement les "sous douane ".
or je veut ça prenne que les "sous douane" et les livrés au cour d'une semaine en cour mentionnant la date comme dans la fourmule .
Le "transit " reste la même mais sera en fonction de ce que l'alerte mentionnera
c'est à dire transit "sous douane' et "livré"
voir ci dessous
Private Sub Workbook_Open()
On Error Resume Next
mes = "ALERTE pour :" & Chr(10) & Chr(10) & "SUPPLIER ORDER ABW LIVRAISON TRANSIT" & Chr(10) & Chr(10)
Sheets("Feuil3").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
nom = Cells(n, 3)
ord = Cells(n, 9)
abw = Cells(n, 4)
If Cells(n, 4).Value <> "" Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") Else GoTo suite
If Cells(n, 14).Value <> "N/A" And if Cells(n, 13).Value Then mes = mes & "Sous douane"
dif = Date - Cells(n, 14).Value
If dif < 8 Then mes = mes & "le " & Cells(n, 13).Value & " " & (Cells(n, 13).Value - Cells(n, 12).Value + 3)
mes = mes & Chr(10)
suite:
Next
MsgBox (mes)
End Sub
Déja ta ligne ne peut pas marcher :
If Cells(n, 14).Value <> "N/A" And if Cells(n, 13).Value Then mes = mes & "Sous douane"
ce devrait être plutot :
If Cells(n, 14).Value <> "N/A" And Cells(n, 13).Value="N/A" Then mes = mes & "Sous douane"
Cette ligne prend en compte les Sous douane si c'est ta condition première elle doit venir en 1er et sinon on va à la fin sans executer le reste par un ELSE GOTO ....
donc la macro seraiit plutôt :
Private Sub Workbook_Open()
On Error Resume Next
mes = "ALERTE pour :" & Chr(10) & Chr(10) & "SUPPLIER ORDER ABW LIVRAISON TRANSIT" & Chr(10) & Chr(10)
Sheets("Feuil3").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
nom = Cells(n, 3)
ord = Cells(n, 9)
abw = Cells(n, 4)
If Cells(n, 14).Value <> "N/A" <gras>And Cells(n, 13).Value="N/A" Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & " Sous douane" Else GoTo suite
dif = Date - Cells(n, 14).Value
If dif < 8 Then mes = mes & "le " & Cells(n, 13).Value & " " & (Cells(n, 13).Value - Cells(n, 12).Value + 3)
mes = mes & Chr(10)
suite:
Next
MsgBox (mes)
End Sub
ça met la ligne ci dessous en rouge dans la macro et quant s'execute la macro s'affiche Erreur de compilation Erreur syntaxe
If Cells(n, 14).Value <> "N/A" <gras>And Cells(n, 13).Value="N/A" Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & " Sous douane" Else GoTo suite
<gras> n'existe pas dans la macro ! (Ca ne t'as pas paru bizarre !)
c'est un bug du site car j'avais mis en gras la phrase (<gras> est la balise HTML pour mettre en gras mais elle ne devrait pas apparaitre )
la bonne ligne est donc :
If Cells(n, 14).Value <> "N/A" And Cells(n, 13).Value="N/A" Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & " Sous douane" Else GoTo suite
Je n'ai pas eu votre réaction par rapport à mon message
la Macro est bonne. mais une dernière chose àprès sous douane l'alerte doit affiche la date de la livraison si c'est livré.
et je veus que cette date là arrête de s'affiché après 7jour avec tout le contenu de la ligne.
Quat au transit l'alerte n'arrive pas à le faire sortir.
Salutation
Private Sub Workbook_Open()
On Error Resume Next
mes = "ALERTE pour sous douane :" & Chr(10) & Chr(10) & "SUPPLIER ORDER ABW DATE LIVRAISON et TRANSIT" & Chr(10) & Chr(10)
Sheets("Feuil3").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
nom = Cells(n, 3)
ord = Cells(n, 9)
abw = Cells(n, 4)
dif = Date - Cells(n, 13).Value
If Cells(n, 14).Value <> "N/A" And Cells(n, 13).Value <> "N/A" And dif < 8 and dif >=0 Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & Cells(n, 13).Value & " " & (Cells(n, 13).Value - Cells(n, 12).Value + 3) & " jours" Else: GoTo suite
mes = mes & Chr(10)
suite:
Next
MsgBox (mes)
End Sub
Les conditions sont réunies sur la même ligne et sont :
- il n'y a pas N/A en col 14 : cells(n,14) <>"N/A") donc il ya date ATA PAYS
- il n'y a pas N/A en col 13 : cells(n,13) <>"N/A") donc il y a date ATA SITE
- la diffference entre la date d'aujourd'hui et la date de livraison est inferieure à 8 et superieure ou egale à 0 : dif < 8 and dif >=0 donc on ne retient que les lignes avec une date de livraison dans les 7 derniers jours
Est ce enfin correspondant à ce que tu recherches ?
c'est exactement ça,il faut juste ajouter à cela la macro "sous douane" ci dessous.pour que les deux sort dans l'alerte
Voir ci dessous si la macro est correct. et je pense qu'il manque une code pour que ça marche en semble
If Cells(n, 14).Value <> "N/A" And Cells(n, 13).Value = "N/A" Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & " Sous douane" Else GoTo suite
On "elimine" d'abord ceux qui ont N/A en ATA PAYS avec goto suite
On ajoute les noms et N° au message à afficher
Puis si date en ATA SITE qui est compris dans les 7 derniers jours on ajoute la date et le nbre de jours de transit
Private Sub Workbook_Open()
On Error Resume Next
mes = "ALERTE pour sous douane :" & Chr(10) & Chr(10) & "SUPPLIER ORDER ABW DATE LIVRAISON et TRANSIT" & Chr(10) & Chr(10)
Sheets("Feuil3").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
nom = Cells(n, 3)
ord = Cells(n, 9)
abw = Cells(n, 4)
dif = Date - Cells(n, 13).Value
If Cells(n, 14).Value = "N/A" Then GoTo suite ' si N/A en col 14 on passe au suivant
mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") ' ajoute nom, oder et abW au message
If Cells(n, 13).Value <> "N/A" And dif < 8 And dif >= 0 Then mes = mes & " " & Cells(n, 13).Value & " " & (Cells(n, 13).Value - Cells(n, 12).Value + 3) & " jours" ' si col 13 remplie et date inferieure à aujourddhui entre 0 et 7 jours , ajoute date livraison et jours transit
mes = mes & Chr(10)
suite:
Next
MsgBox (mes)
End Sub
tu m"a beaucoup aider j"ai reussi à le faire voir ci dessous la macro je voulais un petit detaille ça bloque à la fin .
Private Sub Workbook_Open()
On Error Resume Next
mes = "ALERTE pour sous douane :" & Chr(10) & Chr(10) & "SUPPLIER ORDER ABW DATE LIVRAISON et TRANSIT" & Chr(10) & Chr(10)
Sheets("Feuil3").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
nom = Cells(n, 3)
ord = Cells(n, 9)
abw = Cells(n, 4)
dif = Date - Cells(n, 13).Value
If Cells(n, 14).Value <> "N/A" And Cells(n, 13).Value <> "N/A" And dif < 8 and dif >=0 Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & Cells(n, 13).Value & " " & (Cells(n, 13).Value - Cells(n, 12).Value + 3) & " jours" Else: GoTo suite
mes = mes & Chr(10)
suite:
Next
MsgBox (mes)
mes = "ALERTE pour :" & Chr(10) & Chr(10) & "SUPPLIER ORDER ABW LIVRAISON TRANSIT" & Chr(10) & Chr(10)
Sheets("Feuil3").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
nom = Cells(n, 3)
ord = Cells(n, 9)
abw = Cells(n, 4)
If Cells(n, 14).Value <> "N/A" And Cells(n, 13).Value="N/A" Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & " Sous douane" Else GoTo suite
dif = Date - Cells(n, 14).Value
If dif < 8 Then mes = mes & "le " & Cells(n, 13).Value & " " & (Cells(n, 13).Value - Cells(n, 12).Value + 3)
mes = mes & Chr(10)
Next
MsgBox (mes)
End Sub
La 1ere affiche les sous douane livrés
le ELse goto suite est inutile (ce qui est à effectuer peut tout être mis dans le IF) et la macro devient :
On Error Resume Next
mes = "ALERTE pour sous douane :" & Chr(10) & Chr(10) & "SUPPLIER ORDER ABW DATE LIVRAISON et TRANSIT" & Chr(10) & Chr(10)
Sheets("Feuil3").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
nom = Cells(n, 3)
ord = Cells(n, 9)
abw = Cells(n, 4)
dif = Date - Cells(n, 13).Value
If Cells(n, 14).Value <> "N/A" And Cells(n, 13).Value <> "N/A" And dif < 8 and dif >=0 Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & Cells(n, 13).Value & " " & (Cells(n, 13).Value - Cells(n, 12).Value + 3) & " jours" & Chr(10)
Next
MsgBox (mes)
La 2nde affiche les sous douane non livrés
donc puisque pas de date de livraison pas besoin de calculer dif et le transit et la macro devient:
mes = "ALERTE pour :" & Chr(10) & Chr(10) & "SUPPLIER ORDER ABW " & Chr(10) & Chr(10)
Sheets("Feuil3").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
nom = Cells(n, 3)
ord = Cells(n, 9)
abw = Cells(n, 4)
If Cells(n, 14).Value <> "N/A" And Cells(n, 13).Value="N/A" Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & Chr(10)
Next
MsgBox (mes
C'est çà où je me trompe sur ce que tu veux ?
Problème regler à 100/100 je suis vraiment satisfait.
je vous rémerci pour le temps que tu tes donnés pour faire ça .
Salutations
Es ce que on faire de cette alerte un tableau avec des lignes et des colonnes.
permettant de ranger un peut les données.
Salutations
petit problème la macro saute des donées quelle doit prendre .
alors je voudrai quelle prend toute les données de mon tableau qui sont concerner par la macro.
mon tableau est la même mais avec plusiuers ligne de donées.
slp pouvez vous m'aider
La macro fonctionne, si des données ont ignorées c'est soit qu'il y en a trop pour la box soit que les critères de tri ne sont pas bons
Quelles données manquent ?
Si ce sont les dernieres dans le tableau c'est problablement un probleme de taille limite du nombre de caracteres dans la box comme je te l'expliquais dans un précédent message et là rien à faire sauf à tout changer et ne plus récapituler les infos dans une box mais dans une autre feuille excel (où là tu ne seras pas limité)
Si au contraire ce sont des données dans tout le tableau qui manquent alorsc'est que le critères de tri de la macro ne sont pas les bons ou pas complets (pourtant ils ont été établis en fonction de tes renseignements et choix mais un élément a pu être oublié)
Dans l'attente de savoir
c"est surement un problème de caractère par ce que ça prend que c'est genre de nonm: Seven bridge et allens diesel.
puuvez augmenter le caractère car j'ai des noms plus petit comme "tac pargiue"et poiuges" et des noms plus grand comme" anglu colt asgensu"
Dans la macro il faut déjà augmenter les valeurs pour les espaces :
If Cells(n, 14).Value <> "N/A" And Cells(n, 13).Value <> "N/A" And dif < 8 and dif >=0 Then mes = mes & nom & String(15 - Len(nom), " ") & ord & String(15 - Len(ord), " ") & abw & String(20 - Len(abw), " ") & Cells(n, 13).Value & " " & (Cells(n, 13).Value - Cells(n, 12).Value + 3) & " jours" & Chr(10)
change ce chiffre 15 en 25 dans les 2 lignes de la macro où il y a l'expression ((15-Len(nom) pour le cas des livrés et des non livrés
Par contre si tu as trop de noms à afficher par rapport à la taille de la box fenetre, là il n'y a rien à faire car Ecel limite la box en caractères comme je t'ai déjà dit . Si c'est le cas il faut abandonner l'idée de vouloir faire une alerte par fenetre et proceder autrement c'est à dire reprendre completement la macro pour faire afficher les noms que tu veux non plus dans une box mais sur une feuille excel (dans un tableau meme si tu veux) car là tu ne seras pas limité
Voir ci-joint le fichier a voir si sa peut faire ou si je doit abondonner l'idée.
veuillez suprimer ce fichier àprès avoir fait une correction pour m'envoyer.
https://www.cjoint.com/?3CsoxjiqlUi
Private Sub Workbook_Open()
On Error Resume Next
mes = "ALERTE pour :" & Chr(10) & Chr(10)
Sheets("Feuil1").Select
der = Range("L9").End(xlDown).Row 'recherche derniere cellule remplie à partir de L9
For n = 10 To der 'boucle depuis la ligne 10 jusqu'à la ligne der
If Cells(n, 4).Value <> "" Then mes = mes & Cells(n, 3) & " * " & Cells(n, 9) & " * " & Cells(n, 4) Else GoTo suite
If Cells(n, 14).Value <> "N/A" Then mes = mes & " * Sous douane"
If Cells(n, 13).Value <> "N/A" Then mes = mes & " * Livrer le " & Cells(n, 13).Value & " Transit = " & (Cells(n, 13).Value - Cells(n, 12).Value + 3)
mes = mes & Chr(10)
suite:
Next
MsgBox (mes)
End Sub
En espérant que ça aille