Accueil – Le CFO masqué › Forums › Excel › Supprimer une ligne dans une base de données EXCEL, SANS VBA
- Ce sujet contient 11 réponses, 2 participants et a été mis à jour pour la dernière fois par Pimpin, le il y a 4 années et 6 mois.
-
AuteurMessages
-
27 juin 2020 à 15 h 44 min #66634PimpinParticipant
Bonjour à toutes et à tous,
J’ai trouvé une formule pour surligner une ligne dans une base de données EXCEL, et je voudrais supprimer cette ligne SANS VBA.
Pour cela, il faudrait récupérer le numéro de la ligne sélectionnée et trouver une formule EXCEL pour effacer la ligne en question ou son contenu dans la base de données.
Merci pour votre aide.
29 juin 2020 à 0 h 41 min #68476LionelParticipantSalut 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…29 juin 2020 à 1 h 19 min #68477PimpinParticipantMerci mon ami,
Par contre peux-tu juste me montrer la bonne formule qui permet de retrouver le numéro de la ligne sélectionnée stp. Avec un peu de chance je vais essayer de bricoler une macro au pire.
J’ai trouvé une façon pour surligner une ligne dans ma BDD avec la MFC c’est trop top. je rentre dans une cellule la référence recherchée et hop la ligne entière est coloriée. Et à chaque fois que je modifie le contenu de la cellule, la ligne coloriée change aussi.
Merci bien !29 juin 2020 à 3 h 02 min #68478LionelParticipantVoici 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 à 17 h 09 min #68903PimpinParticipantMerci pour ton fichier. Tu es trop fort !
Finalement je commence à me mettre au VBA MDR
Au fait, j’ai trouvé un petit programme intéressant mais qui ne m’arrange pas tout à fait.
Je voudrais que la variable Supprime8_Ligne = Inputbox récupère directement la valeur de la cellule A2.
Peux-tu m’aider QUESTVBA ?
Sub Supprime_Reference
Dim i as integer,
Dim Supprime_Ligne
Supprime_Ligne = Inputbox (“Référence à supprimer”)
With Thisworkbook.sheets (“BDD”)
For i = .range (“A” &.rows.count).end (xlup).row to 2 step – 1
If .range (“A” & i).value = Supprime_Ligne then
Rows (i).delete
End if
Next i
End with
end Sub30 juin 2020 à 0 h 29 min #68904LionelParticipantSalut,
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.30 juin 2020 à 3 h 26 min #68907PimpinParticipantSalut,
Merci pour ton fichier, je vais regarder cela plus tard après le taff.
Tout ceci reste encore du chinois pour moi. Je dois y aller mollo lol
2 questions :
1 – Si je me mets vraiment au VBA, est-ce que tu peux vraiment protéger toutes
tes lignes d’écriture pour que personne n’y accède. Que l’utilisateur se
contente d’utiliser une application sans fouiller dans tes lignes de programmation ?
2 – Et maintenant que je m’intéresse au VBA, tu fais comment déjà pour cacher ton mot
de passe que tu saisies à l’écran par des “*”.
Merci pour ton aide, QUESTVBA, LE PRO DU VBA30 juin 2020 à 5 h 40 min #68909LionelParticipantPour 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 à 6 h 03 min #68911LionelParticipantPour 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 à 8 h 02 min #68913PimpinParticipantJ’ai testé ce programme Sub Find_And_Delete() mais il y a quelques petits points à régler :
1 – Quand j’ai validé sur le bouton Annuler de la Msgbox lorsque la macro se lance, il m’a
affiché quand même un message de suppression ??
2 – Quand je lance la macro, j’ai remarqué que le pointeur de la souris mouline sans arrêt sauf
si le pointeur est sur la boite de dialogue ??
3 – J’ai essayé de modifier l’entête de la Msgbox à la place de Microsoft Excel et le programme a planté. Et même après avoir retiré la partie que j’avais rajouté, il a continué à me trouver des erreurs ??
J’étais obligé de redémarrer mon PC.
Peux-tu me renvoyer le même programme corrigé stp30 juin 2020 à 9 h 32 min #68934LionelParticipantVoici, 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
12 juillet 2020 à 17 h 06 min #71178PimpinParticipantSalut QUESTVBA,
Peux-tu m’aider ?
Je voudrais créer une phrase présentable incluant la date et l’heure.
J’ai pu afficher ce message :
Bonjour, nous sommes le 12/07/2020 et il est 18:50:10avec cette ligne :
Sheets (« ACCUEIL ») . range (« d10:w10 ») = « Bonjour, nous sommes le » & d_now & » et il est » & t_nowMais je voudrais afficher :
Bonjour, nous sommes le dimanche 12 juillet 2020 et il est 18 heures 50 minutes.De plus, de 18 heures à minuit mettre Bonsoir
Et mettre au singulier heure et minute si c’est 0 ou 1 (1 heure ou 1 minute).
Merci pour ton aide. -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.