[Déplacé .Net --> VBA] VBA Problème d'afféctation.

Résolu
Kahoerre Messages postés 15 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 février 2010 - 21 janv. 2010 à 10:58
Kahoerre Messages postés 15 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 février 2010 - 21 janv. 2010 à 15:27
Bonjour,

je suis actuellement en train de développer une macro Excel en VBA et je suis bloqué depuis déjà hier après-midi.

Je n'arrive pas a attribuer ;
"Cassette mensuelle","Cassette hebdomadaire",
à 2 cellules. Voici mon code :


[b]Sub Test()
Dim i, l, x As Variant

i = Range("A5").Value
l = Range("C5").Value

If i <7 / 1 / 2009 And l "Vendredi" Then
Range("C5").Select
ActiveCell.Value = "Cassette mensuelle"
Else

If i > 7 / 1 / 2009 And l = "Vendredi" Then
Range("C5").Select
Range("C5").Value = "Cassette hebdomadaire"

End If
End If
End Sub/b

Merci de l'attention porté à ce post.
-Kahoerre
A voir également:

13 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 15:07
tu peux faire :
Sub Test()
Dim dIn As Date
    If Not IsDate(Range("A5").Value) Then
        MsgBox "Veuillez saisir une date valide en A5."
    Else
        dIn = CDate(Range("A5").Value)
        If Weekday(dIn) = vbFriday Then
            If Month(dIn) = Month(dIn - 7) Then
                Range("C5").Value = "Cassette hebdomadaire"
            Else
                Range("C5").Value = "Cassette mensuelle"
            End If
        Else
            Range("C5").Value = Format$(dIn, "dddd")
        End If
    End If
End Sub



Renfield - Admin CodeS-SourceS - MVP Visual Basic
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 janv. 2010 à 11:28
Salut
1) Dim Var1, Var2, ... As TypeVar ne signifie pas que chaque variable sera dimensionnée dans ce type.
Il faut donner un type à chaque variable
Comme tu as beaucoup de chance, le type par défaut est Variant, donc ça ne changera rien, mais méfie toi à l'avenir

2) Si tu es sûr de récupérer une date dans A5, mieux vaudrait définir i comme une date. Cela te permettra de faire des tests d'une manière sûre :
Dim i As Date
i = Range("A5").Value
If i < "07/01/2009" Then ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Kahoerre Messages postés 15 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 février 2010
21 janv. 2010 à 11:35
Merci pour tes précision, cela me sera sans doute utile à l'avenir, cependant ta réponse ne résolue pas me problème d'affectation en C5 :/

Une idée ?
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
21 janv. 2010 à 11:38
Salut,

on ne peut pas travailler avec les dates comme tu le fait !
Les variable doivent être typées en fonction de ce quelle doivent contenir, en particulier pour les dates.

Sub Test()
Dim i As Date, l As String, x As Variant

if isDate(Range("A5").Value)=False then
   msgbox "la cellule A5 ne contient pas de date !", VbExclamation
   Exit sub
end if
i = Range("A5").Value
' le lcase$ permet de n'avoir que des minuscules ce qui evite les erreurs pour une histoire de casse
l = LCase$(Range("C5").Value)
    ' datevalue permet de transformer une chaine en date
    ' datediff calcule une difference entre 2 dates et renvoie soit un nombre de jour("d") soit un nombre de mois("m") soit un nombre d'année("y")
    ' ici il renvoie un nombre de jour positif ou négatif 
    If DateDiff("d", i, DateValue("7/1/2009")) >0 And l "vendredi" Then
        Range("C5").Value = "Cassette mensuelle"
    Else
        If DateDiff("d", i, DateValue("7/1/2009")) < 0 And l = "vendredi" Then
            Range("C5").Value = "Cassette hebdomadaire"
        End If
    End If

End Sub


A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kahoerre Messages postés 15 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 février 2010
21 janv. 2010 à 11:48
Merci beaucoup. Problème résolu.
Je n'ai plus qu'à adapter certaines choses et c'est bon.
Encore une fois, merci à toi BigFish.
Bonne journée.
0
Kahoerre Messages postés 15 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 février 2010
21 janv. 2010 à 12:30
Petite question Bonus

Vu que ce que je fais est dans un calendrier, la date change à chaque cellule.
Est-il possible d'indicer la date ou autre, afin que la fonction DateDiff fonctionne pour chaque mois de l'année.

Merci beaucoup.
-Kahoerre
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
21 janv. 2010 à 12:36
Oui,

avec une boucle "For Next" par exemple.

A+
0
Kahoerre Messages postés 15 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 février 2010
21 janv. 2010 à 14:14
Je ne vois pas comment faire vu que la date doit toujours rester 7/m/y et à chaque changement de mois, je dois passer 7/m+1/y afin que le calcul reste correct.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 14:21
Dateserial(y, m+1, 7) créera une belle date

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Kahoerre Messages postés 15 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 février 2010
21 janv. 2010 à 14:35
Oui mais comment bien l'utiliser ?
Sur quel critère m passera à m+1 ?
Comment et où l'utiliser dans mon code ?

J'ai beau me retourner le cerveau, je ne trouve pas :/

Un sauveur ? :)

Merci beaucoup.
- Kahoerre
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 14:42
j'ignore quelles sont tes consignes...

e que tu cherches au final a faire...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Kahoerre Messages postés 15 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 février 2010
21 janv. 2010 à 14:54
Pour te donner une idée, je gère un calendrier afin de déterminer quelle jour sera fait un changement de cassette.
Sachant que les cassettes sont changées chaque vendredi, et que le premier vendredi du mois c'est une cassette dite "mensuelle". Il y'a une chose que je dois adapter c'est la date servant à faire un calcul afin de savoir si c'est le premier vendredi du mois ou non.


[b]sub Test()
Dim i As Date, l As String, x As Variant

i = Range("A5").Value
l = LCase$(Range("C5").Value)

If DateDiff("d", i,DateValue("7/1/2009")) >0 And l "vendredi" Then
Range("C5").Value = "Cassette mensuelle"
Else
If DateDiff("d", i, DateValue("7/1/2009")) < 0 And l = "vendredi" Then
Range("C5").Value = "Cassette hebdomadaire"

End If
End If

End Sub/b

Les parties en rouge correspondent aux parties qui posent problème. Cette date devrait augmenter d'un mois à chaque changement de mois afin que le calcul reste correct. Et c'est la que je sèche.

Merci beaucoup.
-Kahoerre
0
Kahoerre Messages postés 15 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 2 février 2010
21 janv. 2010 à 15:27
Ca marche exactement comme je veux.
Merci beaucoup.

-Kahoerre
0
Rejoignez-nous