Manipulation de date

[Résolu/Fermé]
Signaler
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
-
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
-
Bonjour,

J'aurais voulu intégrer à un code VBA, le fait que si la date dans la colonne B + 30 jours est inférieure à la date d'aujourd'hui, alors la ligne entière soit supprimée.

Quelqu'un peut-il m'aider svp?

Merci d'avance.

Cordialement.

5 réponses

Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 653
Bonjour,

Quelqu'un peut-il m'aider svp?

Bien entendu.

1- a-t'on, selon toi, besoin de vérifier que la cellule dans la colonne B contient une date?
En clair, dans ta colonne B peut-il y avoir autre chose qu'une date?
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51
En fait, la colonne B contient des valeurs qui proviennent d'une extraction de mon SAP. Elles sont en format "Personnalisé" en mode "jjmmaa".

Peut-être effectivement faudrait-il forcer une conversion en date?

Merci d'avance.

Cordialement.
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 653
Peux tu essayer ce code :

Sub Test()
Dim L As Long, DL As Long
    DL = Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
    For L = 2 To DL
        If Not IsDate(Cells(L, 2)) Then MsgBox "Il n'y a pas que des dates. Cf ligne : " & L: GoTo Fin
    Next L
    MsgBox "Il n'y a que des dates"
Fin:
End Sub


Et revenir me dire quel est le message obtenu.
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51 >
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021

"Il n'y a pas que des dates". C'est ce que je pensais, il faut d'abord avoir un code qui convertisse tout en date....
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 653 >
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019

Tu ne m'as pas donné le message entier.
Il est important de connaitre, pour moi, le numéro de la ligne qui t'a bloqué.
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51 >
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021

Sub Test()
Dim L As Long, DL As Long
    DL = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    For L = 5 To DL
        If Not IsDate(Cells(L, 1)) Then MsgBox "Il n'y a pas que des dates. Cf ligne : " & L: GoTo Fin
    Next L
    MsgBox "Il n'y a que des dates"
Fin:
End Sub


Voilà le code que j'ai mis. En effet, les dates sont en A (erreur de ma part) et le tableau commence à la ligne 5.

Et le message est "Il n'y a que des dates"
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 653 >
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019

Tu n'as plus qu'à répondre aux questions ICI
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51
Pendant que je vous tiens, serait-il possible que tu m'aide dans ce code également?

Sub COMPARATIF()
Dim DLig As Long
Dim DLig2 As Long
DLig = Sheets(1).Range("C5").End(xlDown).Row
DLig2 = Sheets(2).Range("C5").End(xlDown).Row
x = 3
'boucle sur les lignes de Feuil2
For t = 5 To DLig2

If Application.WorksheetFunction.CountIf(Sheets(1).Range("C:C"), Sheets(2).Range("C" & t)) = 0 Then
    x = x + 1
        For k = 1 To 10
        Sheets(4).Cells(x, k) = Sheets(2).Cells(t, k)
        Next
        Sheets(4).Range("K" & x) = "La référence n'est pas dans le grand livre"
    End If
Next t

'boucle sur les lignes de Feuil1
For t = 5 To DLig
If Application.WorksheetFunction.CountIf(Sheets(2).Range("C:C"), Sheets(1).Range("C" & t)) = 0 Then
    x = x + 1
        For k = 1 To 10
        Sheets(4).Cells(x, k) = Sheets(1).Cells(t, k)
        Next
        Sheets(4).Range("K" & x) = "La référence n'est pas dans le tableau de relance"
    End If
Next t
End Sub


Je vous explique, en fait, je n'arrive pas à créer un code ou des conditions se succederaient. J'ai besoin de comparer les colonnes C, E et J et là je ne compare que la colonne C qui n'est pas un conditions suffisante. Mais je n'arrive pas à intégrer plusieurs variables, j'ai du mal en VBA. Dès que j'ajoute une variable à t, ça ne marche plus. En fait, il faut que les colonnes C, E, et J soient égales pour qu'il ne se passe rien. Sinon la ligne est copiée sur une feuille 4 avec un commentaire.

