Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

perte de variable avant affichage ds un userForm

4 réponses
Avatar
mark Desnoyer
Bonjour,
je reviens pour un problème de perte de valeur, je m'explique, j'ai une
macro qui récupère les infos (variables A à G), de la ligne de la cellule
active de la feuille(1), les valeur A et B me serve à rechercher un
complèment (H) dans la feuille(2), puis tout doit-être affichée dans un
userForm .
Mais je perd la valeur de la variable(H) mais pas les autres valeurs (A à G)
lors de l'affichage du UserForm.

voici le code que j'ai mis dans le userform

Private Sub UserForm_Initialize()
On Error Resume Next

'1/ RECHERCHE de la "Qte Commandée" feuille "MouvementX"
Dim Lig As Integer
LigneSelec = ActiveCell.Row
txtDpt1 = Sheets("Documentation").Range("A1").Value 'Affichage du Dpt

'2/ Mise à jour des données du FORMULAIRE

txtQte = "1" 'Ititialisation de la quantité à 1
If txtDpt1 = 3 Then Qte = "F"
If txtDpt1 = 15 Then Qte = "G"
If txtDpt1 = 63 Then Qte = "H"

txtType = Sheets("Documentation").Range("E" & LigneSelec).Value
txtFamille = Sheets("Documentation").Range("A" & LigneSelec).Value
txtTheme = Sheets("Documentation").Range("B" & LigneSelec).Value
txtRef = Sheets("Documentation").Range("C" & LigneSelec).Value
txtTitre = Sheets("Documentation").Range("D" & LigneSelec).Value
'Parametre de recherche
txtFournisseur = Sheets("Documentation").Range("I" & LigneSelec).Value
txtDateCommande = Sheets("Documentation").Range("K" & LigneSelec).Value
'Parametre de recherche
txtStockOld = Sheets("Documentation").Range(Qte & LigneSelec).Value
txtQteReçu = 0

Call RechercheEltCommande(txtDpt1.Value, txtTitre.Value, txtQteCmd.Value,
txtDateCommande.Value)
End Sub

Sub RechercheEltCommande(txtDpt1 As String, txtTitre As String, txtQteCmd As
String, txtDateCommande As Date)
'3/ Recherche les éléments de la Commande
Sheets("Mouvement" & txtDpt1).Select
For Lig = 2 To Sheets("Mouvement" & txtDpt1).[D65000].End(xlUp).Row
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 4) = txtTitre Then
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 5) = txtDateCommande
Then

txtQteCmd = Sheets("Mouvement" & txtDpt1).Range("G" & Lig)
'valeur recherchée
End If
End If
Next

End Sub

résultat : txtQteCmd est bien récupérée en fonction des paramêtres
(txtTitre & txtDateCommande) , mais n'est pas affichée

Où est l'erreur ?

4 réponses

Avatar
michdenis
Bonjour Mark,

J'ai lu rapidement ton code,

A )et je n'ai pas vu où tu as fait la déclaration de tes variables

B ) le contenu de ta variable doit-elle être disponible seulement
lorsque le formulaire est en mémoire vive si oui :
dans le haut du module de ton formulaire
Dim H as String or Double or Long ... selon ce qu'elle contient

Si la variable H doit être accessible lorsque le formulaire est
fermé : tu fais la déclaration de celle-ci dans un module standard :
Public H as String or Double or Long ... selon ce qu'elle contient

Dans les 2 cas précédents, tu ne dois pas déclarer une variable "localement"
au niveau de la procédure.


Salutations!


"mark Desnoyer" a écrit dans le message de news: dq6mom$ejh$
Bonjour,
je reviens pour un problème de perte de valeur, je m'explique, j'ai une
macro qui récupère les infos (variables A à G), de la ligne de la cellule
active de la feuille(1), les valeur A et B me serve à rechercher un
complèment (H) dans la feuille(2), puis tout doit-être affichée dans un
userForm .
Mais je perd la valeur de la variable(H) mais pas les autres valeurs (A à G)
lors de l'affichage du UserForm.

voici le code que j'ai mis dans le userform

Private Sub UserForm_Initialize()
On Error Resume Next

'1/ RECHERCHE de la "Qte Commandée" feuille "MouvementX"
Dim Lig As Integer
LigneSelec = ActiveCell.Row
txtDpt1 = Sheets("Documentation").Range("A1").Value 'Affichage du Dpt

