UserForm valeur cellule en texte au lieu de numérique

Signaler
Messages postés
6
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2010
-
Messages postés
6
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2010
-
Bien le bonjour à tous,

Pour ne pas dépareiller de certains, je suis plus qu'un débutant en la matière et je tâtonne comme je peux dans les codes VBA d'Excel et Word.
Il s'agit ici d'un petit programme permettant la gestion de locataires.
Pour ce faire, lors de la création d'un nouveau locataire, je fais afficher un userform dans un "Sub".
Mon code commence par vérifier la présence d'onglets parasites avant de lancer le USF.
Mes soucis :

Conversion des nombres encodés dans le USF qui apparaissent en texte dans la feuille Excel
Voici les codes utilisés, et qui ne fonctionne pas

Private Sub TextLoyer_Change()
Range("B12").Select
ActiveCell.Value = TextLoyer
End Sub

Private Sub TextLoyer_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextLoyer.Value = Format(TextLoyer.Value, "# ##0.00")
' TextLoyer.Value = FormatCurrency(TextLoyer.Value, "0,00 €")
End Sub

Et enfin, tant qu'on y est, pour une raison que j'ignore, à la sortie de mon USF, j'ai à chaque fois un message d'erreur.

Voici le code de mon "Sub" :

Sub AjoutFeuille_Click()
'
' AjoutFeuille Macro
' Ajout d'un feuille en fin de classeur
'
' Touche de raccourci du clavier: Ctrl+Maj+F
'
'
'
'
Dim i As Integer
For i = 1 To Workbooks("Locataires.xls").Sheets.Count
If Workbooks("Locataires.xls").Sheets(i).Name = "NL" Then
If ModeSilence = False Then
If MsgBox("L'onglet " & "NL" & " vas être supprimé." & Chr(10) & "Voulez-vous vraiment supprimer cet onglet ?", vbYesNo, "Supprimer ?") = vbNo Then
MsgBox "Action annulée.", vbInformation, "Annulé"
Exit For
Else
Application.DisplayAlerts = False
Workbooks("Locataires.xls").Sheets("NL").Delete
Application.DisplayAlerts = True
Exit For
End If
Else
Application.DisplayAlerts = False
Workbooks("Locataires.xls").Sheets("NL").Delete
Application.DisplayAlerts = True
Exit For
End If
End If
Next
SupprimerOnglet = True
'
'

'
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "NL"
ActiveSheet.Move After:=Sheets(Sheets.Count)
Sheets("Modele").Visible = True
Sheets("Modele").Select
ActiveSheet.Cells.Select
Selection.Copy
Sheets("Modele").Select
ActiveWindow.SelectedSheets.Visible = False
Sheets("NL").Select
ActiveSheet.Paste
ActiveWindow.Zoom = 75
ActiveWorkbook.Sheets("NL").Tab.ColorIndex = 40

Load UsfLoc

' Ceci est un essais de correction format cellules texte en monétaire.. sans succès !
' Range("C12:D12,C17:D17,E12:F12,E18").Select
' Selection.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"

End Sub

Voici le code de sortie dans mon USF :

Private Sub Creer_Click()
Dim vNom1
UsfLoc.Hide
' Modif nom onglet feuille en cours
Range("A1").Select
vNom1 = ActiveCell.Value
ActiveSheet.Name = vNom1
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlNoRestrictions
' retour à la feuille principale et mise à jour des données
Sheets("Liste locataires").Select
Application.Run "Locataires.XLS!EnleverProtecFeuille"
Range("a2").Select
Do
If ActiveCell.Value <> Null = True Then
End If
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Then Exit Do
Loop
ActiveCell.Value = vNom1
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=vNom1 + "!a1"
Application.CutCopyMode = False
With Selection.Font
.Name = "Courier New"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleSingle
.ColorIndex = 5
End With
Selection.Interior.ColorIndex = xlNone
ActiveCell.EntireRow.Select
Selection.EntireColumn.Hidden = False
ActiveCell.Offset(-1, 1).Range("a1").Select
Do
If ActiveCell.Value <> Empty = True Then
Selection.Copy
ActiveCell.Offset(1, 0).Range("a1").Select
ActiveSheet.Paste
ElseIf ActiveCell.Value = ("0") Then
Selection.Copy
ActiveCell.Offset(1, 0).Range("a1").Select
ActiveSheet.Paste
End If
ActiveCell.Offset(-1, 1).Range("a1").Select
If ActiveCell.Value = "" Then Exit Do
Loop
Dim vNom3
ActiveCell.Offset(0, -22).Range("a1").Select
vNom3 = ActiveCell.Value
ActiveCell.Offset(1, 1).Range("a1").Select
Do
If ActiveCell.Value <> Empty = True Then
Selection.Replace What:=vNom3, Replacement:=vNom1, LookAt:=xlPart _
, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
ElseIf ActiveCell.Value = ("0") Then
Selection.Replace What:=vNom3, Replacement:=vNom1, LookAt:=xlPart _
, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
ActiveCell.Offset(0, 1).Range("a1").Select
If ActiveCell.Value = "" Then Exit Do
' On masque les colonnes non usitées
Loop
Columns("c:d").Select
Selection.EntireColumn.Hidden = True
Columns("g:o").Select
Selection.EntireColumn.Hidden = True
' Tri locataires par nom
Columns("A:V").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlNoRestrictions
Range("A1").Select
' On stoppe le USF
Unload Me
End Sub



