XL 2019 VBA - Stocker une valeur

Pierre111

XLDnaute Nouveau
Bonjour, j'ai un petit problème sur une macro qui ne devrait pas être trop compliqué à résoudre, mais malgré tout je bloque.

Lorsque je stocke la valeur de Z dans ma variable B, si n>= 10 alors B n'est pas égale à "" mais il est égale à 0.
Je pense que cela est dû au fait que je stocke la valeur de Z mais je ne sais pas comment résoudre ce problème.

Merci par avance pour votre aide
Pierre111

Code:
Sub Test()
    
    'Collecter le numéro du mois
    x = InputBox("Quel est le numéro du mois ?", "Numéro mois", 1)
    n = Val(x)
    m = Val(x) - 1
    o = Val(x) + 1
    'Collecter le numéro de l'année
    y = InputBox("Quel est le numéro de l'année ?", "Numéro année", 2022)
    a = Val(y)
    'Si le numéro du mois est inférieur à 10 alors rajouter un zéro devant le  numéro du mois sinon ne rien rajouter
    Z = "=IF(n<10,0,"")"
    b = Val(Z)
    
    MsgBox ("La date est " & b & "" & n & "." & a & ".")
      
End Sub
 

fanfan38

XLDnaute Barbatruc
Bonjour
fait msgbox Z avant la lygne b=Val(Z)..
Z étant égale à : "=if(n<10,0,"")"
et dans ta date tu utilises le mois comme jour?
la date est dateserial(a,n,1)
pourquoi tant de complication
VB:
Sub Test()
    Dim x As String, a As Integer, n As Byte
    'Collecter le numéro du mois
    x = InputBox("Quel est le numéro du mois ?", "Numéro mois", 1)
    n = Val(x)
    x = InputBox("Quel est le numéro de l'année ?", "Numéro année", 2022)
    a = Val(x)
    MsgBox ("la date est " & DateSerial(a, n, 1))
End Sub
A+ François
 
Dernière édition:

Pierre111

XLDnaute Nouveau
Bonjour
fait msgbox Z avant la lygne b=Val(Z)..
Z étant égale à : "=if(n<10,0,"")"
et dans ta date tu utilises le mois comme jour?
la date est dateserial(a,n,1)
pourquoi tant de complication
VB:
Sub Test()
    Dim x As String, a As Integer, n As Byte
    'Collecter le numéro du mois
    x = InputBox("Quel est le numéro du mois ?", "Numéro mois", 1)
    n = Val(x)
    x = InputBox("Quel est le numéro de l'année ?", "Numéro année", 2022)
    a = Val(x)
    MsgBox ("la date est " & DateSerial(a, n, 1))
End Sub
A+ François
Bonjour François,
Tout d'abord merci pour votre réponse. Cependant je vais exprimer mon problème plus explicitement car je n'ai pas été assez clair.
Avec le code ci-dessous, lorsque n=10, la formule recherche Affaires produites 010 au lieu de Affaires produites 10 et ce également lorsque n>10.
Alors que dans la formule de z je dis bien que : si (n<10; 0; "")

VB:
Sub Test()

Dim chemin As String
    chemin = "'C:\Users\pierr\Excel\" 'à modifier en fonction du lieu d'enregistrement du fichier

    'Collecter le numéro du mois
    x = InputBox("Quel est le numéro du mois ?", "Numéro mois", 1)
    n = Val(x)
    m = Val(x) - 1
    o = Val(x) + 1
    'Collecter le numéro de l'année
    y = InputBox("Quel est le numéro de l'année ?", "Numéro année", 2022)
    a = Val(y)
    'Si le numéro du mois est inférieur à 10 alors rajouter un zéro devant le  numéro du mois sinon ne rien rajouter
    Z = "=IF(n<10,0,"")"
    b = Val(Z)


    'Insérer la formule pour trouver le nom du client dans la colonne F
    Range("F2").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(RC4," & chemin & "\[Affaires produites " & b & "" & n & "." & a & ".xlsx]A'!R1C3:R1000C105,7,0))," & _
        "VLOOKUP(RC4," & chemin & "\[Affaires produites " & b & "" & m & "." & a & ".xlsx]A'!R1C3:R1000C105,7,0)," & _
        "VLOOKUP(RC4," & chemin & "\[Affaires produites " & b & "" & n & "." & a & ".xlsx]A'!R1C3:R1000C105,7,0))"

End Sub
 

Deadpool_CC

XLDnaute Accro
Bonjour,
Sinon pour le traitement de ton mois ... une piste
Et pense à vérifier que c'est bien un mois possible qui est saisi :)
VB:
Sub Test()

Dim MoisTxt As String
Dim Mois As Integer
Dim Cellule As Range

For Each Cellule In Range("E2:E14")
    Mois = CInt(Cellule.Value)
    If Mois <= 12 And Mois >= 1 Then
        Select Case Mois
            Case 10, 11, 12
                MoisTxt = Format(Mois, "000")
            Case Else
                MoisTxt = Format(Mois, "00")
        End Select
    Range("F" & Cellule.Row).Value = "texte du mois = " & MoisTxt
    Else
        Range("F" & Cellule.Row).Value = "Mois inconnu !"
    End If
Next

End Sub

1674122263063.png
 

Pièces jointes

  • deadpool_MoisTexte.xlsm
    16 KB · Affichages: 0

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

La contribution de ma pomme (les variables ont été déclarées avec leur type) :
VB:
Sub Test()
Dim n As Long, m As Long, o As Long, a As Long, maDate As Date
 
   Do       'quel mois ? (stocké dans n)
      n = Int(Val(InputBox("Quel est le numéro du mois ?", "Numéro mois", 1)))
   Loop Until n >= 1 And n <= 12
   m = n - 1: o = n + 1

   Do       'quelle année ? (stocké dans a)
      a = Int(Val(InputBox("Quel est le numéro de l'année ?", "Numéro année", 2022)))
   Loop Until a >= 2000 And a <= 2050

   maDate = DateSerial(a, n, 1)   ' vraie date du 1er du mois n et de l'année a
   MsgBox "La date est " & Format(maDate, "mm.yyyy")  ' on applique à la vraie date maDate
                                                      ' le format mm.yyyy
                                                      ' soit le mois sur deux chiffres suivi d'un point puis l'année sur 4 chiffres
End Sub
 

Pièces jointes

  • Pierre111- format date- v1.xlsm
    15.7 KB · Affichages: 0
Dernière édition:

Discussions similaires

Réponses
3
Affichages
299
Réponses
6
Affichages
345

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 179
dernier inscrit
BERSEB50