'2/ Mise à jour des données du FORMULAIRE

txtQte = "1" 'Ititialisation de la quantité à 1
If txtDpt1 = 3 Then Qte = "F"
If txtDpt1 = 15 Then Qte = "G"
If txtDpt1 = 63 Then Qte = "H"

txtType = Sheets("Documentation").Range("E" & LigneSelec).Value
txtFamille = Sheets("Documentation").Range("A" & LigneSelec).Value
txtTheme = Sheets("Documentation").Range("B" & LigneSelec).Value
txtRef = Sheets("Documentation").Range("C" & LigneSelec).Value
txtTitre = Sheets("Documentation").Range("D" & LigneSelec).Value
'Parametre de recherche
txtFournisseur = Sheets("Documentation").Range("I" & LigneSelec).Value
txtDateCommande = Sheets("Documentation").Range("K" & LigneSelec).Value
'Parametre de recherche
txtStockOld = Sheets("Documentation").Range(Qte & LigneSelec).Value
txtQteReçu = 0

Call RechercheEltCommande(txtDpt1.Value, txtTitre.Value, txtQteCmd.Value,
txtDateCommande.Value)
End Sub

Sub RechercheEltCommande(txtDpt1 As String, txtTitre As String, txtQteCmd As
String, txtDateCommande As Date)
'3/ Recherche les éléments de la Commande
Sheets("Mouvement" & txtDpt1).Select
For Lig = 2 To Sheets("Mouvement" & txtDpt1).[D65000].End(xlUp).Row
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 4) = txtTitre Then
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 5) = txtDateCommande
Then

txtQteCmd = Sheets("Mouvement" & txtDpt1).Range("G" & Lig)
'valeur recherchée
End If
End If
Next

End Sub

résultat : txtQteCmd est bien récupérée en fonction des paramêtres
(txtTitre & txtDateCommande) , mais n'est pas affichée

Où est l'erreur ?
Avatar
docm
Bonjour.

Pour que la valeur de l'objet txtQteCmd soit modifiée dans la procédure appelée, il faut passer l'objet txtQteCmd et non sa valeur.
Donc remplacer
txtQteCmd As String (qui crée une nouvelle variable appelée txtQteCmd )
par
txtQteCmd As Object

Egalement, supprime temporairement la commande On Error Resume Next. Ca va te permettre de détecter les erreurs dans ton code.


Call RechercheEltCommande(txtDpt1, txtTitre, txtQteCmd, txtDateCommande)
End Sub

Sub RechercheEltCommande(txtDpt1 As Object, txtTitre As Object, txtQteCmd As Object, txtDateCommande As Object)
'3/ Recherche les éléments de la Commande
Sheets("Mouvement" & txtDpt1).Select
For Lig = 2 To Sheets("Mouvement" & txtDpt1).[D65000].End(xlUp).Row
If CStr(Sheets("Mouvement" & txtDpt1).Cells(Lig, 4)) = CStr(txtTitre) Then
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 5) = txtDateCommande Then

txtQteCmd = Sheets("Mouvement" & txtDpt1).Range("G" & Lig)
'valeur recherchée
End If
End If
Next

End Sub



"mark Desnoyer" a écrit dans le message de news: dq6mom$ejh$
Bonjour,
je reviens pour un problème de perte de valeur, je m'explique, j'ai une
macro qui récupère les infos (variables A à G), de la ligne de la cellule
active de la feuille(1), les valeur A et B me serve à rechercher un
complèment (H) dans la feuille(2), puis tout doit-être affichée dans un
userForm .
Mais je perd la valeur de la variable(H) mais pas les autres valeurs (A à G)
lors de l'affichage du UserForm.

voici le code que j'ai mis dans le userform

Private Sub UserForm_Initialize()
On Error Resume Next

'1/ RECHERCHE de la "Qte Commandée" feuille "MouvementX"
Dim Lig As Integer
LigneSelec = ActiveCell.Row
txtDpt1 = Sheets("Documentation").Range("A1").Value 'Affichage du Dpt

'2/ Mise à jour des données du FORMULAIRE

txtQte = "1" 'Ititialisation de la quantité à 1
If txtDpt1 = 3 Then Qte = "F"
If txtDpt1 = 15 Then Qte = "G"
If txtDpt1 = 63 Then Qte = "H"

