Developper un code Macro condition

Résolu
nonossov Messages postés 638 Statut Membre -  
Frenchie83 Messages postés 2254 Statut Membre -
Bonjour mes amis,
veuillez m'aider a développer cette macro? voila le code:
l'objet de la macro est: Donner un tableau d'alerte contient toutes les entreprises qui j'ai pas encore payé leurs impôts, l'alerte commence 10 jour avant la date de paiement sinon il n'affiche pas.
voila le fichier ci-joint explique la tache, mais l'ordre de son travail ne marche pas,
si vous avez d'autre questions merci de les poser,
cordialement
http://www.cjoint.com/c/EGjnvxyeYzy
Sub tax()
Dim tx As String
Dim tx2 As String
Dim tx3 As String
Dim tx4 As String
Dim tx5 As String

Dim ans As Integer

Dim tgt As Date
Dim alt As Double
Dim i As Long

tgt = Format(Date, "dd/mm/yyyy")
Range("B2").Select
For i = 1 To 4
If i = 1 Then

Do
alt = ActiveCell.Offset(0, 1).Value - tgt
If ActiveCell.Value = "" And alt < 0 Then
tx5 = ActiveCell.Offset(0, -1).Value & " (" & Range("B1").Value & ")" & " - " & "[ " & -1 * alt & "]" & " Days Over due "

If MsgBox("Did you pay tax for this" & vbCrLf & tx5, vbYesNo) = vbYes Then
ActiveCell.Value = "x"
Else

End If
End If

If ActiveCell.Value = "" And alt <= 10 Then

tx = tx + vbCrLf + ActiveCell.Offset(0, -1).Value & " (" & Range("B1").Value & ")" & " - " & "[ " & alt & "]" & " Days left to pay "
End If
ActiveCell.Offset(1, 0).Select

Loop Until ActiveCell.Offset(1, -1).Value = ""

ElseIf i = 2 Then

Range("D2").Select
Do
alt = ActiveCell.Offset(0, 1).Value - tgt

If ActiveCell.Value = "" And alt < 0 Then

tx5 = ActiveCell.Offset(0, -3).Value & " (" & Range("D1").Value & ")" & " - " & "[ " & alt & "]" & " Days left to pay "

If MsgBox("Did you pay tax for this" & vbCrLf & tx5, vbYesNo) = vbYes Then
ActiveCell.Value = "x"
Else

End If
End If

If ActiveCell.Value = "" And alt <= 10 Then

tx2 = tx2 + vbCrLf + ActiveCell.Offset(0, -3).Value & " (" & Range("D1").Value & ")" & " - " & "[ " & alt & "]" & " Days left to pay "
End If
ActiveCell.Offset(1, 0).Select

Loop Until ActiveCell.Offset(1, -1).Value = ""

ElseIf i = 3 Then

Range("F2").Select
Do
alt = ActiveCell.Offset(0, 1).Value - tgt

If ActiveCell.Value = "" And alt < 0 Then

tx5 = ActiveCell.Offset(0, -5).Value & " (" & Range("F1").Value & ")" & " - " & "[ " & alt & "]" & " Days left to pay "

If MsgBox("Did you pay tax for this" & vbCrLf & tx5, vbYesNo) = vbYes Then
ActiveCell.Value = "x"
Else

End If
End If

If ActiveCell.Value = "" And alt <= 10 Then

tx3 = tx3 + vbCrLf + ActiveCell.Offset(0, -5).Value & " (" & Range("F1").Value & ")" & " - " & "[ " & alt & "]" & " Days left to pay "
End If
ActiveCell.Offset(1, 0).Select

Loop Until ActiveCell.Offset(1, -1).Value = ""

ElseIf i = 4 Then

Range("H2").Select
Do
alt = ActiveCell.Offset(0, 1).Value - tgt

If ActiveCell.Value = "" And alt < 0 Then

tx5 = ActiveCell.Offset(0, -7).Value & " (" & Range("H1").Value & ")" & " - " & "[ " & alt & "]" & " Days left to pay "

