Combinaison Index/Colonne?

rendan2

XLDnaute Nouveau
Bonsoir à tous,


Je viens demander un peu d’aide ici. Je ne suis même pas convaincu du titre de mon post, mais ne sais pas trop comment appeler ma recherche.

Concrètement, je souhaiterais pouvoir trouver une formule qui remplirai automatiquement le tableau en pièce-jointe de la manière suivante :

  1. Nous sommes par exemple aujourd’hui le 11/04/17. Je souhaiterai que la formule insère le chiffre ‘1’ et ‘2’ pour toutes les cellules des lignes 6 à 9 en fonction du nombre situé dans la colonne C.

  2. Ligne 7 à 9 : Il faudra donc que la formule identifie d’abord quel mois nous sommes (symbolisé par la cellule AK5 dans mon exemple), puis qu’elle ajoute le chiffre ‘1’ à partir du mois précédent le mois en cours (01/03/2017 ou M-1 dans mon exemple) et enfin qu’elle répartisse les chiffres 1 et 2 autour de cette date selon le critère en colonne B. Dès lors que l’on dépasse la date en cours, il faut donc mettre le chiffre 2, mais toujours en fonction du critère en colonne C.

  3. Ligne 6 : petite demande supplémentaire, je souhaiterai pour la cellule C9 que soit automatiquement calculé la différence entre le mois en cours (qui doit donc être automatiquement identifié) et le mois qui sera rentré manuellement en C2 . Ensuite, il faudra automatiquement ajouter le chiffre entre ces 2 dates. Pour ce cas précis il ne sera pas nécessaire d’ajouter le chiffre 2 au-delà du mois en cours.

J’ai essayé d’être le plus clair possible mais pas facile à expliquer, aussi j’espère que le fichier sera assez parlant. Si vous ne comprenez pas, n’hésitez pas à me demander des précisions.



Merci d’avance pour votre précieuse aide, et bonne soirée à tous.

Daniel
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello

Un début de solution par VBA

VB:
Sub refresh()
Application.ScreenUpdating = False
PremierJour = DateSerial(Year(Now), Month(Now), 1)

Set c = ActiveSheet.Range("5:5").Find(PremierJour, lookat:=xlWhole) 'on cherche la colonne du mois en cours
If Not c Is Nothing Then
    For i = 1 To 4
        nb = Range("C" & i + 5) * -1
        c.Offset(i, nb).Resize(1, nb * -1) = 1
        c.Offset(i, 0).Resize(1, nb * -1) = 2
    Next i
End If
Application.ScreenUpdating = True
End Sub
 

rendan2

XLDnaute Nouveau
Bonjour JHA,

Je viens de regarder ta solution et ca marche très bien pour les points 1) et 2). C'est super!

S'agissant du point 3, désolé si mon explication n'étais pas claire. Je pense que tu as déjà en partie trouvé la solution. Ce cas est un peu différent des précédents dans le sens où je ne cherche pas à faire une répartion de chiffre 1 et 2 autour d'une date, mais juste identifier le début et la fin d'une période en mettant le chiffre 1. Je cherche à calculer un YTD (Year to date) si ca te parle.
Dans le fichier, je n'ai donc pas besoin des chiffres 2 en cellules AK6:AR6. Elles doivent rester vides.

Encore merci pour ton aide.

DT
 

rendan2

XLDnaute Nouveau
Bonjour JHA,

Je viens de regarder ta solution et ca marche très bien pour les points 1) et 2). C'est super!

S'agissant du point 3, désolé si mon explication n'étais pas claire. Je pense que tu as déjà en partie trouvé la solution. Ce cas est un peu différent des précédents dans le sens où je ne cherche pas à faire une répartion de chiffre 1 et 2 autour d'une date, mais juste identifier le début et la fin d'une période en mettant le chiffre 1. Je cherche à calculer un YTD (Year to date) si ca te parle.
Dans le fichier, je n'ai donc pas besoin des chiffres 2 en cellules AK6:AR6. Elles doivent rester vides.

Encore merci pour ton aide.

DT
 

rendan2

XLDnaute Nouveau
Re-bonjour JHA:
Je vois d'où viens la confusion dans mon explication. Dans le point 1, je fais référence aux lignes 6 à 9 alors que j'aurais d'u faire référence aux lignes 7 à 9 pour la répartition des chiffres 1 et 2.
La ligne 6 est donc bien un cas différent qui attend j'imagine une formule différente des lignes 7 à 9.

Encore désolé pour la confusion.

Merci
DT
 

rendan2

XLDnaute Nouveau
Hello

Un début de solution par VBA

VB:
Sub refresh()
Application.ScreenUpdating = False
PremierJour = DateSerial(Year(Now), Month(Now), 1)

Set c = ActiveSheet.Range("5:5").Find(PremierJour, lookat:=xlWhole) 'on cherche la colonne du mois en cours
If Not c Is Nothing Then
    For i = 1 To 4
        nb = Range("C" & i + 5) * -1
        c.Offset(i, nb).Resize(1, nb * -1) = 1
        c.Offset(i, 0).Resize(1, nb * -1) = 2
    Next i
End If
Application.ScreenUpdating = True
End Sub
 

rendan2

XLDnaute Nouveau
Bonjour Vgendron,

Merci beaucoup pour ton aide!
Je n'avais pas vu ta réponse avec la solution en VBA. Cela marche très bien !
Probablement pour les mêmes raisons que la solution qui a été proposé par JHA en passant par une formule Excel, pour le cas n° 3 (ou ligne 6) j'aurai par contre souhaité que la macro réagisse différement, car il s'agit d'un autre cas. Qu'elle ne mette que des "1" pour identifier le début et la fin de la période entre la date définie manuellement en "C2" et le mois actuel.
Dans mon exemple, si je mets '01/07/2016' en C2, je souhaiterai voir apparaitre le chiffre "1" dans les cellules "AB6:AJ6", ce qui veut dire que les cellules restent bien vides au-delà de AJ6.

Encore merci!

DT
 

vgendron

XLDnaute Barbatruc
Hello JHA, rendan2

pour le point 3... cellule C6
=DATEDIF(C2;AUJOURDHUI();"M")
ou alors. pour reproduire ce que fait le code en fait
=DATEDIF(C2;DATE(ANNEE(AUJOURDHUI());MOIS(AUJOURDHUI());1);"M")

et le code modifié pour ne pas mettre de 2 dans la ligne 6
VB:
Sub refresh()
Application.ScreenUpdating = False
PremierJour = DateSerial(Year(Now), Month(Now), 1)

Set c = ActiveSheet.Range("5:5").Find(PremierJour, lookat:=xlWhole) 'on cherche la colonne du mois en cours
If Not c Is Nothing Then
    For i = 1 To 4
        nb = Range("C" & i + 5) * -1
        c.Offset(i, nb).Resize(1, nb * -1) = 1
        If i <> 1 Then c.Offset(i, 0).Resize(1, nb * -1) = 2
    Next i
End If
Application.ScreenUpdating = True
End Sub
 

rendan2

XLDnaute Nouveau
Hello Vgendron et JHA,

Mille mercis pour vos solutions!!!! Elles fonctionnent toutes parfaitement. Je suis vraiment impressioné par ce que vous êtes capables de faire. J'aurai ainsi le choix entre la macro et la formule Excel.

Bonne journée à tous les deux et bonnes fêtes de Paques, si vous aimez les oeufs et le chocolat ;-)

DT
 

Discussions similaires

Réponses
3
Affichages
236
Réponses
4
Affichages
277

Statistiques des forums

Discussions
312 234
Messages
2 086 467
Membres
103 226
dernier inscrit
smail12