Afficher contenu cellule dans un Label

Fermé
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 - 16 févr. 2013 à 16:20
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 17 févr. 2013 à 17:04
Bonjour,

J'ai un petit soucis pour afficher le contenu d'une cellule " D4" dans un " Label " en fonction d'une selection dans une ListBox.

Si je choisis " a " dans la listbox, J'ai un bouton pour "Valider" ce choix, une fois le choix valider, j'aimerais afficher dans un Label, le contenu de la cellule "D4 "
Si je choisis " b " ce qui se trouve en " D5" doit s'afficher.

Mon code :

Private Sub CommandButton1_Click()
If ListBox1.ListIndex = 0 Then
Label1.Caption = "Range(D4)"
If ListBox1.ListIndex = 1 Then
Label1.Caption = "Range(D5)"
End If
End If
End Sub

Private Sub UserForm_Initialize()
    ListBox1.ColumnHeads = False
    ListBox1.RowSource = "Feuil1!C3:C7"
End Sub


J'ai déjà fait pas mal de recherche sur le net .

Merci bien et bon samedi




10 réponses

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
16 févr. 2013 à 16:29
Bonjour,

Ne pas mettre les " " sinon c'est une chaine.
Tu peux essayer aussi avec :
If ListBox1.ListIndex < 2 Then
Label1.Caption = [D4].Offset(CLng(ListBox1.ListIndex), 0)
endif 


eric
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 072
16 févr. 2013 à 16:44
Merci cela marche.

J'ai essayer d'ajouter la même chose si " B " est choisi mais " ça marche pôô ! )

Private Sub CommandButton1_Click()
If ListBox1.ListIndex < 2 Then
Label1.Caption = [D4].Offset(CLng(ListBox1.ListIndex), 0)
If ListBox1.ListIndex < 3 Then
Label1.Caption = [D5].Offset(CLng(ListBox1.ListIndex), 1)
End If
End If
End Sub


De plus, je dois cliquer dans ma listbox pour surligner le choix, je pense qu'il doit y avoir un moyen pour éviter cela.

0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 16/02/2013 à 17:19
Label1.Caption = [D4].Offset(CLng(ListBox1.ListIndex), 0)
te fait les 2 cas, pas besoin d'ajouter de tests.
[D4].Offset(ligne, colonne) te crée un décalage de la référence D4.
- si ligne=0 => [D4].Offset(0, 0) => D4 (si colonne=0)
- si ligne=1 => [D4].Offset(1, 0) => D5
- etc

eric

edit: je crois que j'ai répondu à coté...
Que veux tu dire par J'ai essayer d'ajouter la même chose si " B " est choisi ?
- si ligne=1 et colonne =1 => [D4].Offset(1, 1) => E5
Les offset peuvent être négatif pour décaler à gauche ou au-dessus.

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 072
16 févr. 2013 à 17:41
Re,

Donc, si je sélectionne A, cela renvoi l'affichage de D4, cela marche.
Si je déroule et choisis B, cela doit me renvoyer l'affichage de D5.

Private Sub CommandButton1_Click()
If ListBox1.ListIndex = 0 Then
Label1.Caption = [D4].Offset(CLng(ListBox1.ListIndex), 0)
If ListBox1.ListIndex = 1 Then
Label1.Caption = [D5].Offset(CLng(ListBox1.ListIndex), 1)
End If
End If
End Sub

0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
16 févr. 2013 à 18:48
Si tu fais autant de test que de valeur dans ta liste pas besoin d'utiliser offset.
soit :
If ListBox1.ListIndex = 0 Then
Label1.Caption = [D4]
elseIf ListBox1.ListIndex = 1 Then
Label1.Caption = [D5]
End If

soit (tous les cas sont traités en 1 ligne) :
If ListBox1.ListIndex <2 Then
Label1.Caption = [D4].Offset(CLng(ListBox1.ListIndex), 0) 
End If
Et si tu passes à 5 choix tu as juste à changer <2 en <5
eric
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 072
16 févr. 2013 à 19:21
Merciiii, cela marche très bien

Avec cela je comprend comment afficher ce que je souhaite dans le label, y compris ce qui se trouve dans plusieurs cellules.

Private Sub CommandButton1_Click()
If ListBox1.ListIndex = 0 Then
Label1.Caption = [D4] & [E4]
ElseIf ListBox1.ListIndex = 1 Then
Label1.Caption = [D5] & [E5]
End If
End Sub


Par contre, il y a un moyen lorsque l'on selectionne une ligne dans la listbox ( a par exemple ) de ne pas avoir à re-cliquer dessus pour la selectionner ?
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
16 févr. 2013 à 19:31
Ben j'aurais tendance à dire que quand c'est sélectionné ça le reste
mais comme il n'y a pas de fichier de test...
eric
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 072
16 févr. 2013 à 21:00
C'est ok, cela venait que ma listbox avait des dimensions trop petites !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 072
16 févr. 2013 à 21:20
Suite à cela , j'ai rajouter une textbox pour y saisir un nombre et un autre bouton .
Comment faire pour enregistrer les informations contenus dans mon label et cette textbox dans un fichier excel dont le nom serait celui du nombre contenu dans la textbox de façon que à chaque fois que le nombre saisi dans la textbox génère un nouveau fichier excel ?

Ce fichier excel se présenterait sous la forme suivante :
A1 = serait un texte prédéfini
A2 = nombre contenu dans la textbox
B1 = serait un texte prédéfini
B2 = texte contenu dans le label

