Zone de liste, tableau et suppression de cellule

Bonjour à tous,

Je n'arrive pas à coder ce que je souhaite faire. Je dispose d'un onglet "Data" qui comporte un tableau nommé "Intervenants" avec des noms de personnes.

J'ai inséré un bouton de suppression d'un intervenant pour lequel une macro est affectée. Cette macro déclenche un formulaire.

Ce formulaire comporte une liste déroulante alimentée par ce tableau "Intervenants" grâce au paramètre "RowSource" et deux boutons (un "valider", un "fermer").

Je souhaite que lors de la sélection d'une personne et après validation (Bouton "Valider") cette dernière soit supprimée du tableau de l'onglet "Data".

Merci par avance pour votre aide !

Bonjour HangYourself et Excelleurs(es),

une fonction qui permet d'effacer la personne sélectionnée dans ta liste déroulante, conséquence la ligne ou se trouver cette personne est effacer.

test ceci pour voir

Public Function nombreElementDansUnTableau(nomFeuille As String, ligneDepart As Integer, colonneDepart As Integer) As Integer
    Dim i As Integer
    Dim Compteur As Integer
    Dim feuilleEnCours As Worksheet

    i = ligneDepart
    Compteur = 0
    Set feuilleEnCours = ThisWorkbook.Sheets(nomFeuille)

        Do While feuilleEnCours.Cells(i, colonneDepart) <> ""
        'On compte le nombre de ligne du tableau
            i = i + 1

            Compteur = Compteur + 1
        Loop
    nombreElementDansUnTableau = Compteur
End Function

Public Sub Combox1_Click()
    Dim Pos , lg, cl, DerLg As Integer
    Dim Reps As Boolean
    Dim NameCLt As String
    Dim ws As Worksheet

    Sheets("Data").Visible = True
    Sheets("Data").Activate
    Set ws = ThisWorkbook.Sheets("Data")
    ' si tu connais la ligne de départ et la colonne ou il ya intervenant
    lg= 14 ' achanger
    cl = 12 ' a changer
    DerLg = nombreElementDansUnTableau("Data", lg, cl) + 1

        ws.Range(Cells(Pos + lg-1, cl), Cells(Pos + lg-1, cl)).Select
        Selection.ClearContents
        ws.Range(Cells(Pos + lg, cl), Cells(DerLg + lg, cl)).Select
        Selection.Copy
        Application.CutCopyMode = False
        ws.Range(Cells(Pos + lg, cl), Cells(DerLg + lg, colonnefin)).Cut Destination:=ws.Cells(Pos + lg,cl)
        ws.Cells(DerLg + lg-2, cl).Value = ""
'        Selection.ClearContents
End Sub

redis moi si tu as besoin d'explication

Hello,

Merci pour le code ! Cependant, qu'est-ce que

ws.Range(Cells(Pos + lg, cl), Cells(DerLg + lg, colonnefin)).Cut Destination:=ws.Cells(Pos + lg,cl)

?

De plus, tu utilises

[u]Dim Reps As Boolean

Dim NameCLt As String[/u]

mais tu ne les utilises nulle part ?!

Merci par avance

Re

colonnefin c'est la dernière colonne que tu as sur ta feuille Data où il y a ta liste d'intervenant.

le code permet d’effacer la ligne que tu as sélectionné dans ta liste déroulante et copie tous les lignes jusqu'à la dernière et colle sur la ligne vide

en gros un copier coller.

resp namclt c'était dans mon code un booleen qui me retourne la réponse du messagebox, nameclt je récupère le nom de la personne auquel je vais effacer. Que tu peux effacer

Hello,

Le problème est que colonnefin n'est défini nulle part ?!

Tu dis que cela supprime la ligne, mais comment faire car j'ai un second tableau dans ma feuille "Data". Ce second tableau est un tableau de "Sujets" (sur lesquels travaillent les intervenants). Je pensais faire un second bouton pour effacer un sujet mais si ton code supprime toute une ligne, je vais avoir des soucis

Re,

colonnefin c'est à toi de le définir.

encore plus simple si c'est juste effacer la cellule est non la ligne

       Pos = ComboBox1.ListIndex
       ws.Range(Cells(Pos + lg,cl ).Select
        Selection.ClearContents
        ws.Range(Cells(Pos +lg, cl)).Select
        Selection.Copy
        Application.CutCopyMode = False
        ws.Range(Cells(Pos + lg, cl)).Cut Destination:=ws.Cells(Pos + lg, cl)
        ws.Cells(DerLg + lg, cl).Value = ""

J'ai remplacé

ws.Range(Cells(Pos + lg-1, cl), Cells(Pos + lg-1, cl)).Select
        Selection.ClearContents
        ws.Range(Cells(Pos + lg, cl), Cells(DerLg + lg, cl)).Select
        Selection.Copy
        Application.CutCopyMode = False
        ws.Range(Cells(Pos + lg, cl), Cells(DerLg + lg, colonnefin)).Cut Destination:=ws.Cells(Pos + lg,cl)
        ws.Cells(DerLg + lg-2, cl).Value = ""
'        Selection.ClearContents

Par

 Pos = ComboBox1.ListIndex
       ws.Range(Cells(Pos + lg,cl ).Select
        Selection.ClearContents
        ws.Range(Cells(Pos +lg, cl)).Select
        Selection.Copy
        Application.CutCopyMode = False
        ws.Range(Cells(Pos + lg, cl)).Cut Destination:=ws.Cells(Pos + lg, cl)
        ws.Cells(DerLg + lg, cl).Value = ""

Ca vient de tout me supprimer

En plus, je ne comprends pas:

Pos = ComboBox1.ListIndex

Tu as défini Pos en Integer au tout début ! ListIndex retourne la valeur de ma ComboBox donc un String, ce qui n'est pas le même type que Pos. Et ensuite:

ws.Range(Cells(Pos + lg, cl)).Select
    Selection.ClearContents
    ws.Range(Cells(Pos + lg, cl)).Select
    Selection.Copy
    Application.CutCopyMode = False
    ws.Range(Cells(Pos + lg, cl)).Cut Destination:=ws.Cells(Pos + lg, cl)
    ws.Cells(DerLg + lg, cl).Value = ""

Tu utilises encore Pos comme Integer certes mais pour lequel tu as souhaité affecter un String avec la ComboBox...

De l'aide SVP ?

        
      Dim ws As Worksheet
     Dim Pos, DerLg As Integer

       Sheets("Data").Activate
        Set ws = ThisWorkbook.Sheets("Data")
       DerLg = nombreElementDansUnTableau("Data", 2, 2) + 1 'specifie ta ligne et ta colone pour intervenant
       Pos = ComboBox1.ListIndex

            ws.Range(Cells(Pos + 2 - 1, 2), Cells(Pos + 2 - 1, 2)).Select' pareil ici 
            Selection.Delete Shift:=xlUp

sa fonctionne chez moi

comment listindex te returne un string

index comme son l'indique te renvoie la position de la selection fait f2 tape listindex tu verra il renvoie long

Rechercher des sujets similaires à "zone liste tableau suppression"