Macro en VBA qui ajoute un Nom en le classant au sein d'une liste

Bonjour à tous,

Je me casse les dents sur une solution qui me permettrait dans le fichier ci joint d'avoir en Feuil2 un BOUTON dont la finalité est d'ajouter un NOM au sein d'une liste existante (Colonne A) tout en classant ce nom au bon endroit de manière alphabétique et tout en préservant les valeurs affecté aux case à cocher et les liaisons au cellule de cette dernière .

La finalité étant qu'une personne lambda sans compétence puisse ajouter un prénom classé dans le bon ordre, sans avoir à opérer des copier/coller de case à cocher, sans utiliser la fonction tri ( qui jusqu'ici chamboule mes liaisons cellules/case à cocher).

l'idée pour moi était de suivre un ordre en ce sens:

1) déclencher une fenêtre formulaire " Ajouter nouveau NOM1"

2) Copier/coller ce nouveau NOM1 en bas de la liste après avoir laissé une ligne vide

3) repérer le NOM2 existant dans la liste qui suivra de manière alphabétique ce nouveau NOM1

4)copier/coller les valeurs ( uniquement) de la plage formée verticalement par NOM2 jusque bas de la liste , et horizontalement des colonnes A à I

5)Copier/coller le NOM1 et les valeurs de sa ligne correspondante ( de A à I) à son nouvel emplacement ( c'est à dire juste avant NOM2)

6) et enfin, effacer le doublon restant du NOM1 initialement copié en bas de liste

J'imagine que mon process plutôt fastidieux n'est pas optimal et qu'il y a une manière beaucoup plus simple d'envisager la chose mais je ne trouve pas..

Et la macro ( ajouter nom sans tri) que j'essaie de bricoler en pur amateur ne conduit pas tout à fait à ce que je veux

30test-formulaire.zip (135.93 Ko)

Bonjour,

Je me casse les dents sur une solution qui me permettrait dans le fichier ci joint d'avoir en Feuil2 un BOUTON dont la finalité est d'ajouter un NOM au sein d'une liste existante (Colonne A) tout en classant ce nom au bon endroit de manière alphabétique et tout en préservant les valeurs affecté aux case à cocher et les liaisons au cellule de cette dernière .

1. Bon je dirais déjà que là, il faut éviter les case à cocher type objet sur des feuilles
On peut très bien mettre une case à cocher par click dans une cellule en utilisant la police Wingdings

Prenez le fichier exemple dans ce lien --> https://forum.excel-pratique.com/s/goto/832675
Ensuite allez sur la feuil1 et faites un double-click dans les cellules de la colonne A.

De là il est très facile dans votre projet de faire des tri.

2. Lorsque vous parlez de formulaire vous voulez dire Userform ?

Votre avis avant d'aller plus loin

Je me réponds à moi même ..j'ai résolu l'affaire :)

voici désormais le code que j'utilise:

Sub AjouterNomSansTri()
    Dim Nom1 As String
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim targetRow As Long
    Dim plage1 As Range
    Dim cible1 As Range

    ' Définir la feuille de calcul (Feuil2)
    Set ws = ThisWorkbook.Sheets("Feuil2")

    ' Demander à l'utilisateur d'entrer le nouveau nom (Nom1)
    Nom1 = InputBox("Entrez le nouveau nom (Nom1):", "Ajouter un nom")

    ' Vérifier si l'utilisateur a annulé l'entrée
    If Nom1 = "" Then Exit Sub

    ' Trouver la première cellule vide en partant du haut dans la colonne A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    targetRow = IIf(lastRow < 2, 2, lastRow + 1)

    ' Vérifier si Nom1 existe déjà dans la plage A2:A100
    If WorksheetFunction.CountIf(ws.Range("A2:A100"), Nom1) > 0 Then
        MsgBox "Ce nom est déjà encodé.", vbExclamation, "Erreur"
        Exit Sub
    End If

    ' Définir la plage1 (A2:A100)
    Set plage1 = ws.Range("A2:A100")

    ' Trouver la cellule cible1 (NOM2 qui suit Nom1 dans l'ordre alphabétique)
    Set cible1 = FindNextName(Nom1, plage1)

    If cible1 Is Nothing Then
        ' Si aucun NOM ne suit Nom1, ajouter Nom1 à la première ligne vide de la colonne A
        ws.Cells(targetRow, 1).Value = Nom1
        MsgBox Nom1 & " a bien été encodé par ordre alphabétique dans la liste", vbInformation + vbOKOnly, "Succès"
    Else
        ' Si un NOM suit Nom1, effectuer la procédure de déplacement et collage
        CopierEtColler Nom1, cible1, ws
        MsgBox Nom1 & " a bien été encodé par ordre alphabétique dans la liste", vbInformation + vbOKOnly, "Succès"
    End If
