Toutes mes réponses sur les forums

15 sujets de 31 à 45 (sur un total de 82)
  • Auteur
    Articles
  • en réponse à : Faire une phrase avec la date et l’heure #71257
    Lionel
    Participant

    Re-,
    Sorry, j’ai mis ‘mm’ au lieu de ‘nn’

    Option Explicit
    Sub Welcome()
    
    Dim QuelleHeure As Byte
    Dim QuelleMinute As Byte
    Dim Intro As String, Heu As String, Min As String
    
    QuelleHeure = Format(Now(), "hh")
    If QuelleHeure > 1 Then Heu = "Heures" Else Heu = "Heure"
    If QuelleHeure >= 18 Then Intro = "Bonsoir" Else Intro = "Bonjour"
    QuelleMinute = Format(Now(), "nn")
    If QuelleMinute > 1 Then Min = "Minutes" Else Min = "Minute"
    MsgBox Intro & ", nous sommes le " & Format(Date, "dddd d mmmm yyyy") & _
     Chr(10) & "et il est " & QuelleHeure & " " & Heu & " et " & QuelleMinute & " " & Min & "."
    End Sub

    Pour info, si tu veux connaître les détails de Now

    Sub TestDate()
        MsgBox Format(Now(), "dd")
        MsgBox Format(Now(), "mm")
        MsgBox Format(Now(), "yyyy")
     
        MsgBox Format(Now(), "hh")
        MsgBox Format(Now(), "nn")
        MsgBox Format(Now(), "ss")
    End Sub
    en réponse à : range de lignes de longueur variable #71256
    Lionel
    Participant

    Bonjour MLagrange,

    Voici le code que je te propose (un peu remanié) :

    Sub Convers()
    
    'Nettoyage de la feuille reclassement
    With Sheets("Reclassement")
        .Activate
        'Tableau structuré > Plage - Il faut évidemment qu'un tableau structuré existe avec le nom DATA
        .ListObjects("DATA").Unlist
        'Trouver la dernière ligne de la feuille Reclassement
        DernLigR = .Range("A" & Rows.Count).End(xlUp).Row
        'Suppression des anciennes lignes pour faire de la place
        'Le test '1' : pour être certain que le tableau contient des données sinon il efface la ligne des titres
        If DernLigR > 1 Then .Range("A2:J" & DernLigR).EntireRow.Delete
    End With
    
    'Copie des données Conversion > Reclassement
    With Sheets("Conversion")
        .Activate
        'Trouver la dernière ligne de Conversion
        DernLigC = .Range("A" & Rows.Count).End(xlUp).Row
        'Copie des données de Conversion > Reclassement
        .Range("A2:A" & DernLigC).Copy Sheets("Reclassement").Range("A2")
        Application.CutCopyMode = False
    End With
        
    With Sheets("Reclassement")
        .Activate
        .Range("A2:A" & DernLigC).Select
        'Conversion de la colonne A en différentes colonnes
        Selection.TextToColumns Destination:=Sheets("Reclassement").Range("A2"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True
        'Suppression des doublons
        .Range("$A$1:$J$" & DernLigC).RemoveDuplicates Columns:=1, Header:=xlYes
    'Mise en forme des données
        DernLigR = .Range("A" & Rows.Count).End(xlUp).Row
        .Range("B2:B" & DernLigR).Select
        Selection.NumberFormat = "yyyy/mm/dd hh:mm:ss"
        .Range("C2:C" & DernLigR).Select
        Selection.NumberFormat = "mm/dd/yyyy"
        .Range("H2:H" & DernLigR).Select
        Selection.NumberFormat = "0.00000"
        .Range("I2:I" & DernLigR).Select
        Selection.NumberFormat = "#,##0.00 $"
    
    'Mettre en tableau structuré
        Set myTable = .Range("A2").CurrentRegion
        .ListObjects.Add(xlSrcRange, myTable, , xlYes).Name = "DATA"
        .ListObjects("DATA").TableStyle = "TableStyleLight9"
    
    'Tri du tableau
        With .ListObjects("DATA").Sort
            .SortFields.Clear
            'Mise en place des trois clés de tri
            .SortFields.Add Key:=Range("DATA[Date]"), SortOn:=xlSortOnValues, Order:=xlAscending _
                , DataOption:=xlSortNormal
            .SortFields.Add Key:=Range("DATA[Titre]"), SortOn:=xlSortOnValues, Order:=xlAscending _
                , DataOption:=xlSortNormal
            .SortFields.Add Key:=Range("DATA[Heure/min]"), SortOn:=xlSortOnValues, Order:= _
                xlAscending, DataOption:=xlSortNormal
            'Tri effectif
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    'Ajuster les colonnes
        .Columns("A:J").Select
        .Columns("A:J").EntireColumn.AutoFit
    
    End With
    End Sub
    en réponse à : Faire une phrase avec la date et l’heure #71248
    Lionel
    Participant

    Bonsoir Pimpin,
    Comment cela fonctionne avec le VBA. Voici un petit code qui te prmettra d’avoir un pop-up avec le message désiré. Après, il te restera à la mettre dans tes cellules au bon endroit.

    Option Explicit
    Sub Welcome()
    
    Dim QuelleHeure As Byte
    Dim QuelleMinute As Byte
    Dim Intro As String, Heu As String, Min As String
    
    QuelleHeure = Format(Now(), "hh")
    If QuelleHeure > 1 Then Heu = "Heures" Else Heu = "Heure"
    If QuelleHeure >= 18 Then Intro = "Bonsoir" Else Intro = "Bonjour"
    QuelleMinute = Format(Now(), "mm")
    If QuelleMinute > 1 Then Min = "Minutes" Else Min = "Minute"
    MsgBox Intro & ", nous sommes le " & Format(Date, "dddd d mmmm yyyy") & _
     Chr(10) & "et il est " & Format(Now(), "hh") & " " & Heu & " et " & Format(Now(), "mm") & " " & Min & "."
    End Sub
    en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68934
    Lionel
    Participant

    Voici, pour la gestion de Annuler et l’en-tête.

    Option Explicit
    
    Sub Find_And_Delete()
    
    Dim LigneASuppr As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String, AdresseTrouvee As String
    
    Valeur_Cherchee = InputBox("Référence à supprimer", "RÉFÉRENCE")
    'Dans la première colonne de la feuille BDD
    Set PlageDeRecherche = Sheets("BDD").Range("A:A")
    '*******************************
    'Si appuye sur Annuler ou OK en pas d'encodage
    If Valeur_Cherchee = "" Then Exit Sub
    'Méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
    Set LigneASuppr = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
    
    'Traitement de l'erreur possible : Si on ne trouve rien :
    If LigneASuppr Is Nothing Then
        'Ici, traitement pour le cas où la valeur n'est pas trouvée
        AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
        MsgBox AdresseTrouvee
    Else
        'Ici, traitement pour le cas où la valeur est trouvée
        AdresseTrouvee = Range(LigneASuppr.Address).Row
        Rows(AdresseTrouvee).Delete
        MsgBox "La ligne " & AdresseTrouvee & " avec la référence " & Valeur_Cherchee & " a été supprimée."
    End If
    
    'Vidage des variables
    Set PlageDeRecherche = Nothing
    Set LigneASuppr = Nothing
    End Sub
    en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68911
    Lionel
    Participant

    Pour le question 2 :
    Pour le mot de passe tu peux utiliser ce codes.

    Code 1 : à mettre dans ThisWorkbook. Donc, à l’ouverture du fichier, on te demande ton MDP qui est ‘Test’. Si c’est correct, tu continues, sinon Excel se ferme.

    Private Sub Workbook_Open()
        Dim PASSWORD As String, MDP
        PASSWORD = "Test"
        MDP = InputBoxDmdMDP("Entrez le mot de passe...", "Password")
        If MDP <> PASSWORD Then
            MsgBox ("L'accès ne vous est pas autorisé. Bye Bye ! ")
            Application.Quit
        End If
    End Sub

    Code 2 : à mettre dans la partie Modules. Cette partie permet de gérer les *.

    Option Explicit
    Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
    ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
    Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
    (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, _
    ByVal dwThreadId As Long) As Long
    Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
    Private Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" _
    (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, _
    ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long
    Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
    Private Const EM_SETPASSWORDCHAR = &HCC
    Private Const WH_CBT = 5
    Private Const HCBT_ACTIVATE = 5
    Private Const HC_ACTION = 0
    Private hHook As Long
    
    Public Function NewProc(ByVal lngCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim RetVal
    Dim strClassName As String, lngBuffer As Long
    If lngCode < HC_ACTION Then
        NewProc = CallNextHookEx(hHook, lngCode, wParam, lParam)
        Exit Function
    End If
    strClassName = String$(256, " ")
    lngBuffer = 255
     If lngCode = HCBT_ACTIVATE Then
        RetVal = GetClassName(wParam, strClassName, lngBuffer)
            If Left$(strClassName, RetVal) = "#32770" Then
            SendDlgItemMessage wParam, &H1324, EM_SETPASSWORDCHAR, Asc("*"), &H0
            End If
     End If
    CallNextHookEx hHook, lngCode, wParam, lParam
    End Function
    
    Public Function InputBoxDmdMDP(Prompt, Optional Title, Optional Default, Optional XPos, _
    Optional YPos, Optional HelpFile, Optional Context) As String
    Dim lngModHwnd As Long, lngThreadID As Long
    lngThreadID = GetCurrentThreadId
    lngModHwnd = GetModuleHandle(vbNullString)
    hHook = SetWindowsHookEx(WH_CBT, AddressOf NewProc, lngModHwnd, lngThreadID)
    InputBoxDmdMDP = InputBox(Prompt, Title, Default, XPos, YPos, HelpFile, Context)
    UnhookWindowsHookEx hHook
    End Function
    • Cette réponse a été modifiée le il y a 3 années et 9 mois par Lionel.
    en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68909
    Lionel
    Participant

    Pour ta question 1 :
    Avec ALT F11, tu arrives sur la fenêtre VBA.
    Onglet ‘Outils’ → ‘Propriétés de VBAProject…’ → Onglet ‘Protection’, Cocher ‘Verrouiller le projet pour affichage’ → encoder ton MDP et le confirmer → OK → Quitter → Enregistrer → Fermer le fichier.
    À la prochaine ouverture, il faudra mettre ce MDP pour aller modifier le code des macros.

    en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68904
    Lionel
    Participant

    Salut,
    Voici ce que je te propose. La méthode Find devrait être plus rapide que passer toutes les cellules en revue (le fichier est en xslx, à modifier en xlsm pour activer les macros) :

    Option Explicit
    
    Sub Find_And_Delete()
    
    Dim LigneASuppr As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String, AdresseTrouvee As String
    
    Valeur_Cherchee = InputBox("Référence à supprimer")
    'Dans la première colonne de la feuille BDD
    Set PlageDeRecherche = Sheets("BDD").Range("A:A")
    '*******************************
    
    'Méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
    Set LigneASuppr = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
    
    'Traitement de l'erreur possible : Si on ne trouve rien :
    If LigneASuppr Is Nothing Then
        'Ici, traitement pour le cas où la valeur n'est pas trouvée
        AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
        MsgBox AdresseTrouvee
    Else
        'Ici, traitement pour le cas où la valeur est trouvée
        AdresseTrouvee = Range(LigneASuppr.Address).Row
        Rows(AdresseTrouvee).Delete
        MsgBox "La ligne " & AdresseTrouvee & " avec la référence " & Valeur_Cherchee & " a été supprimée."
    End If
    
    'Vidage des variables
    Set PlageDeRecherche = Nothing
    Set LigneASuppr = Nothing
    End Sub
    • Cette réponse a été modifiée le il y a 3 années et 9 mois par Lionel.
    Attachments:
    You must be logged in to view attached files.
    en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68478
    Lionel
    Participant

    Voici un petit fichier.
    J’ai mis une petite DB dans les colonnes A>C. Le critère est en F3 et la ligne trouvée se trouve en G3.

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68476
    Lionel
    Participant

    Salut Pimpin,
    (⊙﹏⊙)
    Avec une simple formule, tu ne peux pas supprimer une ligne de ta DB. Tu peux trouver le numéro de ligne mais ensuite, soit tu le fais en manuel soit via VBA. De plus, juste effacer le contenu risque de te poser un problème car tu vas avoir des lignes vides au fur et à mesure dans ta DB ce qui n’est pas très logique, ni performant…

    en réponse à : Formule Cube Excle #66358
    Lionel
    Participant

    Bonjour,
    Tu veux travailler avec des formules ou du vba ?
    Je te remets ton fichier avec ma formule (https://www.lecfomasque.com/sujet/formule-cube-excle/#post-65947). Si tu as une liste cela évite de passer par un tcd intermédiaire.

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formule Cube Excle #65947
    Lionel
    Participant

    Bonjour,
    Je n’en sais pas assez pour répondre d’une manière précise. Je te propose ce fichier avec deux possibilités : si tes données sont triées sur les Directeurs (tableau de gauche) si tes données ne sont pas triées (tableau de droite).

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Mettre en gras ou souligner un mot dans une phrase #65903
    Lionel
    Participant

    Eh oui, toujours ce vba.

    en réponse à : Mettre en gras ou souligner un mot dans une phrase #65899
    Lionel
    Participant

    Salut Pimpin,
    À ma connaissance, ce n’est pas possible d’appliquer un formatage (gras, souligner, couleur ou autre) au résultat d’une partie d’une formule.

    en réponse à : Formule variation #65798
    Lionel
    Participant

    Re-,
    Voici le fichier avec la formule adaptée :
    =SI(OU(ET(A2>=0;B2>=0);ET(A2<=0;B2<=0);ET(A2>=0;B2<0));B2-A2;ABS(A2-B2))

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Formule variation #65794
    Lionel
    Participant

    Bonjour,
    En C2, tu peux essayer cette formule :
    =SI(OU(ET(A2>=0;B2>=0);ET(A2<=0;B2<=0));B2-A2;B2+A2)
    est-ce que cela colle pour tous tes cas (négatif et positif) ?

    • Cette réponse a été modifiée le il y a 3 années et 10 mois par Lionel.
15 sujets de 31 à 45 (sur un total de 82)