Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Formule date la plus proche

Away59

XLDnaute Nouveau
Bonjour,

Afin de m'organiser au mieux dans mes rappels de prospection je souahite avoir mon document excel de manière automatique.

C'est à dire, lorsque je l'ouvre, j'aimerais bien avoir la liste des personnes à contacter dans l'ordre par rapport à aujourd'hui.

Je voudrais éviter de passer par le filtre.

J'ai trouvé des formules sur internet, mais cela fonctionne uniquement pour une cellule. J'aimerais que ce soit la colonne en entier.

Dans l’exemple ci joint, le prochain RDV sera la 17/07/2017, donc comment faire en sorte que par formule, il apparaisse en premier ?
 

Pièces jointes

  • test.xlsx
    15.5 KB · Affichages: 38

Away59

XLDnaute Nouveau
Bonjour DoubleZero,

Cela est juste déjà parfait ! C'est exactement ce que je voulais.

Quand on ne connaît pas Excel, tout reste compliqué.

J'ai un peu peur que ce soit trop demandé, mais est-il possible de faire en sorte qu'une boite de dialogue apparaisse avec tous les champs des mes colonnes ?

C'est à dire qu'une fois tous les champs remplis, tout se réécrit automatiquement dans les cellules.
(Visuellement, ca serait un kif ! )

Merci de ton aide,

Bonne journée.
 

job75

XLDnaute Barbatruc
Bonjour Away59, chère ânesse

Pourquoi "dans l'ordre par rapport à aujourd'hui" ? Il suffit de classer les dates.

Cela peut se faire sans VBA, voyez les 2 fichiers joints.

1) Avec une MFC pour colorer les lignes c'est très simple.

Sélectionner J3 puis onglet DONNÉES => Trier de A à Z

Pour revenir à l'ordre initial faire la même chose en sélectionnant A3.

Bien sûr il ne faut pas de formules en colonne A.

2) Avec des formules matricielles dans une 2ème feuille c'est beaucoup plus compliqué.

Commencez par la formule matricielle en J4, à tirer vers le bas.

Les formules matricielles des autres colonnes (identiques) dépendent toutes de la colonne J.

A+
 

Pièces jointes

  • Classement des dates avec MFC(1).xlsx
    16.6 KB · Affichages: 21
  • Classement des dates en matriciel(1).xlsx
    29.2 KB · Affichages: 21

Away59

XLDnaute Nouveau


Bonjour,

Merci, mais Double Zéro m'a déjà fait le document et il est parfait.
Je sais très bien que j'aurais pu faire Trier par Ordre. Mais quand on peut se simplifier la tache encore plus rapidement...

"Par rapport a aujourd'hui" car si j'ai un document de 200 lignes, j'aimerai avoir en premier les prochain client que je dois contacter !

En ce qui concerne ma seconde commande, c'est encore dans un esprit de gain de temps, pour pouvoir remplir de grande quantité de ligne sans passer par les cellules excel.
 

DoubleZero

XLDnaute Barbatruc
Bonjour, Away59, cher jb75, le Forum,

...En ce qui concerne ma seconde commande, c'est encore dans un esprit de gain de temps, pour pouvoir remplir de grande quantité de ligne sans passer par les cellules excel.
Away59, je ne cmprends pas le besoin. Un nouveau fichier, doté d'un onglet exemple, permettrait, peut-être, de connaître l'orientation idoine afin de satisfaire la demande.

A bientôt
 

job75

XLDnaute Barbatruc
Re,
"Par rapport a aujourd'hui" car si j'ai un document de 200 lignes, j'aimerai avoir en premier les prochain client que je dois contacter !
D'accord, il faut alors du VBA.

Les 3 premières lignes de la feuille étant figées, trier sur les dates et cadrer la date du prochain RV :
Code:
Private Sub Workbook_Open()
Dim i As Variant
Application.ScreenUpdating = False
With Feuil1
  .[A3].CurrentRegion.Sort .[J3], xlAscending, Header:=xlYes 'tri sur les dates
  i = Application.Match(CLng(Date) - "1E-9", .[J:J])
  If IsError(i) Then i = 3
  Application.Goto .Cells(i + 1, 1), True 'cadrage
  .Cells(i + 1, 10).Select
