Userform résultats formules retournées automatiquement dans le formulaire

Oui, dans le tableau il est en J1

Faut-il que j'intègre un objet dans l'USF ?

Faut-il que j'intègre un objet dans l'USF ?

Si ce n'est pas une formule que vous devez avoir en J1, vous allez devoir l'ajouter dans l'USF puisque les utilisateurs ne devront pas accéder à la feuille.
Quelles sont les infos à mettre ?

Non il n'y a pas de formule. C'est juste à mettre les noms des lieux-dits pour les travaux.

Titre du champ : "Secteurs-Operations"

Est-ce que j'ajoute le champs au tableau sources et une nouvelle zone texte dans l'USF ?

Par ailleurs, est-il possible de mettre une zone texte toujours visible à l'ouverture de l USF ou je pourrai mettre un court texte du genre

"Pour un nouveau marché, Il faut toujours commencer à renseigner le champ Lot.

S'il le marché ne comporte pas plusieurs lots, mettez simplement 0 (zéro)."

Est-ce que j'ajoute le champs au tableau sources et une nouvelle zone texte dans l'USF ?

Je ne comprends pas pourquoi au tableau source puisqu'il est déjà dans le tableau

Par ailleurs, est-il possible de mettre une zone texte toujours visible à l'ouverture de l USF ou je pourrai mettre un court texte du genre

A votre place j'aurai
- grisé les txtannée, numero lot etc qui sont inaccessibles
- changé le fond de la textlot dans une couleur rouge (ou autre) à l'ouverture de l'USF (voir ci-dessous) et ajouté une mention dans la propriété "controltiptext"
A l'ouverture en passant la souris devant vous verrez cette mention

Ensuite ajouté peut être ceci juste avant le END SUB de la private sub Initialize

txtLot.BackColor = vbRed
txtLot.SetFocus

Ok Dan

Autant pour moi le champ est présent sur le tableau, mais il faut que j'ajoute donc une textbox à l'USF

je suis partant pour suivre votre avis.

Comment "griser " les premiers champs de l'USF ?

Champ lot mis en rouge et le texte au survol souris apparait. Cool.

tab26

J'aurai voulu si c'est possible que quand on lance le fichier Excel, que ça soit la page de démarrage qui s'affiche obligatoiremenu au début.

Merci Dan.

1. Comment "griser " les premiers champs de l'USF ?

Cliquez sur les objets à griser puis aller dans la propriété Backcolor et choisir la couleur

2. Autant pour moi le champ est présent sur le tableau, mais il faut que j'ajoute donc une textbox à l'USF

Exact. Puis il faudra revoir tous les codes

3. J'aurai voulu si c'est possible que quand on lance le fichier Excel, que ça soit la page de démarrage qui s'affiche obligatoiremenu au début.