De plus, si au lieu de copier la ligne sur la feuille 4, la ligne pouvait être supprimée du tableau 2 dans le cas ou "La référence n'est pas dans le grand livre" et ou alors ajoutée sur le tableau dans le cas ou "La référence n'est pas dans le tableau de relance".

Désolé de la complexité de ma demande et merci infiniment de m'aider.

Cordialement.
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 653
1- répondre à ma dernière question ICI
2- Si Sheets(1).Col(C) = Sheets(2).Col(C) ET Sheets(1).Col(E) = Sheets(2).Col(E) ET Sheets(1).Col(J) = Sheets(2).Col(J) alors on ne fait rien, sinon on copie/colle dans la Sheets(4).
C'est ça?
3- quel est le rapport avec la question en cours sur les dates colonne B??
4- De plus, si au lieu de copier la ligne sur la feuille 4, la ligne pouvait être supprimée du tableau 2 dans le cas ou "La référence n'est pas dans le grand livre" et ou alors ajoutée sur le tableau dans le cas ou "La référence n'est pas dans le tableau de relance".
Ne me parle pas du tout.
Il te faut traduire en termes Excel :
"La référence n'est pas dans le grand livre"
par exemple : la valeur contenue dans la colonne V n'est pas référencée colonne A de la feuille "Gd Livre"...
"La référence n'est pas dans le tableau de relance"??? Même chose
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51
1 - "Il n'y a que des dates"
2 - C'est presque ça mais effectivement, ce sera beaucoup plus simple dans ce langage là. Je traduis ma demande :
Si Sheets(1).Col(C) = Sheets(2).Col(E) ET Sheets(1).Col(E) = Sheets(2).Col(J) ET Sheets(1).Col(C) = Sheets(2).Col(J) alors on ne fait rien, sinon Si une ligne (toujours en comparant les mêmes colonnes) appartient à Sheets(1) et pas à Sheets(2) alors, on l'ajoute à Sheets(2) et Si une ligne (toujours en comparant les mêmes colonnes) appartient à Sheets(2) et pas à Sheets(1) alors, on la supprime de Sheets(2).

D'où l'intérêt dans le code joint de comparer les tableaux dans un sens puis dans l'autre, savoir ce qui appartient à Sheets(1) et pas à Sheets(2) et inversement.

3- Le retraitement de la date fait partie des retraitements préalables à ce comparatif. Il s'agit d'un bouton sur lequel j'appuierai avant.

4- Je te prie de m'excuser pour ces phrases qui ne veulent absolument rien dire pour toi. En gros "La référence n'est pas dans le grand livre" veut dire : "La ligne est sur sheets(2) mais pas sur sheets(1)" Et "La référence n'est pas dans le tableau de relance" veut dire : "La ligne est sur Sheets(1) mais pas sur Sheets(2).
Sauf que je souhaiterais que ces phrases n'apparaissent plus et qu'à la place, les actions que j'ai formulé en haut soit exécutées, soit la suppression ou l'ajout des lignes.

Cordialement.
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 653 >
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019

Bon.
J'essaie de te faire un test pour cet après midi.
En attendant, essaie cette macro pour supprimer en fonction des dates en colonne A :
Sub Supprime_Selon_Date_Col_A()
Dim L As Long, DL As Long, maDate As Date
With Sheets(1)
   DL = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
   For L = DL To 2 Step -1
      maDate = .Range("A" & L)
      If DateSerial(Year(maDate), Month(maDate), Day(maDate) + 30) < Date Then
         .Rows(L).Delete
      End If
   Next L
End With
End Sub


Combien de lignes à traiter???
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 653 >
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021

Combien de lignes à traiter???

Combien de colonnes à copier/coller?
Nom de la dernière colonne remplie?
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 653 >
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021

Concernant ta seconde question, elle est en bonne voie ici :
https://forums.commentcamarche.net/forum/affich-32156064-comparaison-de-2-tableaux
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51
Merci beaucoup en tout cas, le code pour les dates est juste parfait :)
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 653 >
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019

de rien.
A++