Toutes mes réponses sur les forums
-
AuteurMessages
-
Lionel
ParticipantRe-,
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
Lionel
ParticipantBonjour 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
Lionel
ParticipantBonsoir 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
30 juin 2020 à 9 h 32 min en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68934Lionel
ParticipantVoici, 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
30 juin 2020 à 6 h 03 min en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68911Lionel
ParticipantPour 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
30 juin 2020 à 5 h 40 min en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68909Lionel
ParticipantPour 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.30 juin 2020 à 0 h 29 min en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68904Lionel
ParticipantSalut,
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
Attachments:
You must be logged in to view attached files.29 juin 2020 à 3 h 02 min en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68478Lionel
ParticipantVoici 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.29 juin 2020 à 0 h 41 min en réponse à : Supprimer une ligne dans une base de données EXCEL, SANS VBA #68476Lionel
ParticipantSalut 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…Lionel
ParticipantBonjour,
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.Lionel
ParticipantBonjour,
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.Lionel
ParticipantEh oui, toujours ce vba.
Lionel
ParticipantSalut 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.Lionel
ParticipantRe-,
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.Lionel
ParticipantBonjour,
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) ? -
AuteurMessages