Renvoyer le jour d'une date dans la cellule d'à coté

Bonjour à tous,

question du jour :

J'ai dans une plage de cellule une date au format mm/dd/yy.

Cette plage est en colonne B de B6 à B34 dans mon exemple, mais tout en sachant que cette plage est actuellement définie avec la variable i (i étant ma première cellule non vide en partant du bas) donc ma plage est ("B6" & ":B" & i).

De plus, j'ai déjà nommé dans mon code cette plage comme "colb" de cette façon :

ActiveWorkbook.Names.Add Name:="colb", RefersTo:=Worksheets("Charge").Range("B6" & ":B" & i)

Bref, j'aimerais que pour la même plage en A, soit (A6:A34) ou encore ("A6" & ":A" & i) ou encore "cola" car nommée également, je puisse récupérer le jour de cette date.

Quelle est donc du coup la façon la plus simple de coder : "dans cola je veux le jour de la date en colb" ou encore "dans plage cola pour chaque cellule je veux le jour correspondant à la date de la cellule d'à coté en colb"

Je suis parti là dessus mais ma syntaxe n'est pas bonne et il y a surement plus simple :

    Dim j As Range
    For Each j In Worksheets("Charge").Range("cola").Cells
    j = Day("B&i")
    Next

Merci par avance

Bonjour,

Essaie ça:

    Dim j As Range
    For Each j In Worksheets("Charge").Range("cola").Cells
    j = Day(Worksheets("Charge").Range("B" & j.row))
    Next

Ou:

    Dim j As Range
    For Each j In Worksheets("Charge").Range("cola").Cells
    j = Day(Worksheets("Charge").Range("B" & i))
    Next

Bonjour Gmarche, bonjour le forum,

Déjà :

ActiveWorkbook.Names.Add Name:="colb", RefersTo:=Worksheets("Charge").Range("B6:B" & i)

ensuite :

Sub Macro1()
Dim j As Range
For Each j In Range("cola")
    j.NumberFormat = "dd"
    j.Value = Day(j.Value)
Next j
End Sub

[Édition]

Bonjour Pedro, nos posts se sont croisés...

Merci à tous les deux, j'ai fait un mix de vos solutions et ça fonctionne.... sauf que mes jours ne sont pas bons..

Voici mon code :

    With Range("colb")
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .NumberFormat = "dd/mm/yy"
    End With

    '--> Ajout des jours dans la colonne jour de chargement
    With Range("cola")
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .NumberFormat = "dddd"
    End With

    Dim j As Range
    For Each j In Worksheets("Charge").Range("cola").Cells
    j = Day(Range("B" & j.Row))
    Next

Le hic c'est que en "cola" j'ai bien les jours qui s'affichent, mais de l'année 1900...

Par exemple pour le 29/08/18 le jour affiché est un dimanche au lieu d'un mercredi et si je clique sur la cellule, dans la barre de formule la date affichée est 29/01/1900.

Pourtant avant de récupérer les jours, j'indique bien un format en colb dd/mm/yy.

Je pense que ça vient bien d'une histoire de format, la date en colb que je récupère d'une extraction d'un autre logiciel est renvoyée dans excel au format texte et elle est de type 29/08/18 et non pas 29/08/2018 d'ailleurs, quand dans ma macro j'envoie le numberformat dd/mm/yy, excel m'affiche l'icone d'erreur qui me propose de la convertir en 19XX ou en 20XX.

Donc question comment contourner mon problème ou plutôt comment faire dans ma macro pour lui faire comprendre que 29/08/18 c'est bien 29/08/2018 ?

Merci !

Re,

On va tourner en rond durant des heures... Envoie le fichier ça ira bien plus vite...

Bonjour,

la fonction day("TaDate") et l'équivalent Excel =JOUR("TaDate") renvoient un nombre (par exemple 29 pour le 29/08/2018), pas un jour de la semaine. La fonction que tu dois utiliser dans ce cas est "weekday".

@ pedro, weekday me renvoie le numéro du jour de la semaine 1 pour dimanche, 2 pour lundi etc... mais c'est pas ça mon problème je pense de toute façon.

J'ai mis le fichier en pièce jointe du coup. La macro sur laquelle je travaille est MEFCharge_2()

Merci les gars en tous cas !

@ pedro, weekday me renvoie le numéro du jour de la semaine 1 pour dimanche, 2 pour lundi etc... mais c'est pas ça mon problème je pense de toute façon.

J'ai mis le fichier en pièce jointe du coup. La macro sur laquelle je travaille est MEFCharge_2()

Merci les gars en tous cas !

ChaMonLiv1 du 16 au 20 - Copie - Copie.xlsm

Ce serait bien que tu sois plus clair pour exposer ton problème alors... Au final j'ai ouvert ton fichier et je ne comprends toujours pas ce qu'il te faut exactement, surtout que tu as pleins de macros dans tous les sens.

Ba disons que je pensais que c'était suffisamment clair, mais à priori non.

Je vais essayer de l'être plus :

Dans la macro MEFCharge_2() dans mon fichier, pour les seules lignes qui sont actives et non en commentaires, j'ai ce code :

    With Range("colb")
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .NumberFormat = "dd/mm/yy"
    End With

    '--> Ajout des jours dans la colonne jour de chargement
    With Range("cola")
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .NumberFormat = "dddd"
    End With

    Dim j As Range
    For Each j In Worksheets("Charge").Range("cola").Cells
    j = Day(Range("B" & j.Row))
    Next

Ce code doit me permettre de récupérer dans ma colonne B pour chaque date en xx/xx/xx le jour de cette date au format dddd et le coller dans la colonne A.

Ca fonctionne à moitié car les jours qui sont renvoyés dans la colonne A ne sont pas les jours de 2018 mais de l'année 1900.