If MsgBox("Did you pay tax for this" & vbCrLf & tx5, vbYesNo) = vbYes Then
ActiveCell.Value = "x"
Else

End If
End If

If ActiveCell.Value = "" And alt <= 10 Then

tx4 = tx4 + vbCrLf + ActiveCell.Offset(0, -7).Value & " (" & Range("H1").Value & ")" & " - " & "[ " & alt & "]" & " Days left to pay "
End If
ActiveCell.Offset(1, 0).Select

Loop Until ActiveCell.Offset(1, -1).Value = ""

End If

Next

MsgBox tx & vbCrLf & tx2 & vbCrLf & tx3 & vbCrLf & tx4

End Sub

3 réponses

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    le temps de travail de l'alerte est 10 jours avant la date de paiement et 10 après la date de paiement, +1.+2+3...+10 ou -1.-2.-3...10 . J'ai appliqué une petite correction dans les MFC du tableau.Dites-moi si c'est bon.
    Pour ce qui est de la présentation du tableau final, Ce que vous voulez, c'est tout simplement une présentation verticale du tableau d'origine, je n'ai donc pas choisi la présentation que vous proposiez (trop lourd à mettre en oeuvre). j'ai simplement opté pour la restitution du résultat dans une feuille à part qui aura le même effet. Essayez
    https://www.cjoint.com/c/EGoekKd54Ww
    Cdlt
    1
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    l'ordre de son travail ne marche pas
    Normal, vous décalez 2 fois à chaque boucle, 1 fois en sélectionnant la cellule, puis une deuxième fois dans la boucle
    ActiveCell.Offset(1, 0).Select 
    Loop Until ActiveCell.Offset(1, -1).Value = ""

    A remplacer par
    ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell.Offset(0, -1).Value = ""

    A tester
    Cdlt
    0
    1. nonossov Messages postés 638 Statut Membre
       
      il ne marche pas, si je met 11/07/2015 il me donne 89 jours reste a payer mais il faut me donne un jours reste, c'est a dire demain
      0
    2. nonossov Messages postés 638 Statut Membre
       
      up merci de m'aider
      0
    3. Frenchie83 Messages postés 2254 Statut Membre 339
       
      Bonjour
      Cela vient du format "DATE" que vous avez appliquez à la variable "TGT" . Vous forcez le format avec "mm/dd/yyyy" alors que les dates dans le tableau sont au format "dd/mm/yyyy" , il faut faire un choix. Ou bien, vous mettez
      tgt = Format(Date, "dd/mm/yyyy")
      et vous ne touchez pas au tableau ou alors
      tgt = Format(Date, "mm/dd/yyyy")
      , et vous corrigez les dates du tableau.
      Cdlt
      0
    4. nonossov Messages postés 638 Statut Membre
       
      oui il fonctionne, est ce que vous pouvez Mr, me donner une presetation de la resultat mieux que j'ai???
      0
  3. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonsoir
    l'inconvénient avec le principe précédent, c'est que vous perdez les informations dès que vous validez le résultat, Je vous propose ici, si ça vous convient, de rajouter un tableau qui conserve l'information en faisant les calculs sur la date avec une mise en forme conditionnelle en fonction des échéances.
    https://www.cjoint.com/c/EGlqyxwEkew
    cdlt
    0
    1. nonossov Messages postés 638 Statut Membre
       
      Mr frenchie83 merci infiniment pour le travail, vraiment j'ai aime l'idée mais le tableau sera plus long que ça, je préféré si vous permettez d'améliorer le tableau final de la résultat pouvez faire un tableau comme celui là, ci-joint https://www.cjoint.com/c/EGnjyMdFFff
      merci infiniment
      0
    2. nonossov Messages postés 638 Statut Membre
       
      Ah une chose de plus, :), le temps de travail de l'alerte est 10 jours avant la date de paiement et 10 après la date de paiement, +1.+2+3...+10 ou -1.-2.-3...10
      merci beaucoup pour votre effort.
      0