Comparaison de date

Bonjour le forum,

J'aimerai pouvoir comparer les dates (de ma ligne 9) au format "jj/mm/aaaa" à une date au format "aaaa" ( saisie dans une textbox )

Si l'année de la date compris sur la ligne 9 = date saisie dans la textbox alors copie la date vers une nouvelle feuille ( Prt)

Avez vous une idée pour faire ca?

Je vous laisse un fichier exemple,

Merci

Bonjour,

a = (Format(Cells(9, 2), "yyyy")) 'donne l année AAAA

Cela peut t'aider

Cdlt.

Bonjour,

En vba ? Sur feuille ? On va supposer en vba :

If CLng(TextBox1.Value) = Year([B9]) Then

J'ai pris une cellule au hasard vu que tu ne donnes aucun détail.

eric

Merci pour vos réponses, la solution d'ériiic me convient bien,

du coup mon code est dans le userform, il compare bien toutes les valeurs de la ligne mais seul la première comparaison fonctionne, (test sur 2017)

si vous pouvez regarder ca

Private Sub CommandButton1_Click()

i = ActiveSheet.Name
c = 2

With Sheets(i)
Unload Me
b = ActiveSheet.UsedRange.Columns.Count
    For a = 2 To b

        If CLng(TextBox1.Value) = Year(Cells(9, a)) Then
        Range(Cells(9, a), Cells(13, a)).Copy

            With Sheets("Prt")
            .Select

            Cells(9, c).Select

            ActiveSheet.Paste
            c = c + 1
            End With
        End If
     Next
End With
End Sub

Là il faudrait que tu prennes le temps de regarder les cours sur le B.A.BA de vba et de la programmation.

Rien n'est inné et l'improvisation au hasard paie rarement dans ce domaine.

Vraiment trop de fautes basiques dans ces quelques lignes.

Donc apprend les bases dans un premier temps, que tu complètes par l'apprentissage du débogage (80% du temps de programmation).

Regarde l'aide sur With déjà, et si tu actives une autre feuille, sans autre spécification tes lectures se feront sur celle-ci

eric

Merci eriiic j'avais juste oublier de sélectionné la bonne feuille au redémarrage de la boucle !! Merci pour les conseilles

A Bientôt

Bonjour, Salut Eric !

La règle de base simple que je préconise est d'oublier toute idée de Select (qui fait perdre facilement le fil...) et d'appeler les choses par leur nom ! Si on appelle quelqu'un nommément c'est lui qui répondra, pas un autre !

Et comment voit-on dans le code que l'on ne lance pas un appel à la cantonade ( ) mais un appel bien dirigé ? C'est qu'il n'y a jamais dans une ligne de code de Range ou Cells sans point devant (exception faite du cas Range("NomdePlage")NomdePlage est un nom unique dans le classeur référant à une plage très précise).

Dans ton bout de code, tu commences par :

With Sheets(i)

mais ensuite :

        Range(Cells(9, a), Cells(13, a)).Copy

cette expression qui devrait référer à Sheets(i) n'y réfère pas car non qualifiée : aucun point devant Range et Cells qui la fasse référer à la feuille, VBA ira donc chercher la feuille active au moment d'exécuter cette instruction.

Sheets(i) est peut-être la feuille active au départ, mais juste après :

            With Sheets("Prt")
            .Select

Là le Select, avec son point, réfère bien à "Prt", donc si Sheet(i) était active auparavant ce n'est plus le cas dans la suite.

Sans décortiquer ton code plus avant dans le détail, note qu'il y a une mauvaise utilisation des With qui sont glissés comme des ornements mais ne sont pas utilisés pour remplir la fonction qui la leur... puisqu'on va même jusqu'à retrouver un ActivveSheet dans un bloc With de la même feuille que tu viens d'activer, tout ça est contradictoire. Et l'imbrication de blocs With référant à des objets différents de même niveau dans la hiérarchie Excel est à éviter...

A éviter aussi les Unload Me prématurés : tu auras un jour la surprise que ton code ne sera tout bonnement pas exécutés car disparu avec le Userform dans lequel il se trouvait avant d'avoir été pris en charge par l'interpréteur de commande (j'ai eu à traiter un cas de la sorte : qui me rappelle toujours ma toute première macro sur Multiplan, où je supprimais par inadvertance les cellules sur lesquelles était inscrite la macro... qui n'est jamais arrivée à terme, et je n'avais pas de copie ! ).

Le conseil d'Eric est judicieux, il est difficile de coder à l'aveuglette et sans un minimum de connaissances de base, ce que tu fais, que cela fonctionne ou non, ne te profite en rien car tu ne disposes pas des éléments indispensables pour comprendre aussi bien ce qui fonctionne que ce qui ne fonctionne pas.

Cordialement.

Merci Mferrand de toute tes explications

cette expression qui devrait référer à Sheets(i) n'y réfère pas car non qualifiée : aucun point devant Range et Cells qui la fasse référer à la feuille

J'avais pourtant essayer avec .Range mais j'avais une erreur alors je suis revenue à un code bien moche avec .select pour suivre la macro, mais j'ai l'intention de rendre cela plus propre par la suite mais je vais au plus presser pour aujourd'hui...

J'avais pourtant essayer avec .Range mais j'avais une erreur

Oui si tu le mets devant .Range et pas devant les Cells, car au 2e tour tu lui demandes de définir une plage sur une feuille avec des cellules d'une autre feuille !

Là ça renâcle !

Rechercher des sujets similaires à "comparaison date"