Et comment générer ce fichier sans demande de confirmation ?

J'ai parcouru différents sites et tutos.

Merci
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
16 févr. 2013 à 23:16
Re,

[A2]=textbox1
chemin = "d:\tmp\"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=chemin & [Feuil1!A2] & ".xls", FileFormat:=xlNormal
Application.DisplayAlerts = True

eric
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 072
17 févr. 2013 à 15:15
Re, et bonjour

Je me suis servi d'une macro pour essayer la mise en page de ce fichier excel généré, cela marche mais je n'arrive pas à le nommer correctement, cela me met une erreur:

Le code qui fonctionne si dans :
    ActiveWorkbook.SaveAs Filename:="C:\Archives_2013\new.xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False 

je met " new " comme nom.

Si je met cela :
ActiveWorkbook.SaveAs Filename:="C:\Archives_2013\& [Feuil1!A2] & ".xls",
FileFormat:=xlNormal
Application.DisplayAlerts = True

Ce code ne marche pas.

Mon code complet pour la création du fichier :

Private Sub CommandButton2_Click()
[A2] = TextBox1
chemin = "C:\tmp\"
' saveexcel Macro
'

'
    Workbooks.Add
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.7)
        .RightMargin = Application.InchesToPoints(0.7)
        .TopMargin = Application.InchesToPoints(0.75)
        .BottomMargin = Application.InchesToPoints(0.75)
        .HeaderMargin = Application.InchesToPoints(0.3)
        .FooterMargin = Application.InchesToPoints(0.3)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 1200
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.7)
        .RightMargin = Application.InchesToPoints(0.7)
        .TopMargin = Application.InchesToPoints(0.75)
        .BottomMargin = Application.InchesToPoints(0.75)
        .HeaderMargin = Application.InchesToPoints(0.3)
        .FooterMargin = Application.InchesToPoints(0.3)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 1200
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("C4").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("A4").Select
    [A4] = TextBox1
    Range("A9").Select
    ChDir "C:\Archives_2013"
    ActiveWorkbook.SaveAs Filename:="C:\Archives_2013\new.xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub


0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 17/02/2013 à 15:58
Bonjour,

le principe :
"chaine1" & variable & "chaine2"
Il faut penser à refermer les " pour les chaines.

ActiveWorkbook.SaveAs Filename:="C:\Archives_2013\" & [Feuil1!A2] & ".xls",
FileFormat:=xlNormal
Application.DisplayAlerts = True

eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 072
17 févr. 2013 à 16:08
Merci Eric

J'ai ajouter une autre userform qui est appelé lors du clic sur le bouton pour enregistrer qui s'affiche, celle-ci contient 2 boutons.
Un qui enregistre le fichier excel et le deuxième qui masque cette seconde userform si on ne veut pas valider cet enregistrement.
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 072
17 févr. 2013 à 16:36
Sur ce code :
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("A4").Select
    [A4] = User.TextBox1
    Range("A9").Select
    ChDir "C:\Archives_2013"
    ActiveWorkbook.SaveAs Filename:="C:\Archives_2013\" & [Feuil1!A4] & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    sauvegardefichier.Hide  


J'ai ajouté un code pour fermer le fichier excel mais j'ai du me planter, cela m'a fermer mon fichier d'origine et non le nouveau fichier créé et de plus sans sauvegarde, j'ai du tout me retaper (((

ThisWorkbook.Close SaveChanges:=False


Mon erreur doit surement venir de " ThisWorkbook " ?
0
irongege Messages postés 40847 Date d'inscription jeudi 1 novembre 2007 Statut Modérateur Dernière intervention 29 juin 2023 5 072
17 févr. 2013 à 16:54
C'est ok :
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range("A4").Select
    [A4] = User.TextBox1
    Range("A9").Select
    ChDir "C:\Archives_2013"
    ActiveWorkbook.SaveAs Filename:="C:\Archives_2013\" & [Feuil1!A4] & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        ActiveWindow.Close
    sauvegardefichier.Hide
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
17 févr. 2013 à 17:04
Thisworkbook désigne le classeur ayant le code.
Activeworkbook le classeur actif.
Mais si tu laisses la main à l'utilisateur le classeur actif n'est peut-être plus celui que tu penses.

Je te conseille plutôt de faire comme ça (sauf si tu veux vraiment thisworkbook qui reste utile !) :
Dim wb1 As Workbook
Set wb1 = Workbooks.Add
Après tu désignes toujours ton classeur par wb1 :

wb1.activate
wb1.name
wb1.close
etc

Et je te conseille de faire pareil pour les feuilles si tu travailles sur plusieurs à la fois :
Dim shDest as worksheet
set shDest = worksheets("Feuil1")
C'est plus léger que d'écrire tout le temps worksheets("Feuil1")... et tu sais à quelle feuille tu t'adresse même si elle n'est pas active :
shDest.[A1] = var1

Et dans les précautions et bonnes habitudes je te conseille d'aller dans les options de VBE et d'activer 'Déclaration des variables obligatoires'
Ca t'ajoute Option Explicit en haut de chaque feuille de code.
Ca t'oblige à déclarer toutes les variables, et tant qu'à faire les typer au passage (as string, as long, ...).
Ca évite la recherche de bugs très difficile lorsque que tu fais une faute de frappe sur un nom de variable.

eric
0