txtType = Sheets("Documentation").Range("E" & LigneSelec).Value
txtFamille = Sheets("Documentation").Range("A" & LigneSelec).Value
txtTheme = Sheets("Documentation").Range("B" & LigneSelec).Value
txtRef = Sheets("Documentation").Range("C" & LigneSelec).Value
txtTitre = Sheets("Documentation").Range("D" & LigneSelec).Value
'Parametre de recherche
txtFournisseur = Sheets("Documentation").Range("I" & LigneSelec).Value
txtDateCommande = Sheets("Documentation").Range("K" & LigneSelec).Value
'Parametre de recherche
txtStockOld = Sheets("Documentation").Range(Qte & LigneSelec).Value
txtQteReçu = 0

Call RechercheEltCommande(txtDpt1.Value, txtTitre.Value, txtQteCmd.Value,
txtDateCommande.Value)
End Sub

Sub RechercheEltCommande(txtDpt1 As String, txtTitre As String, txtQteCmd As
String, txtDateCommande As Date)
'3/ Recherche les éléments de la Commande
Sheets("Mouvement" & txtDpt1).Select
For Lig = 2 To Sheets("Mouvement" & txtDpt1).[D65000].End(xlUp).Row
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 4) = txtTitre Then
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 5) = txtDateCommande
Then

txtQteCmd = Sheets("Mouvement" & txtDpt1).Range("G" & Lig)
'valeur recherchée
End If
End If
Next

End Sub

résultat : txtQteCmd est bien récupérée en fonction des paramêtres
(txtTitre & txtDateCommande) , mais n'est pas affichée

Où est l'erreur ?




Avatar
mark Desnoyer
bonjour,
j'ai effectuer les modifs comme indiqué, sans succès apparent.
en fait, en retournant le pb dans tous les sens, je me suis aperçu qu'une
des date dans la colonne5 que je cherchais à comparer avec txtDateCommande
avait un format différent des autre dates de la dite colonne.
J'ai donc fait un essai avec cette valeur. Et là parfait la macro
fonctionne.
J'en ai déduit que les valeurs que j'inscrivais dans cette colonne avaient
un format de date mal défini.
Aussi j'ai remplacé dans mon userForm qui enregistre les dites données la
ligne :
Sheets("Mouvement" & txtDpt).Range("E" & ligneAjout).Value = txtDate
'Date de la commande lors de la saisie

par :
Sheets("Mouvement" & txtDpt).Range("E" & ligneAjout).Value =
Format(CDate(txtDate), "dd/m/yy")



cela n'a rien changé, pas d'erreur déclarée, mais la date n'est pas
identifiée.

Comment déclarer la date lors de l'écriture dans la feuille, et déclarer la
donnée"txtDateCommande" lors de la recherche ??

je suis un peu per.....du !!!!

Merci encore pour l'aide indispensable que vous nous apportaient tous.


"docm" a écrit dans le message de news:
%23rZYil$
Bonjour.

Pour que la valeur de l'objet txtQteCmd soit modifiée dans la procédure
appelée, il faut passer l'objet txtQteCmd et non sa valeur.
Donc remplacer
txtQteCmd As String (qui crée une nouvelle variable appelée txtQteCmd )
par
txtQteCmd As Object

Egalement, supprime temporairement la commande On Error Resume Next. Ca va
te permettre de détecter les erreurs dans ton code.


Call RechercheEltCommande(txtDpt1, txtTitre, txtQteCmd, txtDateCommande)
End Sub

Sub RechercheEltCommande(txtDpt1 As Object, txtTitre As Object, txtQteCmd
As Object, txtDateCommande As Object)
'3/ Recherche les éléments de la Commande
Sheets("Mouvement" & txtDpt1).Select
For Lig = 2 To Sheets("Mouvement" & txtDpt1).[D65000].End(xlUp).Row
If CStr(Sheets("Mouvement" & txtDpt1).Cells(Lig, 4)) = CStr(txtTitre)
Then
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 5) = txtDateCommande
Then

txtQteCmd = Sheets("Mouvement" & txtDpt1).Range("G" & Lig)
'valeur recherchée
End If
End If
Next

End Sub



"mark Desnoyer" a écrit dans le message de
news: dq6mom$ejh$
Bonjour,
je reviens pour un problème de perte de valeur, je m'explique, j'ai une
macro qui récupère les infos (variables A à G), de la ligne de la cellule
active de la feuille(1), les valeur A et B me serve à rechercher un
complèment (H) dans la feuille(2), puis tout doit-être affichée dans un
userForm .
Mais je perd la valeur de la variable(H) mais pas les autres valeurs (A à
G)
lors de l'affichage du UserForm.