Ce que je n'arrive pas à faire, c'est de dire à ma macro que les dates en colonne B en xx/xx/xx sont de 2018 et non pas de 1900.

Tu comprends mieux du coup ?

Bonjour à tous

La colonne B ne contient pas des dates mais du texte ce qui donne 0 soit le 0 janvier 1900 quand tu le considère en date.

If faut donc récupérer les 8 premiers caractères, les convertir en date avant d'extraire le jour...

Sinon récupère la fin du texte à partir du 10ème caractère !

Ba disons que je pensais que c'était suffisamment clair, mais à priori non.

Je vais essayer de l'être plus :

Dans la macro MEFCharge_2() dans mon fichier, pour les seules lignes qui sont actives et non en commentaires, j'ai ce code :

    With Range("colb")
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .NumberFormat = "dd/mm/yy"
    End With

    '--> Ajout des jours dans la colonne jour de chargement
    With Range("cola")
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .NumberFormat = "dddd"
    End With

    Dim j As Range
    For Each j In Worksheets("Charge").Range("cola").Cells
    j = Day(Range("B" & j.Row))
    Next

Ce code doit me permettre de récupérer dans ma colonne B pour chaque date en xx/xx/xx le jour de cette date au format dddd et le coller dans la colonne A.

Ca fonctionne à moitié car les jours qui sont renvoyés dans la colonne A ne sont pas les jours de 2018 mais de l'année 1900.

Ce que je n'arrive pas à faire, c'est de dire à ma macro que les dates en colonne B en xx/xx/xx sont de 2018 et non pas de 1900.

Tu comprends mieux du coup ?

Du coup, ce qui t'intéresses, c'est de savoir si, par exemple pour la date du 20/07/2018, c'est le "20" du mois ou si c'est un "vendredi" ?

Bonjour,

et avec ceci :

j.Value = Format(CDate(Mid(Range("B" & j.Row).Value, 1, 8)), "DDDD")

on prend la valeur en colonne B dont on ne garde que les 8 premiers caractères (12/45/78)

on dit à VBA de les considérés comme une date

on dit à VBA d'écrire en colonne A la date sous forme de "nom de jour en entier" (DDDD)

Attention ! Dans les questions faire la différence entre le jour d'une date (1à31) et le nom du jour d'une date (qui en numérique donne 1à7 ou en alpha du lundi au dimanche)

@ bientôt

LouReeD

Sinon récupère la fin du texte à partir du 10ème caractère !

oui j'y avais pensé mais je trouvait ça trop simple lol

Un retour sur ce qui marche : https://forum.excel-pratique.com/viewtopic.php?p=671182#p671182

@ bientôt

LouReeD

Merci Lou reed, ça fonctionne nickel en changeant le format avant de faire l'extraction du jour.

Quant à bien préciser si je parlais bien du jour de 1à31 ou du alpha de 0 à 6 ou du nom du jour, je précisais bien à chaque fois de type dddd et à moins que je me trompe mais dddd c'est bien le nom du jour non ?

Merci à tous en tous cas, sujet résolu

Et bien 16 messages pour ça !

Soit on lit mal, soit on comprend mal, soit la demande n'est pas clair, soit (c'est mon cas) je veux être le premier à répondre et je vais trop vite !!!!

Merci de vos remerciements

@ bientôt

LouReeD

Bonjour à tous,

question du jour :

J'ai dans une plage de cellule une date au format mm/dd/yy.

Cette plage est en colonne B de B6 à B34 dans mon exemple, mais tout en sachant que cette plage est actuellement définie avec la variable i (i étant ma première cellule non vide en partant du bas) donc ma plage est ("B6" & ":B" & i).

De plus, j'ai déjà nommé dans mon code cette plage comme "colb" de cette façon :

ActiveWorkbook.Names.Add Name:="colb", RefersTo:=Worksheets("Charge").Range("B6" & ":B" & i)

Bref, j'aimerais que pour la même plage en A, soit (A6:A34) ou encore ("A6" & ":A" & i) ou encore "cola" car nommée également, je puisse récupérer le jour de cette date.

Quelle est donc du coup la façon la plus simple de coder : "dans cola je veux le jour de la date en colb" ou encore "dans plage cola pour chaque cellule je veux le jour correspondant à la date de la cellule d'à coté en colb"

Je suis parti là dessus mais ma syntaxe n'est pas bonne et il y a surement plus simple :

    Dim j As Range
    For Each j In Worksheets("Charge").Range("cola").Cells
    j = Day("B&i")
    Next

Merci par avance

juste pour rappel du premier message :

où se trouve les "DDDD" ?

@ bientôt

LouReeD

Effectivement pas dans le tout premier, car le tout premier message concernait le problème d'origine de mon topic, problème d'origine qui une fois résolu m'en a créé un autre malheureusement. J'aurais du scinder mon topic désolé

Mais bon finalement c'est pas bien grave car le coeur du problème n'était pas là dessus

Par contre tout à l'heure qu'en je me suis mieux expliqué, j'ai bien précisé dddd dans le message

Ce code doit me permettre de récupérer dans ma colonne B pour chaque date en xx/xx/xx le jour de cette date au format dddd et le coller dans la colonne A.

Tout à fait ! Vous avez raison ! et moi j'ai tord, une fois de plus...

Le code vous convient-il ?

Je l'ai essayé chez moi et ça marche du tonner je dirais même plus "gmarche"!!!!

Il supprime donc le jour en lettre de la date de la colonne B et le met en lettre dans la colonne A.

@ bientôt

LouReeD

pas de soucis loureed, ça fonctionne impec comme ça !

Rechercher des sujets similaires à "renvoyer jour date cote"