Le bonheur des uns ne fait pas toujours le bonheur des autres

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Pour ne pas dépareiller de certains, ça manque de précision

"Conversion des nombres encodés dans le USF" : Tu as encodé des nombres ?
Le code que tu nous proposes ne nous dit pas de quel type son les objets :
Est-ce que TextLoyer est une TextBox ?
Dans ce cas, l'utilisation officielle est TextLoyer.Text pour lire son contenu.
Qu'y a t-il dans cette TextBox ? quel genre de chiffre ?
Parce que convertir en Currency ... je n'aimerai pas payer tes loyers, si tu as besoin de ce format ...
Puisque tu colles un chiffre dans une cellule d'une feuille, pourquoi ne pas demander au format de la cellule ? --> Enregistre un e macro pendant que tu mets en forme à la main ta cellule et repique le code pour le mettre dans ta macro.

"j'ai à chaque fois un message d'erreur."
Lequel ?
Sur quelle ligne ?

PS : La prochaine fois que tu colles du code, utilise le formatage proposé dans les outils de la zone de saisie --> Cela rendra le code lisible (je n'ai pas eu le courage de le lire à cause de la perte de l'indentation)

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
6
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2010

Bonjour Jack,

Désolé, c'est la première fois que je poste ici donc,je ne connais pas encore les astuces
Il s'agit effectivement d'un textbox dans lequel j'introduis des chiffres.
J'ai mis en forme mes cellules, mais cette mise en forme est perdue à la réception des données du USF dès que je valide le USF (clic sur le bouton de validation).
La conversion en currency était un essai avorté (code non reconnu) pour corriger le résultat dans ma feuille excelt.. et je n'avais pas effacé la ligne .
Je vais corriger TextBox.Value par TextBox.Text comme tu le conseilles et je reviens pour donner le résultat..

Au fait, tu parles de formatage de la zone de saisie ..... je vais ré-essayer de mettre mon code correctement .... mais je ne l'ai pas sur cet ordi donc au prochain message

Merci de ton aide

Bragon


Le bonheur des uns ne fait pas toujours le bonheur des autres
Messages postés
6
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2010

Private Sub TextLoyer_Change()
    Range("B12").Select
    ActiveCell.Value = TextLoyer
End Sub

Private Sub TextLoyer_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextLoyer.Text = Format(TextLoyer.Text, "0.00")
End Sub



Voilà je crois plus lisible.

Pour rappel WINXP Pro / OFFICE 2003
Il s'agit d'un textbox dans lequel j'encode un chiffre (formatage avec deux décimales).
L'affichage me montre du "texte" dans ma feuille excel en lieu et place du formatage prévu dans la feuille (formatage existant - currency - écrasé).
J'ai essayé plusieurs solutions mais aucun résultat positif.

Merci de votre aide





Le bonheur des uns ne fait pas toujours le bonheur des autres
Messages postés
6
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2010

Pour ne pas mélanger, j'ai séparé ma deuxième question qui est un problème de sortie de mon "Sub"

Je remet ci-dessous le code complet:

Sub AjoutFeuille_Click()
'
' AjoutFeuille Macro
'
' Vérification de l'existence d'une feuille nommée NL dans le worbooks afin de l'éliminer
Dim i As Integer
    For i = 1 To Workbooks("Locataires.xls").Sheets.Count
        If Workbooks("Locataires.xls").Sheets(i).Name = "NL" Then
            If ModeSilence = False Then
                If MsgBox("L'onglet " & "NL" & " vas être supprimé." & Chr(10) & "Voulez-vous vraiment supprimer cet onglet ?", vbYesNo, "Supprimer ?") = vbNo Then
                    MsgBox "Action annulée.", vbInformation, "Annulé"
                    Exit For
                Else
                    Application.DisplayAlerts = False
                    Workbooks("Locataires.xls").Sheets("NL").Delete
                    Application.DisplayAlerts = True
                    Exit For
                End If
            Else
                Application.DisplayAlerts = False
                Workbooks("Locataires.xls").Sheets("NL").Delete
                Application.DisplayAlerts = True
                Exit For
            End If
        End If
    Next
    SupprimerOnglet = True
    
' Ajout d'un feuille nommée NL et copie du formatage modèle dans la feuille en fin de classeur
    ActiveWorkbook.Sheets.Add
    ActiveSheet.Name = "NL"
    ActiveSheet.Move After:=Sheets(Sheets.Count)
    Sheets("Modele").Visible = True
    Sheets("Modele").Select
    ActiveSheet.Cells.Select
    Selection.Copy
    Sheets("Modele").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("NL").Select
    ActiveSheet.Paste
    ActiveWindow.Zoom = 75
    ActiveWorkbook.Sheets("NL").Tab.ColorIndex = 40

' lancement de mon userform
    Load UsfLoc
    
End Sub


Lorsque j'arrive en fin de macro, celle-ci bloque sur

"Load UsfLoc"

... mais toute ma macro c'est bien déroulée puisque rien ne suit cette commande...

Merci de votre aide

Bragon

Le bonheur des uns ne fait pas toujours le bonheur des autres
Messages postés
6
Date d'inscription
jeudi 8 septembre 2005
Statut
Membre
Dernière intervention
13 janvier 2010

Code d'erreur :
Erreur d'exécution"91":
Variable objet ou variable de bloc With non définie



Le bonheur des uns ne fait pas toujours le bonheur des autres