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

Signaler
Messages postés
15
Date d'inscription
jeudi 21 janvier 2010
Statut
Membre
Dernière intervention
2 février 2010
-
Messages postés
15
Date d'inscription
jeudi 21 janvier 2010
Statut
Membre
Dernière intervention
2 février 2010
-
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

13 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
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)
Messages postés
15
Date d'inscription
jeudi 21 janvier 2010
Statut
Membre
Dernière intervention
2 février 2010

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 ?
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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+
Messages postés
15
Date d'inscription
jeudi 21 janvier 2010
Statut
Membre
Dernière intervention
2 février 2010

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.
Messages postés
15
Date d'inscription
jeudi 21 janvier 2010
Statut
Membre
Dernière intervention
2 février 2010

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
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Oui,

avec une boucle "For Next" par exemple.

A+
Messages postés
15
Date d'inscription
jeudi 21 janvier 2010
Statut
Membre
Dernière intervention
2 février 2010

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.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
Dateserial(y, m+1, 7) créera une belle date

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
15
Date d'inscription
jeudi 21 janvier 2010
Statut
Membre
Dernière intervention
2 février 2010

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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
j'ignore quelles sont tes consignes...

e que tu cherches au final a faire...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
15
Date d'inscription
jeudi 21 janvier 2010
Statut
Membre
Dernière intervention
2 février 2010

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
Messages postés
15
Date d'inscription
jeudi 21 janvier 2010
Statut
Membre
Dernière intervention
2 février 2010

Ca marche exactement comme je veux.
Merci beaucoup.

-Kahoerre