Manipulation de date

Résolu
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   -
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

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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?
0
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61
 
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.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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.
0
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61 > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
"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....
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention  
 
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é.
0
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61 > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
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"
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention  
 
Tu n'as plus qu'à répondre aux questions ICI
0
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61
 
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.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61
 
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.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Pour être sur.....
1- les dates sont en colonne A de la feuille Sheets(1)

2- Es tu sur de ton test : 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)
En effet, il y a deux fois Sheets(1).Col(C)

3- en fait le point 4 évoqué avant correspond à ce test?

4- les feuilles concernées sont bien Sheets(1) et Sheets(2)?

5- 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).
Plus question de Sheets(4)??? C'est ton dernier mot?
0
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   61 > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
1 - Exact

2 - Non, je me suis complètement planté..... Pardon. 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).

Sachant qu'il faut comparer chaque cellule étant donné que les valeurs ne sont pas triées et ne doivent pas l'être.

3 - Le code que j'utilise provient d'un autre fichier excel mais les conditions sont vraiment différentes.

4 - Oui.

5 - Oui, c'est mon dernier mot.

Merci.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention  
 
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???
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
Combien de lignes à traiter???

Combien de colonnes à copier/coller?
Nom de la dernière colonne remplie?
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
Concernant ta seconde question, elle est en bonne voie ici :
https://forums.commentcamarche.net/forum/affich-32156064-comparaison-de-2-tableaux
0