Manipulation de date

Résolu/Fermé
Kuartz Messages postés 852 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 25 juin 2015 à 08:58
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 25 juin 2015 à 15:23
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754
25 juin 2015 à 09:43
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 vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
25 juin 2015 à 10:00
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754
25 juin 2015 à 10:14
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 vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
25 juin 2015 à 10:20
"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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754 > Kuartz Messages postés 852 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019
25 juin 2015 à 10:21
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 vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
Modifié par Kuartz le 25/06/2015 à 10:46
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754 > Kuartz Messages postés 852 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019
25 juin 2015 à 10:51
Tu n'as plus qu'à répondre aux questions ICI
0
Kuartz Messages postés 852 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 25/06/2015 à 10:34
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754
25 juin 2015 à 10:41
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 vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
25 juin 2015 à 10:59
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754
25 juin 2015 à 11:14
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 vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
25 juin 2015 à 11:49
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754 > Kuartz Messages postés 852 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019
25 juin 2015 à 12:06
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
25 juin 2015 à 12:51
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
25 juin 2015 à 13:47
Concernant ta seconde question, elle est en bonne voie ici :
https://forums.commentcamarche.net/forum/affich-32156064-comparaison-de-2-tableaux
0