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
mais tu ne les utilises nulle part ?![u]Dim Reps As Boolean
Dim NameCLt As String[/u]
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