voici le code que j'ai mis dans le userform

Private Sub UserForm_Initialize()
On Error Resume Next

'1/ RECHERCHE de la "Qte Commandée" feuille "MouvementX"
Dim Lig As Integer
LigneSelec = ActiveCell.Row
txtDpt1 = Sheets("Documentation").Range("A1").Value 'Affichage du Dpt

'2/ Mise à jour des données du FORMULAIRE

txtQte = "1" 'Ititialisation de la quantité à 1
If txtDpt1 = 3 Then Qte = "F"
If txtDpt1 = 15 Then Qte = "G"
If txtDpt1 = 63 Then Qte = "H"

txtType = Sheets("Documentation").Range("E" & LigneSelec).Value
txtFamille = Sheets("Documentation").Range("A" & LigneSelec).Value
txtTheme = Sheets("Documentation").Range("B" & LigneSelec).Value
txtRef = Sheets("Documentation").Range("C" & LigneSelec).Value
txtTitre = Sheets("Documentation").Range("D" & LigneSelec).Value
'Parametre de recherche
txtFournisseur = Sheets("Documentation").Range("I" & LigneSelec).Value
txtDateCommande = Sheets("Documentation").Range("K" & LigneSelec).Value
'Parametre de recherche
txtStockOld = Sheets("Documentation").Range(Qte & LigneSelec).Value
txtQteReçu = 0

Call RechercheEltCommande(txtDpt1.Value, txtTitre.Value, txtQteCmd.Value,
txtDateCommande.Value)
End Sub

Sub RechercheEltCommande(txtDpt1 As String, txtTitre As String, txtQteCmd
As
String, txtDateCommande As Date)
'3/ Recherche les éléments de la Commande
Sheets("Mouvement" & txtDpt1).Select
For Lig = 2 To Sheets("Mouvement" & txtDpt1).[D65000].End(xlUp).Row
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 4) = txtTitre Then
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 5) = txtDateCommande
Then

txtQteCmd = Sheets("Mouvement" & txtDpt1).Range("G" & Lig)
'valeur recherchée
End If
End If
Next

End Sub

résultat : txtQteCmd est bien récupérée en fonction des paramêtres
(txtTitre & txtDateCommande) , mais n'est pas affichée

Où est l'erreur ?








Avatar
michdenis
Bonjour Mark,

As-tu essayé ceci :

La condition "Isdate" prend soin que le contenu du textbox
est réellement une donnée dans un format date qui est
reconnu par excel ....

if isdate(txtdate) then
Sheets("Mouvement" & txtDpt).Range("E" & ligneAjout).Value = datevalue(txtdate)
end if

Ou si tu veux appliquer un format particulier à ta cellule :

if isdate(txtdate) then
Sheets("Mouvement" & txtDpt).Range("E" & ligneAjout).Value = _
format(datevalue(txtdate),"dd/mmm/yyyy")
end if

Il y a aussi ceci :

if isdate(txtdate) then
with Sheets("Mouvement" & txtDpt).Range("E" & ligneAjout)
.numberformat = "dd/mmm/yyyy"
.value = format(txtdate,"dd/mmm/yyyy")
End with
end if
end if



Salutations!



"mark Desnoyer" a écrit dans le message de news: dqje7i$1a$
bonjour,
j'ai effectuer les modifs comme indiqué, sans succès apparent.
en fait, en retournant le pb dans tous les sens, je me suis aperçu qu'une
des date dans la colonne5 que je cherchais à comparer avec txtDateCommande
avait un format différent des autre dates de la dite colonne.
J'ai donc fait un essai avec cette valeur. Et là parfait la macro
fonctionne.
J'en ai déduit que les valeurs que j'inscrivais dans cette colonne avaient
un format de date mal défini.
Aussi j'ai remplacé dans mon userForm qui enregistre les dites données la
ligne :
Sheets("Mouvement" & txtDpt).Range("E" & ligneAjout).Value = txtDate
'Date de la commande lors de la saisie

par :
Sheets("Mouvement" & txtDpt).Range("E" & ligneAjout).Value >> Format(CDate(txtDate), "dd/m/yy")



cela n'a rien changé, pas d'erreur déclarée, mais la date n'est pas
identifiée.