End With
End Sub
Les dates antérieures à la date du jour sont donc cachées, j'en ai mis une dans le fichier joint.

Bien sûr il y a toujours la MFC pour colorer les lignes.

A+
 

Pièces jointes

  • Classement des dates par VBA avec MFC(1).xlsm
    22.7 KB · Affichages: 23

job75

XLDnaute Barbatruc
Re,

A mon avis, plutôt que la Workbook_Open, il vaut mieux un bouton :
Code:
Private Sub CommandButton1_Click()
Dim i As Variant
Application.ScreenUpdating = False
If CommandButton1.Caption = "Prochains RDV" Then
  [A3].CurrentRegion.Sort [J3], xlAscending, Header:=xlYes 'tri sur les dates
  i = Application.Match(CLng(Date) - "1E-9", [J:J])
  If IsError(i) Then i = 3
  Application.Goto Cells(i + 1, 1), True 'cadrage
  Cells(i + 1, 10).Select
  CommandButton1.Caption = "Ordre initial"
Else
  [A3].CurrentRegion.Sort [A3], xlAscending, Header:=xlYes 'tri sur les N°
  Application.Goto [A1], True
  CommandButton1.Caption = "Prochains RDV"
End If
End Sub
Fichier (2).

Pour la dernière question il y a de nombreuses discussions sur le forum qui traitent du remplissage d'une BDD par un UserForm, faites des recherches.

C'est toujours un travail de longue haleine car il faut :

- éviter la création de doublons dans la BDD

- prévoir des recherches diverses et variées via des ComboBox

- prévoir les macros pour la création ou la modification des lignes via des TextBox

- prévoir l'affichage de la BDD filtrée dans une ListBox ou une ListView.

A+
 

Pièces jointes

  • Classement des dates par VBA avec MFC(2).xlsm
    28 KB · Affichages: 18

job75

XLDnaute Barbatruc
Re,

Il faut savoir qu'à partir d'Excel 2007 on peut organiser la BDD en tableau Excel (menu INSERTION).

Voyez ce fichier, plus besoin de MFC.

Bonne fin de soirée.
 

Pièces jointes

  • Classement des dates par VBA sur tableau Excel(1).xlsm
    27.8 KB · Affichages: 23

job75

XLDnaute Barbatruc
Bonjour Away59, DoubleZero, le forum,

Pour obtenir une numérotation automatique en colonne A :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Range
With ListObjects(1).Range 'tableau Excel
  Application.EnableEvents = False 'désactive les évènements
  If Not Intersect(Target, .Columns(1)) Is Nothing Then
    For Each a In Target.Areas
      If a.Columns.Count < .Columns.Count Then Application.Undo: Exit For 'annule la modification
    Next
    ListObjects(1).Resize .Cells 'redimensionnement éventuel
    If Not Intersect(Target, .Cells(.Rows.Count, 1)) Is Nothing Then _
      .Cells(.Rows.Count, 1) = "" 'en cas d'entrée manuelle du N°
  End If
  If Application.CountBlank(.Columns(1)) Then 's'il manque des N°
    .Sort .Columns(1), xlAscending, Header:=xlYes 'tri sur les N°
    CommandButton1.Caption = "Prochains RDV"
    .Cells(2, 1) = 1
    .Cells(2, 1).Resize(.Rows.Count - 1).DataSeries 'nouvelle numérotation
  End If
  Application.EnableEvents = True 'réactive les évènements
End With
End Sub
J'ai aussi adapté la macro du bouton au tableau Excel.

On peut donc déplacer le tableau par insertion/suppression de lignes ou colonnes.

Fichier (2).

Bonne journée.
 

Pièces jointes

  • Classement des dates par VBA sur tableau Excel(2).xlsm
    31 KB · Affichages: 21

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…