Mettez ceci dans le module 1 (cela y est peut être ... moi je l'ai déjà dans le fichier)

Sub demarrage()
'ouvri sur Ecran demarrage
Feuil4.Select
End Sub

ensuite collez ce code dans Thisworkbook

Private Sub Workbook_Open()
Call demarrage
End Sub

NB : on pourrait aussi réactiver la feuille à la fermeture du fichier. Cela évite d'avoir un code qui s'exécuter à l'ouverture. A vous de voir
Si intérêt, dans le code ci-avant, vous remplacez juste cette ligne

Private Sub Workbook_Open()

par

Private Sub Workbook_BeforeClose(Cancel As Boolean)

La première option me convient mieux.

Ayant essayé la deuxième, elle ralentie considérablement l'ouverture du fichier.

Bonjour Dan,

j'ai ajouter la textbox que j'ai nommé TxtSecteur dans les propriétés.

Vous m'aviez dis qu'il faut revoir le code.

Bonjour,

Dans le code Private Sub btnAjout_Click(), rajoutez cette ligne en dessous de la ligne .Item(lig, 9) = cboProcedure.Value

.Item(lig, 10) = txtsecteur.Value

Dans le code Private Sub ListBox1_Click(), rajoutez cette ligne en dessous de la ligne cboProcedure.Value = .Item(lg, 9)

txtsecteur.Value = .Item(lg, 10)

Rebonjour Dan,

j'ai ajouté les lignes de codes.

Pas de message d'erreur, tout à l'air de fonctionner.

En tous les cas et à ce stade, même si je souhaite améliorer la feuille de démarrage pour en faire un petit tableau de bord, je ne sais comment te remercier Dan et remercie ce forum. Ce tableau va servir dans les missions de notre établissement public. Vous avez le mérite d'avoir fais ce travail avec des retours, corrections et réactivité de façon incroyable et sans contre partie !! Merci Dan !! Je me permettrai de revenir vers toi pour améliorer la page d'accueil avec comme sur l'image sur la gauche un petit résumé de la base et au milieu je mettrai un ou deux graphique (tableaux croisés dynamique). Si vous avez des conseils et autres éléments à me suggérer je suis preneur.

Cela ma donné le goût d'apprendre Visual Basic.

doc2 page 0001

Bonjour

Pas de message d'erreur, tout à l'air de fonctionner.

Parfait cela

je ne sais comment te remercier Dan et remercie ce forum.

Avec plaisir. Si vous avez amélioré votre compréhension, c'était aussi le but final.
Raison aussi pour laquelle je vous ai donné des explications à appliquer par vous-même plutot qu'un fichier prêt à l'emploi .

Je me permettrai de revenir vers toi pour améliorer la page d'accueil avec comme sur l'image sur la gauche un petit résumé de la base et au milieu je mettrai un ou deux graphique (tableaux croisés dynamique). Si vous avez des conseils et autres éléments à me suggérer je suis preneur.

Pas de soucis, si besoin.
Pour les idées il faudrait que je sache ce que vous voulez avoir comme informations au niveau de la page de démarrage.

Plus tard, lorsque vous en aurez complètement terminé pensez à cloturer le fil

tab27

Bonsoir Dan,

sur la page de démarrage, je voulais faire apparaitre à gauche sous le logo le dernier Numéro de Marché, puis les Initiales du Chargé de Mission (ici AA), la date de ce dernier marché et enfin le nombre total de marche (ici 4). En d'autres termes récupérer l'enregistrement d'une cellule de la feuille TableauSource pour l'enregistrer dans la feuille Ecran Demarrage. Par exemple le Nombre total de Marchés est à récupérer dans la dernière cellule du champ N° de la feuille TableauSource.

Je me suis essayé en créant un nouveau Module3, au départ cela avait l'air de fonctionner mais quand j'enregistre d'autres données cela ne se rafraichie pas.

Ce desous mes codes dans Module3

Sub DerniereCelluleNonVide()

    Dim plage As Range
    Dim lastRow As Long
    Dim contenu As String

    ' Spécifiez la plage de cellules à vérifier pour la dernière cellule non vide
    Set plage = ThisWorkbook.Worksheets("TableauSource").Range("D1:D500")

    ' Recherche la dernière cellule non vide dans la plage spécifiée
    lastRow = plage.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    ' Vérifiez si la dernière cellule non vide se trouve sur la première ligne
    If lastRow = 1 Then
        contenu = ""
    Else
        ' Récupère le contenu de la dernière cellule non vide
        contenu = plage.Cells(lastRow, 1).Value
    End If

    ' Affichez le contenu de la dernière cellule non vide dans la cellule A1 de la feuille "Feuil2"
    ThisWorkbook.Worksheets("Ecran Demarrage").Range("A15").Value = contenu

End Sub

Sub DerniereCelluleNonVide2()

    Dim plage As Range
    Dim lastRow As Long
    Dim contenu As String

    ' Spécifiez la plage de cellules à vérifier pour la dernière cellule non vide
    Set plage = ThisWorkbook.Worksheets("TableauSource").Range("H1:H500")

    ' Recherche la dernière cellule non vide dans la plage spécifiée
    lastRow = plage.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    ' Vérifiez si la dernière cellule non vide se trouve sur la première ligne
    If lastRow = 1 Then
        contenu = ""
    Else
        ' Récupère le contenu de la dernière cellule non vide
        contenu = plage.Cells(lastRow, 1).Value
    End If

    ' Affichez le contenu de la dernière cellule non vide dans la cellule A1 de la feuille "Feuil2"
    ThisWorkbook.Worksheets("Ecran Demarrage").Range("C15").Value = contenu

End Sub
Sub DerniereCelluleNonVide3()

    Dim plage As Range
    Dim lastRow As Long
    Dim contenu As String

    ' Spécifiez la plage de cellules à vérifier pour la dernière cellule non vide
    Set plage = ThisWorkbook.Worksheets("TableauSource").Range("C1:C500")

    ' Recherche la dernière cellule non vide dans la plage spécifiée
    lastRow = plage.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    ' Vérifiez si la dernière cellule non vide se trouve sur la première ligne
    If lastRow = 1 Then
        contenu = ""
    Else
        ' Récupère le contenu de la dernière cellule non vide
        contenu = plage.Cells(lastRow, 1).Value
    End If

    ' Affichez le contenu de la dernière cellule non vide dans la cellule A1 de la feuille "Feuil2"
    ThisWorkbook.Worksheets("Ecran Demarrage").Range("C16").Value = contenu

End Sub
Sub DerniereCelluleNonVide4()

    Dim plage As Range
    Dim lastRow As Long
    Dim contenu As String

    ' Spécifiez la plage de cellules à vérifier pour la dernière cellule non vide
    Set plage = ThisWorkbook.Worksheets("TableauSource").Range("A1:A100")

    ' Recherche la dernière cellule non vide dans la plage spécifiée
    lastRow = plage.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    ' Vérifiez si la dernière cellule non vide se trouve sur la première ligne
    If lastRow = 1 Then
        contenu = ""
    Else
        ' Récupère le contenu de la dernière cellule non vide
        contenu = plage.Cells(lastRow, 1).Value
    End If

    ' Affichez le contenu de la dernière cellule non vide dans la cellule A1 de la feuille "Feuil2"
    ThisWorkbook.Worksheets("Ecran Demarrage").Range("D15").Value = contenu

End Sub

Bonjour

sur la page de démarrage, je voulais faire apparaitre à gauche sous le logo le dernier Numéro de Marché, puis les Initiales du Chargé de Mission (ici AA), la date de ce dernier marché et enfin le nombre total de marche (ici 4)....

Puisque c'est toujours la dernière ligne de votre tableau qui est à récupérer, nul besoin de 4 codes. Essayez celui-ci :

Sub DerniereCelluleNonVide()
Dim TS As ListObject

With ThisWorkbook
    Set TS = .Worksheets("TableauSource").ListObjects(1)
    MsgBox WorksheetFunction.Max(TS.ListColumns(3).DataBodyRange)
    With .Worksheets("Ecran Demarrage")
        .Range("A15").Value = TS.DataBodyRange.Cells(TS.ListRows.Count, 4).Value 'valeur colonne D - N° Marche
        .Range("C15").Value = TS.DataBodyRange.Cells(TS.ListRows.Count, 8).Value 'valeur colonne H - Charge mission
        .Range("C16").Value = TS.DataBodyRange.Cells(TS.ListRows.Count, 3).Value 'valeur colonne C - N°
        '.Range("C16").Value = WorksheetFunction.Max(TS.ListColumns(3).DataBodyRange) 'valeur colonne C - N°
        .Range("D15").Value = TS.DataBodyRange.Cells(TS.ListRows.Count, 1).Value 'valeur colonne A - Date
    End With
End With
End Sub

NB : Attention que si vous récupérez les infos de la dernière ligne, il faut que votre tableau soit toujours bien trié dans l'ordre croissant. C'est notamment valable concernant le N°. Si vous voulez être sûr utilisez plutôt la ligne contenant l'instruction Worsheetfunction.max


Je me suis essayé en créant un nouveau Module3, au départ cela avait l'air de fonctionner mais quand j'enregistre d'autres données cela ne se rafraichie pas.

Dans votre USF, vous mettez cette instruction juste avant le END SUB du code Private Sub btnAjout_Click()

Call DerniereCelluleNonVide

Cordialement

Lorsque vous en aurez complètement terminé -->

Bonjour Dan,

ce code est ou ? Dans le Module3 ?

Désolé Dan

j'avais pas rafraichi et dû raté une réponse. Je lis et je reviens vers toi.

ce code est ou ? Dans le Module3 ?

Oui dans un module. que ce soit le module 3 ou un autre, peu importe

Dan,

j'ai changer le Module3 en mettant vos codes. J'ai rajouter la ligne de code sur le Private Sub btnAjout_Click()

Pour le moment je n'ai pas de changement et mon problème est entier.

Ci-dessous mon code Module3

Sub DerniereCelluleNonVide()
Dim TS As ListObject

With ThisWorkbook
    Set TS = .Worksheets("TableauSource").ListObjects(1)
    MsgBox WorksheetFunction.Max(TS.ListColumns(3).DataBodyRange)
    With .Worksheets("Ecran Demarrage")
        .Range("A15").Value = TS.DataBodyRange.Cells(TS.ListRows.Count, 4).Value 'valeur colonne D - N° Marche
        .Range("C15").Value = TS.DataBodyRange.Cells(TS.ListRows.Count, 8).Value 'valeur colonne H - Charge mission
        '.Range("C16").Value = TS.DataBodyRange.Cells(TS.ListRows.Count, 3).Value 'valeur colonne C - N°
        .Range("C16").Value = WorksheetFunction.Max(TS.ListColumns(3).DataBodyRange) 'valeur colonne C - N°
        .Range("D15").Value = TS.DataBodyRange.Cells(TS.ListRows.Count, 1).Value 'valeur colonne A - Date
    End With
End With
End Sub

et sur le Private Sub btnAjout_Click()

Private Sub btnAjout_Click()

With Feuil1.ListObjects(1)

    With .DataBodyRange
        .Item(lig, 7) = cboTypeMarche.Value
        .Item(lig, 8) = cboChargeMission.Value
        .Item(lig, 9) = cboProcedure.Value
        .Item(lig, 10) = txtsecteur.Value
        .Item(lig, 11) = txtObjet.Value
        .Item(lig, 13) = txtAttributaire.Value
        .Item(lig, 14) = txtSiret.Value
        .Item(lig, 15) = txtlanceProcedure.Value
        .Item(lig, 16) = txtDateRemisePli.Value
        .Item(lig, 17) = txtNotifi.Value
        .Item(lig, 19) = cboNaturePrix.Value
        .Item(lig, 20) = txtEstimaBeoins.Value
        .Item(lig, 21) = txtMontantHT.Value
        .Item(lig, 23) = txtDataAvisCGEFI.Value
        .Item(lig, 24) = txtDateCAO.Value
        .Item(lig, 25) = txtNotifAR.Value
        .Item(lig, 26) = txtDateAvisAttrib.Value
        .Item(lig, 28) = cboCloture.Value
    End With
Call DerniereCelluleNonVide

End Sub
Rechercher des sujets similaires à "userform resultats formules retournees automatiquement formulaire"