Comment déclarer la date lors de l'écriture dans la feuille, et déclarer la
donnée"txtDateCommande" lors de la recherche ??

je suis un peu per.....du !!!!

Merci encore pour l'aide indispensable que vous nous apportaient tous.


"docm" a écrit dans le message de news:
%23rZYil$
Bonjour.

Pour que la valeur de l'objet txtQteCmd soit modifiée dans la procédure
appelée, il faut passer l'objet txtQteCmd et non sa valeur.
Donc remplacer
txtQteCmd As String (qui crée une nouvelle variable appelée txtQteCmd )
par
txtQteCmd As Object

Egalement, supprime temporairement la commande On Error Resume Next. Ca va
te permettre de détecter les erreurs dans ton code.


Call RechercheEltCommande(txtDpt1, txtTitre, txtQteCmd, txtDateCommande)
End Sub

Sub RechercheEltCommande(txtDpt1 As Object, txtTitre As Object, txtQteCmd
As Object, txtDateCommande As Object)
'3/ Recherche les éléments de la Commande
Sheets("Mouvement" & txtDpt1).Select
For Lig = 2 To Sheets("Mouvement" & txtDpt1).[D65000].End(xlUp).Row
If CStr(Sheets("Mouvement" & txtDpt1).Cells(Lig, 4)) = CStr(txtTitre)
Then
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 5) = txtDateCommande
Then

txtQteCmd = Sheets("Mouvement" & txtDpt1).Range("G" & Lig)
'valeur recherchée
End If
End If
Next

End Sub



"mark Desnoyer" a écrit dans le message de
news: dq6mom$ejh$
Bonjour,
je reviens pour un problème de perte de valeur, je m'explique, j'ai une
macro qui récupère les infos (variables A à G), de la ligne de la cellule
active de la feuille(1), les valeur A et B me serve à rechercher un
complèment (H) dans la feuille(2), puis tout doit-être affichée dans un
userForm .
Mais je perd la valeur de la variable(H) mais pas les autres valeurs (A à
G)
lors de l'affichage du UserForm.

voici le code que j'ai mis dans le userform

Private Sub UserForm_Initialize()
On Error Resume Next

'1/ RECHERCHE de la "Qte Commandée" feuille "MouvementX"
Dim Lig As Integer
LigneSelec = ActiveCell.Row
txtDpt1 = Sheets("Documentation").Range("A1").Value 'Affichage du Dpt

'2/ Mise à jour des données du FORMULAIRE

txtQte = "1" 'Ititialisation de la quantité à 1
If txtDpt1 = 3 Then Qte = "F"
If txtDpt1 = 15 Then Qte = "G"
If txtDpt1 = 63 Then Qte = "H"

txtType = Sheets("Documentation").Range("E" & LigneSelec).Value
txtFamille = Sheets("Documentation").Range("A" & LigneSelec).Value
txtTheme = Sheets("Documentation").Range("B" & LigneSelec).Value
txtRef = Sheets("Documentation").Range("C" & LigneSelec).Value
txtTitre = Sheets("Documentation").Range("D" & LigneSelec).Value
'Parametre de recherche
txtFournisseur = Sheets("Documentation").Range("I" & LigneSelec).Value
txtDateCommande = Sheets("Documentation").Range("K" & LigneSelec).Value
'Parametre de recherche
txtStockOld = Sheets("Documentation").Range(Qte & LigneSelec).Value
txtQteReçu = 0

Call RechercheEltCommande(txtDpt1.Value, txtTitre.Value, txtQteCmd.Value,
txtDateCommande.Value)
End Sub

Sub RechercheEltCommande(txtDpt1 As String, txtTitre As String, txtQteCmd
As
String, txtDateCommande As Date)
'3/ Recherche les éléments de la Commande
Sheets("Mouvement" & txtDpt1).Select
For Lig = 2 To Sheets("Mouvement" & txtDpt1).[D65000].End(xlUp).Row
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 4) = txtTitre Then
If Sheets("Mouvement" & txtDpt1).Cells(Lig, 5) = txtDateCommande
Then

txtQteCmd = Sheets("Mouvement" & txtDpt1).Range("G" & Lig)
'valeur recherchée
End If
End If
Next

End Sub

résultat : txtQteCmd est bien récupérée en fonction des paramêtres
(txtTitre & txtDateCommande) , mais n'est pas affichée

Où est l'erreur ?