End Sub

Function FindNextName(Nom1 As String, plage As Range) As Range
    ' Trouver la cellule cible1 (NOM2 qui suit Nom1 dans l'ordre alphabétique)
    Dim cel As Range
    For Each cel In plage
        If cel.Value > Nom1 Then
            Set FindNextName = cel
            Exit Function
        End If
    Next cel
    Set FindNextName = Nothing
End Function

Sub CopierEtColler(Nom1 As String, cible1 As Range, ws As Worksheet)
    ' Effectuer une sélection (selection1)
    Dim selection1 As Range
    Set selection1 = ws.Range("A" & cible1.Row & ":I" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)

    ' Copier dans le presse-papiers
    selection1.Copy

    ' Coller les valeurs uniquement (décalage d'une ligne vers le bas)
    ws.Cells(cible1.Row + 1, 1).PasteSpecial xlPasteValues
    Application.CutCopyMode = False

    ' Temps d'attente de 5 secondes
    Application.Wait (Now + TimeValue("0:00:05"))

    ' Effacer les valeurs correspondantes aux colonnes de A à I de la ligne contenant la cible1
    ws.Range("A" & cible1.Row & ":I" & cible1.Row).ClearContents

    ' Temps d'attente de 2 secondes
    Application.Wait (Now + TimeValue("0:00:02"))

    ' Coller la valeur de Nom1 dans la cellule cible1
    cible1.Value = Nom1
End Sub

Et on est d'accord DAN.... les cases à cocher dans Excel...c'est vraiment pas utilisable en l'état ..( problème de copier.coller, de liaison aux cellules, de lenteur et instabilité)

Mais en l'occurrence ici j'ai besoin d'un fichier manipulable par des Novices complets....et l'ajout de case à cocher rends le fichier plius intuitif

quoiqu'il en soit..cela fonctionne enfin comme je veux

Merci

waouh compliqué cela

Voyez tout de même le fichier ci-joint pour exemple et cliquez dans l'endroit où vous voyez des cases à cocher. Je n'ai pas traité l'ajout des noms

Après à vous de voir
Mais bon si terminé pensez à

Cordialement


edit :

Mais en l'occurrence ici j'ai besoin d'un fichier manipulable par des Novices complets....et l'ajout de case à cocher rends le fichier plius intuitif

Bah comme je vous l'ai proposé je ne pense pas que cela soit compliqué qui plus est j'utilise un tableau structuré
A vous de voir si je dois aller plus loin pour incorporer l'ajout de Nom.

Re edit : votre formule à placer en J2 devient ceci et sera recopiée automatiquement vers le bas --> =CONCATENER((SI($B2="R";"Lu";""));(SI($C2="R";" Ma";""));(SI($D2="R";" Me";""));(SI($E2="R";" Je";""));(SI($F2="R";" Ve";""));(SI($G2="R";" Sa";"")))

Bonjour à tous,

si tu ne connais pas tu devrais regarder fichier exemple fourni par Dan.
C'est exactement comme une case à cocher, mais par double-clic et sans les emmerdes...
eric

bonjour le fil, l'ajout des noms dans le fichier de DAN

Peut-être c'est mieux de choisir pour le double-clicque ou celui de droite au lieu du "selection"

@ BsAlv,

A quoi cela sert de poster sachant que Mathos vous écrit qu'il a sa solution (inutile d'alourdir le forum si une solution est trouvée)

Et si j'avais voulu poster via double click je l'aurais fait aussi.

Dingue tout de même

@Dan, la solution que j'avais proposé était avec des MFC fonctionnantes et en utilisant un tableau structuré, donc la "manipulation par des Novices complets" sera mieux, je crois. Si on compare les 2 macros, on parle de 2 choses différentes.

Vous voulez que je l'enlève ?

@Bsalv :

Vous voulez que je l'enlève ?

Non laissez-le. De toute façon je ne pense pas qu'il a chargé ma proposition qui était nettement plus simple que ce qu'il fait. Il est content avec sa solution. On se demanderait même pourquoi il a posté.
De mon coté je n'ai volontairement pas mis un code pour l'ajout de noms en attendant d'abord son retour sur le principe des cases à cocher que lui proposait.

Rechercher des sujets similaires à "macro vba qui ajoute nom classant sein liste"