Stocker\Memoriser des variables issues d'une TextBox

  • Initiateur de la discussion Initiateur de la discussion Niouf
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 🙂
 
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.
 
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

Dernière édition:
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.

[TABLE="class: grid, width: 698"]
[TR]
[TD="align: center"]Instruction
ou mot clé
[/TD]
[TD="align: center"]Implantation[/TD]
[TD="align: center"]Type de
module
[/TD]
[TD="align: center"]Portée[/TD]
[TD="align: center"]Pérennité[/TD]
[TD="align: center"]Légendes[/TD]
[/TR]
[TR]
[TD]ByRef[/TD]
[TD]Paramètre[/TD]
[TD]Tous[/TD]
[TD]Procédure[/TD]
[TD]Transmise[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]ByVal[/TD]
[TD]Paramètre[/TD]
[TD]Tous[/TD]
[TD]Procédure[/TD]
[TD]Procédure[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Dim[/TD]
[TD]Locale[/TD]
[TD]Tous[/TD]
[TD]Procédure[/TD]
[TD]Procédure[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Dim[/TD]
[TD]Globale[/TD]
[TD]Standard[/TD]
[TD]Projet[/TD]
[TD]Projet[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Dim[/TD]
[TD]Globale[/TD]
[TD]Objet[/TD]
[TD]Module[/TD]
[TD]Exemplaire[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Private[/TD]
[TD]Globale[/TD]
[TD]Standard[/TD]
[TD]Module[/TD]
[TD]Projet[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Private[/TD]
[TD]Globale[/TD]
[TD]Objet[/TD]
[TD]Module[/TD]
[TD]Exemplaire[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Public[/TD]
[TD]Globale[/TD]
[TD]Standard[/TD]
[TD]Projet[/TD]
[TD]Projet[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Public[/TD]
[TD]Globale[/TD]
[TD]Objet[/TD]
[TD]Idem obj.[/TD]
[TD]Exemplaire[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Static[/TD]
[TD]Locale[/TD]
[TD]Standard[/TD]
[TD]Procédure[/TD]
[TD]Projet[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Static[/TD]
[TD]Locale[/TD]
[TD]Objet[/TD]
[TD]Procédure[/TD]
[TD]Projet[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Static[/TD]
[TD]Globale[/TD]
[TD]Standard[/TD]
[TD]Module[/TD]
[TD]Projet[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]Static[/TD]
[TD]Globale[/TD]
[TD]Objet[/TD]
[TD]Module[/TD]
[TD]Projet[/TD]
[TD][/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Paramètre[/TD]
[TD="colspan: 4"]Figurant dans la liste des paramètres de la procédure.[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Locale[/TD]
[TD="colspan: 4"]Déclarée seulement dans une procédure, ou non déclarée.[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Globale[/TD]
[TD="colspan: 4"]Déclarée en tête d'un module, avant toute procédure.[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Procédure[/TD]
[TD="colspan: 2"]La variable n'est connue que dans la procédure.[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Projet[/TD]
[TD="colspan: 2"]La variable est connue dans tout le projet,
voire dans un autre projet possédant sa référence.[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Module[/TD]
[TD="colspan: 2"]La variable n'est connue qu'à l'intérieur du module.[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Idem obj.[/TD]
[TD="colspan: 2"]La propriété est connue partout ou l'objet l'est.[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Transmise[/TD]
[TD]Sa pérénité est celle de la variable transmise par la procédure appelante.[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Procédure[/TD]
[TD]La variable n'est conservée que durant l'exécution de la procédure[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Projet[/TD]
[TD]La variable a la durée de vie du projet.[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Exemplaire[/TD]
[TD]Elle est conservée aussi longtemps que l'exemplaire de l'objet.[/TD]
[/TR]
[/TABLE]
 
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 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
162
Réponses
5
Affichages
235
Réponses
3
Affichages
298
  • Question Question
Microsoft 365 Textbox userform
Réponses
10
Affichages
606
Retour