Stocker\Memoriser des variables issues d'une TextBox

Niouf

XLDnaute Occasionnel
Bonsoir le Forum,

Code:
'Macro for create a table in an other sheet, with the Plnd order numbers,
 'and extract the TRUNKING and SM numbers in the period : Current date + 1 month - end of third next month

  date1 = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
  date2 = DateSerial(Year(Date), Month(Date) + 4, Day(Date))
  Sheets(2).[A1].CurrentRegion.ClearContents
  derlig = Cells(Rows.Count, 9).End(xlUp).Row
 For Each c In Range("I2:I" & derlig).SpecialCells(xlCellTypeVisible)

    If c < date1Mois Then
          ReDim Preserve tablo(3, x)
          tablo(0, x) = Cells(c.Row, 1)
          tablo(1, x) = Cells(c.Row, 4)
          tablo(2, x) = Cells(c.Row, 7)
          tablo(3, x) = Cells(c.Row, 9)
          x = x + 1
    End If

    If c >= date1Mois And c <= date4Mois And _
          Left(Cells(c.Row, 1), 2) <> "SM" And InStr(1, Cells(c.Row, 4), "trunking", 1) = 0 Then
          ReDim Preserve tablo(3, x)
          tablo(0, x) = Cells(c.Row, 1)
          tablo(1, x) = Cells(c.Row, 4)
          tablo(2, x) = Cells(c.Row, 7)
         tablo(3, x) = Cells(c.Row, 9)
          x = x + 1
    End If

Sur ce code, j'ai deux variable date1 et 2.

Je souhaiterais faire apparaitre un Userform, me demandant les deux dates dans deux TextBox differentes.
Et prendre en compte les valeurs de ces TextBox entrees precedement dans ma boucle.

En gros mettre en memoire ces deux dates, mais ATTENTION, sans les stocker dans une quelconque case ...

J'ai entendu parler de declarer les variables en Static.
Apres quelques recherches, il est possible que cela fonctionne, mais ne l'ayant jamais utilise, je suis bloque sans l'aide d'un connaisseur ...

Merci d'avance a celui qui aura une piste :)
 

Dranreb

XLDnaute Barbatruc
Re : Stocker\Memoriser des variables issues d'une TextBox

Bonsoir.
La pérennité d'une variable Static n'est pas supérieure à celle d'une variable globale dans un module standard. Tout comme celle ci elle est effacée à la moindre réinitialisation du projet VBA. Pour pouvoir conserver sa valeur au delà de la fermeture du classeur avec enregistrement des modifications sans l'avoir inscrite dans une cellule il n'y a pas d'autre moyen que la stocker en tant que référence à un nom dans le classeur.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Stocker\Memoriser des variables issues d'une TextBox

Bonjour Niouf, Dranreb,

Un essai en utilisant deux noms au niveau classeur (Date1 et Date2). Les valeurs de Date1 et Date2 sont sauvegardées en même temps que le classeur (illustration des propos de Dranreb que je salue :))

Pour utiliser la valeur de Date1 en vba, on peut utiliser la syntaxe x=[Date1]
ou bien x=application.evaluate("Date1").

Date1 peut aussi d'utiliser dans les formules. Ex: mettre dans une cellule la formule =Date1

Suivant le format de date utilisé (français, anglais, américain,...), il faudra adapter les instructions
Format(... , ...) dans le code VBA.

Le code de userform1:
VB:
Option Explicit

Private Sub UserForm_Initialize()
Dim x As Date
  On Error Resume Next
  TextBox1 = Format([Date1], "dd-mm-yyyy")
  TextBox2 = Format([Date2], "dd-mm-yyyy")
End Sub

Private Sub CommandButton1_Click()
Dim x

  On Error Resume Next
  x = Empty: x = CDate(TextBox1)
  If Not IsDate(x) Or TextBox1 = "" Then
    MsgBox "Date1 (" & TextBox1 & ") seems not to be a valid date !"
    TextBox1.SetFocus
    Exit Sub
  End If
  
  x = Empty: x = CDate(TextBox2)
  If Not IsDate(x) Or TextBox2 = "" Then
    MsgBox "Date2 (" & TextBox2 & ") seems not to be a valid date !"
    TextBox2.SetFocus
    Exit Sub
  End If
  On Error GoTo 0
  
  If MsgBox("Date1 = " & Format(CDate(TextBox1), "ddd dd mmm yyyy") & vbLf & vbLf & _
      "Date2 = " & Format(CDate(TextBox2), "ddd dd mmm yyyy") & vbLf & vbLf & _
      "Are these two dates the correct ones ?", vbQuestion + vbYesNo + vbDefaultButton1) = vbYes Then
     ThisWorkbook.Names.Add Name:="Date1", RefersToR1C1:=CDate(TextBox1)
     ThisWorkbook.Names.Add Name:="Date2", RefersToR1C1:=CDate(TextBox2)
     End
   Else
    TextBox1.SetFocus
    Exit Sub
  End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  If CloseMode = vbFormControlMenu Then _
    MsgBox "Date1 and Date2 will keep their previous values", vbInformation
End Sub
 

Pièces jointes

  • Niouf-Memoriser des variables issues d'une TextBox-v1.xlsm
    22.6 KB · Affichages: 49
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Stocker\Memoriser des variables issues d'une TextBox

Bonjour.

Voici un petit résumé des portées et pérennités des variables selon leurs modes de déclarations et implantations dans les deux types de modules. La pérennité 'Exemplaire' s'applique surtout aux modules de classe. Pour un objet de la rubrique Microsoft Excel Objet, elle revient à 'Projet'. Pour un UserForm, ça signifie: tant qu'il est chargé en mémoire.

Instruction
ou mot clé
ImplantationType de
module
PortéePérennitéLégendes
ByRefParamètreTousProcédureTransmise
ByValParamètreTousProcédureProcédure
DimLocaleTousProcédureProcédure
DimGlobaleStandardProjetProjet
DimGlobaleObjetModuleExemplaire
PrivateGlobaleStandardModuleProjet
PrivateGlobaleObjetModuleExemplaire
PublicGlobaleStandardProjetProjet
PublicGlobaleObjetIdem obj.Exemplaire
StaticLocaleStandardProcédureProjet
StaticLocaleObjetProcédureProjet
StaticGlobaleStandardModuleProjet
StaticGlobaleObjetModuleProjet
ParamètreFigurant dans la liste des paramètres de la procédure.
LocaleDéclarée seulement dans une procédure, ou non déclarée.
GlobaleDéclarée en tête d'un module, avant toute procédure.
ProcédureLa variable n'est connue que dans la procédure.
ProjetLa variable est connue dans tout le projet,
voire dans un autre projet possédant sa référence.
ModuleLa variable n'est connue qu'à l'intérieur du module.
Idem obj.La propriété est connue partout ou l'objet l'est.
TransmiseSa pérénité est celle de la variable transmise par la procédure appelante.
ProcédureLa variable n'est conservée que durant l'exécution de la procédure
ProjetLa variable a la durée de vie du projet.
ExemplaireElle est conservée aussi longtemps que l'exemplaire de l'objet.
 

Niouf

XLDnaute Occasionnel
Re : Stocker\Memoriser des variables issues d'une TextBox

Bonjour a vous deux !

Mapomme, merci, le code envoye a parfaitement fonctionne avec ma macro, en l'adaptant quelque peu :)

Merci a Drandeb pour les infos, cela permet de comprendre ce que je fais :)
 

Discussions similaires

Statistiques des forums

Discussions
312 251
Messages
2 086 623
Membres
103 266
dernier inscrit
moonie