Sélection de colonne

Bonjour à tous,

Dans le fichier ci-joint le CommandButton3 me permet d'ouvrir un UserForm avec lequel je sélectionne le nom (valeurs ce trouvant dans la colonne A) puis les adresse mail (valeur se trouvant dans la colonne B).

Ensuite en cliquant sur Effacer, il m'efface la valeur correspondante ( le principe est qu'il cherche une correspondance entre la colonne B et la valeur du combobox2. Si il en trouve une, alors il l'efface). Jusque là pas de souci tout fonctionne.

Mon problème est qu'il n'efface que la valeur se trouvant dans la colonne B alors qu'il devrait également effacer la valeur se trouvant sur la même ligne dans la colonne A.

Quelqu'un aurait-il la gentillesse de ce pencher sur mon problème ?

(Pour simplifier mes recherches j'ai remplacé la commande "Delete" par "Select", comme ça il ne m'efface pas la valeur juste il l'a sélectionne. Cela m'évite de devoir régulièrement réalimenter mes colonne A et B)

Bien cordialement.

2test-mail.xlsm (43.15 Ko)

Bonjour Sotin, bonjour le forum,

Le code de l'UserForm1 modifié :

Private O As Worksheet 'déclare la variable O (Onglet)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)

Private Sub UserForm_Initialize() 'à l'intialisation de l'UserForm
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)

Set O = Worksheets("Carnet d'adresse") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 de TV
Next 'prochaine ligne de la boucle
ComboBox1.List = D.keys 'alimente la ComboBox1 avec les éléments du dictionnaire D sans doublon (les clés)
End Sub

Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
Dim I As Integer 'déclare la variable I (Incrément)

Me.ComboBox2.Clear 'vide la ComboBox2
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    'si la donnée ligne I colonne 1 de TV est égale à la valeur de la ComboBox1, alimente la ComboBox2 avec la donnée en colonne 2
    If TV(I, 1) = Me.ComboBox1.Value Then Me.ComboBox2.AddItem TV(I, 2)
Next I 'prochaine ligne de la boucle
If Me.ComboBox2.ListCount = 1 Then Me.ComboBox2.ListIndex = 0 'si la ComboBox2 ne contient qu'un seul élément, affiche cet élément
End Sub

Private Sub CommandButton1_Click() 'bouton "Effacer"
Dim I As Integer 'déclare la variable I (Incrément)
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    'si la donnée ligne I colonne 1 de TV est égale à la valeur de la ComboBox1 et
    'si la donnée ligne I colonne 2 de TV est égale à la valeur de la ComboBox2,
    'supprime la cellue ligne I colonne 1 redimensionnée (2 colonnes)
    If TV(I, 1) = Me.ComboBox1.Value And TV(I, 2) = Me.ComboBox2.Value Then O.Cells(I, 1).Resize(1, 2).Delete
    Exit For 'sort de la boucle
Next I 'procchaine ligne de la boucle
MsgBox ("terminé") 'message
End Sub

Private Sub CommandButton2_Click() 'bouton "Exit"
Unload Me 'vide et ferme l'UserForm en cours
End Sub

Bonjour ThauThème,

Merci de vous pencher sur mon problème, j'ai collé votre code en lieu et place de l'UserForm1, mais ça ne marche pas. Je n'ai aucun message d'erreur qui s'affiche cependant aucune ligne ne s'efface. Ci-joint le fichier modifié.

Merci d'avance

Bonjour Sotin, bonjour le forum,

Désolé, un Exit For intempestif glissé par un imbécile (moi)...

La partie du code modifiée :

Private Sub CommandButton1_Click() 'bouton "Effacer"
Dim I As Integer 'déclare la variable I (Incrément)
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    'si la donnée ligne I colonne 1 de TV est égale à la valeur de la ComboBox1 et
    'si la donnée ligne I colonne 2 de TV est égale à la valeur de la ComboBox2,
    'supprime la cellule ligne I colonne 1 redimensionnée (2 colonnes)
    If TV(I, 1) = Me.ComboBox1.Value And TV(I, 2) = Me.ComboBox2.Value Then O.Cells(I, 1).Resize(1, 2).Delete
Next I 'prochaine ligne de la boucle
MsgBox ("terminé") 'message
Unload Me 'vide et ferme l'UserForm en cours
UserForm1.Show 'affiche l'UserForm1 (vierge)
End Sub

Bonjour ThauThème,

Tout fonctionne nickel, merci beaucoup pour le coup de main ;)

Bonne journée à tous !

Rechercher des sujets similaires à "selection colonne"