différence entre 2 date créant une alerte + exportation de la ligne incriminée

philousoob

XLDnaute Nouveau
Bonjour,

J'ai un tableau excel avec des produits (nature, référence, date d'entrée), une durée de présence de produit (loué) dans le stock entraînant une surfacturation, j'aimerais que les produits étant en stock depuis une certaine durée (différence entre la date du jour et la date d'entrée du produit en stock) soit exportés (sa ligne : nature référence et date d'entrée) dans un autre tableau (sur un onglet différent).

Je suis vraiment débutant et je ne sais vraiment pas comment procéder?

Je vous joins mon fichier excel.

Je vous remercie,

Philippe G
 

Pièces jointes

  • Classeur1.xlsm
    32.7 KB · Affichages: 29
  • Classeur1.xlsm
    32.7 KB · Affichages: 34
  • Classeur1.xlsm
    32.7 KB · Affichages: 41

Modeste

XLDnaute Barbatruc
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

Bonjour Philippe,

Débutant, débutant ... c'est à voir! :rolleyes:
Si tu veux supprimer des données d'une feuille, pour les transférer dans une autre, tu auras compris qu'il faut obligatoirement passer par une macro? (enfin ... il ne me semble pas que ce soit possible autrement!?)

Tu ne précises pas s'il y a un lien avec le bouton "Supprimer" de ton UserForm2?
Tu ne dis pas non plus à combien se chiffre une "certaine durée"?
Enfin, il faut aussi déterminer ce qui déclenchera ce "transfert de données" (le bouton de ton UserForm, une exécution "à la demande" ou automatique à l'ouverture du fichier, ...)?
 

philousoob

XLDnaute Nouveau
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

Merci de ta réponse rapide,

Je voudrais que la ligne (référence, nature date ...) se copie dans un autre onglet, lorsque la différences entre la date d'arrivée et la date du jour excède par exemple 2 mois. Je ne veux pas que cette ligne soit supprimée du tableau initial, juste que, au moins la référence et la date d'arrivée, soit copiée dans un autre tableau.
Il n'y a a priori aucun lien avec mon userform2, celui sert a ajouter/supprimer des références.
Idéalement, ce transfert de données se ferait à l'ouverture du classeur.

Philippe G.
 

Pièces jointes

  • Classeur1.xlsm
    32.9 KB · Affichages: 26
  • Classeur1.xlsm
    32.9 KB · Affichages: 36
  • Classeur1.xlsm
    32.9 KB · Affichages: 42

Modeste

XLDnaute Barbatruc
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

Re-bonjour,

Il y a -sans le moindre doute- plusieurs solutions ... Si on commençait avec une version "simple"?
En A8 (ou F8) de la feuille "Site 1", écris:
Code:
=SI(DATE(ANNEE(AUJOURDHUI());MOIS(AUJOURDHUI())-2;JOUR(AUJOURDHUI()))>E8;LIGNE();"")
et recopie cette formule vers le bas. Cette colonne pourra ensuite être masquée, si besoin.

Dans la feuille où tu veux retrouver la liste des "vieilleries" :D, écris, dans une cellule de ton choix:
Code:
=INDEX('Site 1'!$B$1:$E$97;PETITE.VALEUR('Site 1'!$A$8:$A$97;LIGNES($1:1));COLONNES($A:A))
et recopie en bas et à droite (sur 4 colonnes maximum)

Fais des tests et, si ça convient, on n'aura plus qu'à masquer les #NOMBRE!
 

philousoob

XLDnaute Nouveau
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

j'ai un peu de mal a comprendre la deuxième partie, je te joins le fichier, peux-tu me l'écrire?

Je te remercie :)

Philippe G.
 

Pièces jointes

  • Classeur1.xlsm
    49.7 KB · Affichages: 23
  • Classeur1.xlsm
    49.7 KB · Affichages: 24
  • Classeur1.xlsm
    49.7 KB · Affichages: 24

Modeste

XLDnaute Barbatruc
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

j'ai un peu de mal a comprendre la deuxième partie
Ben, le résultat qui s'affichait en D18 de ton fichier était correct, il me semble? Il suffisait de coller cette formule en D6, plutôt que D18.

Par contre ma formule en A8 de la feuille "Site 1" était incomplète (puisque le n° de ligne s'affichait, même si aucune date n'était renseignée en colonne E). Je l'ai modifiée dans la pièce jointe.

Par ailleurs, un doute m'assaille: je vois que tu as ajouté une feuille "Site 3" ... Ton idée serait-elle d'avoir, en feuille "Alertes" la même chose, mais pour les 3 feuilles "Site x" :eek::confused: (parce que, si oui, ma proposition ne convient pas, mais alors pas du tout! :(
 

Pièces jointes

  • Alertes (philousoob).xlsm
    44.9 KB · Affichages: 18

Modeste

XLDnaute Barbatruc
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

arf oui hélas, j'aurais du le préciser, cela reste possible via une autre méthode?

Vous eussiez pu, je le confirme!
Une autre méthode sûrement ... mais je ne vois qu'une macro!? Allez, une petite pour s'ouvrir l'appétit ...

Colle les lignes suivantes dans la fenêtre de code de la feuille "Alertes":
VB:
Private Sub Worksheet_Activate()
    Dim tabloRes()
    tabloF = Array("Site 1", "Site 2", "Site 3") 'tableau des feuilles à traiter
    dtPivot = DateSerial(Year(Date), Month(Date) - 2, Day(Date)) 'date il y a 2 mois
    Sheets("Alertes").[D6].Resize([D5].CurrentRegion.Rows.Count, 4).ClearContents
    For f = 0 To UBound(tabloF)
        With Sheets(tabloF(f))
        derligne = .Cells(Rows.Count, 2).End(xlUp).Row 'n° ligne dernière Id en colonne B
        If derligne > 7 Then 'si rien sous les titres
        For lig = 8 To derligne
            If .Cells(lig, 5) < dtPivot Then
                ReDim Preserve tabloRes(3, x)
                For y = 0 To 3
                    tabloRes(y, x) = .Cells(lig, 2 + y)
                Next y
                x = x + 1
            End If
        Next lig
        End If
        End With
    Next f
Sheets("Alertes").[D6].Resize(x, 4) = Application.Transpose(tabloRes) 'on colle le contenu du tableau en mémoire
End Sub
Le code s'exécutera à chaque activation de la feuille "Alertes". Préviens si tu risques de dépasser 65.000 produits à transférer dans cette feuille (Transpose ne fonctionnerait plus!)

Test et dis-nous
 

philousoob

XLDnaute Nouveau
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

Bonjour,

Je vous remercie de votre implication !
Il semble qu'il y est un problème avec l'avant dernière ligne?
Je vous joins mon fichier ainsi que la capture d'écran.

Merci,

Philippe G.
 

Pièces jointes

  • Classeur1.xlsm
    49.8 KB · Affichages: 23
  • Image1.jpg
    Image1.jpg
    69.2 KB · Affichages: 17
  • Classeur1.xlsm
    49.8 KB · Affichages: 23
  • Image1.jpg
    Image1.jpg
    69.2 KB · Affichages: 23
  • Classeur1.xlsm
    49.8 KB · Affichages: 31
  • Image1.jpg
    Image1.jpg
    69.2 KB · Affichages: 18

Modeste

XLDnaute Barbatruc
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

Bonjour Philippe, le forum,

Le problème survient lorsque les 3 feuilles "Site" ne contiennent aucune info à "transférer".
Modifie donc la dernière ligne de code comme ceci:
VB:
If x > 0 Then Sheets("Alertes").[D6].Resize(x, 4) = Application.Transpose(tabloRes)
 

philousoob

XLDnaute Nouveau
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

Votre code fonctionne très bien, les produits dont la date est >3mois s'inscrivent bien dans le tableau alertes, cependant, les dates s'affichant dans l'onglet "alertes" sont inversées(format anglais?).

Exemple : on est le 15/06/2015, un produit datant du 10/03/2015 s'inscrit bien dans "alerte" mais la date s'y inscrivant est notée 10/03/2015, a quoi celà est-il dû ?

Un grand merci a vous !

Philippe G.
 

Pièces jointes

  • Classeur1.xlsm
    52.3 KB · Affichages: 27
  • Classeur1.xlsm
    52.3 KB · Affichages: 27
  • Classeur1.xlsm
    52.3 KB · Affichages: 31

philousoob

XLDnaute Nouveau
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

Le problème vient de la saisie initiale, par exemple dans "site 1", lorsque je rentre une nouvelle référence avec la date : 02/03/2015, elle s'affiche comme celà : 03/02/2015, (le moi et le jour sont inversés : format anglais?), j'ai vérifié cela ne vient pas du format des cellules, un autre indice, lorsque le chiffre des jour est >10, cela marche bien ( 17/02/2015 : 17/02/2015).

Sauriez-vous d'où vient ce problème??
 

Modeste

XLDnaute Barbatruc
Re : différence entre 2 date créant une alerte + exportation de la ligne incriminée

Re-bonjour,

Il faudrait savoir, effectivement, quand et comment le problème survient.
Dans le code de ton UserForm3, teste ceci
VB:
.Cells(bas, 5) = CDate(Me.TextBox2.Text)
... uniquement pour la ligne de transfert de la date du textBox vers une cellule!


D'autre part, le 'Application.Transpose' que j'utilse dans le code, convertit les dates lui aussi.
Il y a peut-être plus simple ou plus élégant, mais voici une version qui semble fonctionner
VB:
Private Sub Worksheet_Activate()
    Dim tabloRes(), tabloBis
    tabloF = Array("Site 1", "Site 2", "Site 3") 'tableau des feuilles à traiter
   dtPivot = DateSerial(Year(Date), Month(Date) - 3, Day(Date)) 'date il y a 3 mois
   Sheets("Alertes").[D6].Resize([D5].CurrentRegion.Rows.Count, 4).ClearContents
    For f = 0 To UBound(tabloF)
        With Sheets(tabloF(f))
        derligne = .Cells(Rows.Count, 2).End(xlUp).Row 'n° ligne dernière Id en colonne B
       If derligne > 7 Then 'si rien sous les titres
       For lig = 8 To derligne
            If .Cells(lig, 5) < dtPivot Then
                ReDim Preserve tabloRes(3, x)
                For y = 0 To 3
                    tabloRes(y, x) = .Cells(lig, 2 + y)
                Next y
                x = x + 1
            End If
        Next lig
        End If
        End With
    Next f
If x > 0 Then
ReDim tabloBis(x - 1, 3)
For ligne = 0 To x - 1
    For colonne = 0 To 3
        tabloBis(ligne, colonne) = tabloRes(colonne, ligne)
    Next colonne
Next ligne
Sheets("Alertes").[D6].Resize(x, 4) = tabloBis
End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz