Effacer la valeur d'une d'une cellule en fonction d'une combobox

J'ai fait le formule suivante pour une combobox. mais quand je clique sur supprimer j'ai la msgbox qui apparait je valide et là rien. Mais je ne vois pas mon erreur ou mon horreur.

D'autre part, pour le bouton ajouter, j'ai dû manuellement agrandir la plage des listes car quand j'ajoute avec le userform arrivée en bas de la plage, il bug. Une idée?

Merci d'avance. (je laisse mon fichier)

11contacts-agences.zip (870.07 Ko)

Code de suppression:

Private Sub btn_supprimer_Click()

    Dim Onglet As Worksheet
    Dim Derniere_ligne As Long, DerCol As Long
    Dim Reference As Long
    Dim Suppression As Boolean

    If ComboBox5.Value = "" Then
        Suppression = False
    Else
        Suppression = True
    End If

    Set Onglet = Sheets("Listes")

    Derniere_ligne = Onglet.Cells(Rows.Count, 1).End(xlUp).Row

    Dim Rep As Integer

    Rep = MsgBox("Es-tu sûr de vouloir supprimer ces données?", vbOKCancel + vbExclamation, "Confirmation de suppression")

    If Rep = vbOK Then
    ' ici le traitement si réponse positive

    If Suppression = False Then
        If Derniere_ligne = 1 Then
        Reference = 1
        Else
            Reference = Onglet.Cells(Derniere_ligne) + 1
        End If
    Else
        Reference = ComboBox5.Value

        For i = 2 To Derniere_ligne

            If Onglet.Cells(i, 1) = Reference Then
            Onglet.Cells(i, 1).ClearContents  'suppression de la sélection de la feuille "Onglet"

            End If

                Next
            End If
End If
End Sub

Bonjour,

N'ayant le fichier avec toutes les feuilles une piste :

Tu déclares Reference en tant que long or tu le charges à partir de combobox5 qui est de type String (du texte). Change ta déclaration et reviens vers nous si tu bloques.

Bonne soirée.

Bonsoir le fil, bonsoir le forum,

Outre la remarque d'Ergotamine, je ne comprends pas ton code. Si tu veux supprimer une valeur d'un tableau structuré spécifique il faut d'abord se positionner dans le bon tableau non ?!... Pourquoi ton code ne traite que que la ComboBox5 ? Comment vas-tu supprimer Bernie dans les Bikers par exemple ? Tu ne boucles que dans la colonne 1 donc forcément tu ne trouve jamais la référence... Tel qu'il est ton code ne fonctionne absolument pas !

En pièce jointe ton fichier modifié. J'ai attribué à la propriété Tag des contrôles la colonne dans laquelle la donnée doit être modifiée. J'ai supprimé les lignes inutiles dans les tableaux structurés.

Bonsoir ThauThème,

A vrai dire je n'ai pas été plus loin dans le raisonnement car j'ai l'impression que la suppression ne se fait même pas dans cette table mais dans une BDD plus importante. Cette feuille ne m'a l'air qu'être une feuille de paramétrage des listes de validation. Mais sans visu sur cette dernière, difficile de faire quoique ce soit de représentatif ..

Je suis d'accord avec l'ensemble de tes remarques.

Bonne soirée.

Comme j'ai dis à ThauThème :

"Merci d'avoir pris le temps de regarder mon post. Comme tu as pu le constaté et vu le code que tu as fait en retour, je n'ai absolument pas ton niveau. Je m'intéresse au code que depuis 3 semaines et j'ai essayé de faire le code étape par étape je ne sais pas encore synthétiser comme tu le fait et je ne connais pas encore tous les type de commandes. En tout cas merci.

Le bouton supprime fonctionne, mais pas le bouton ajouter."

J'ai anonymisé l'intégralité de mon fichier que je mets en copie.

2021 02 24 20 58 46 microsoft visual basic pour applications thierry martin ep v01 xlsm execution 2021 02 24 20 59 12 microsoft visual basic pour applications thierry martin ep v01 xlsm arret

Bonsoir,

A priori nous n'avons pas la même version.

Ci-joint une version corrigée où je n'ai laissé que le code qui fonctionne correctement. Boucle basée sur l'ID des textbox dans le même ordre que les colonnes.

Private Sub btnajout_Click()
Dim i As Byte
For i = 1 To 6
    If Me.Controls("TB_" & i) <> "" Then
        Worksheets("Listes").Cells(Worksheets("Listes").Cells(Worksheets("Listes").Rows.Count, i).End(xlUp).Row + 1, i).Value = Me.Controls("TB_" & i).Value
    End If
Next i
Unload Me
MsgBox "Ajout réalisé avec succès", vbInformation, "Confirmation d'ajout"
End Sub

J'avais le même message d'erreur, à priori provoqué par la population de tables automatiques. Attention à ne pas abuser des tables accolées les unes aux autres, surtout pour définir des listes, une simple plage nommée dynamique suffirait.

Bonjour Ergotamine,

Merci pour tes remarques. Penses tu que je puisse modifier et faire qu'une seule plage dynamique, sans incidence sur le déroulement du fichier?

Merci

J'ai toujours un blocage, Ergoatamine.

Peux tu me traduire la phrase suivante ? If Me.Controls("TB_" & i) <> "" Then

Merci

2021 02 25 08 22 06 projet vbaproject 2021 02 25 08 22 35 microsoft visual basic pour applications contacts agences b a c a france test3

Si je comprends bien. Tu controles

"si i dans les "TB_" ???? est différent de "" alors .....

TB_ sont des tables? les listes "RowSource"? je ne comprends pas pourquoi il bloque le bougre.

Bonjour,

TB est le nom de ta COMBOX.

Je te refais un test ce soir.

Merci Ergotamine pour cette précision. Du coup j'avais pas remarqué que tu avais changé le nom des listebox. J'ai fait la modification dans mon fichier, ca marche impeccable. Donc, pour toi, ce soir au lieu de refaire un test, c'est .

Par contre ThauThème, maintenant je vais me pencher sur ton code car quand je le test, la msgbox me dit que c'est bien supprimé mais en fait rien ne c'est passé.

Bonjour le fil, bonjour le forum,

Ergotamine a, pour ça part, changé le nom des contrôle et bouclé sur les 6 Textboxes. Moi, je bouclais sur tous les contrôles qui ont une propriété Tag différente de "" (chaîne de caractères vide). Ça ne marche pas sur ton dernier fichier parce qu'il te faudrait donner à la propriété Tag des contrôles la valeur de la colonne à laquelle ils se rapportent.

Texbox5 et ComboBox5 auront E comme propriété Tag
Texbox4 et ComboBox6 auront F comme propriété Tag
Texbox2 et ComboBox2 auront B comme propriété Tag
Texbox3 et ComboBox4 auront C comme propriété Tag
Texbox6 et ComboBox3 auront A comme propriété Tag
Texbox1 et ComboBox1 auront D comme propriété Tag

Et aussi il faudrait supprimer les lignes vide dans tous les tableaux structurés.

Mais, autant chez moi hier ça marchait impeccable, qu'ici, au boulot, ça plante sur ton dernier fichier et aussi sur le mien de hier !?... Et je ne trouve pas la solution...

Merci ThauThème ton explication m'a éclairé et je comprends mieux ton code. J'ai corrigé les TAG et ça fonctionne. du coup je ne sais pas si pour toi c'est résolu. Si oui passe ce soir voir Ergotamine et vous ensemble.

Bonjour Thauthème

Je fais référence à tes codes (TAG) ajout et supprime que tu as fait dans le fichier plus haut. J'ai fait évoluer mon projet et je voudrais adapter tes codes, mais pour les 2 codes, je ne comprends pas les 2 lignes commençants par DL= .

Pourrais tu m'éclairer, que je puisse finir mon projet.

Merci.

PS: je mets le fichier modifier comme ca tu comprendras vers quoi je me dirige.

Bonsoir,

J'utilise la variable DL pour Dernière Ligne même si dans le cas de Suppression le nom n'est pas idéal...

Pour Ajouter, il y a deux cas :
Le tableau structuré peut-être vide si par exemple avec la fonction Supprimer on a supprimé toutes les lignes. Ajouter dans la dernière ligne d'un tableau structuré vide génère une erreur. On va donc Ajouter dans la ligne 2 si le tableau structuré est vide, sinon on va Ajouter dans la première ligne vide du tableau structuré. D'où l'utilisation de IIf(Condition, résultat si condition vraie, résultat si condition fausse) qui va permettre de contourner le problème de l'erreur et toujours écrire le nom ajouté dans la dernière ligne du tableau structuré avec :

 DL = IIf(Cells(2, CTRL.Tag).Value = "", 2, O.Cells(Application.Rows.Count, CTRL.Tag).End(xlUp).Row + 1)

Pour Supprimer :
Le premier élément d'une ComboBox a pour propriété ListIndex : 0, le second élément a pour propriété ListIndex : 1, etc.
Comme les tableaux commencent tous à la ligne 1 et que les ComboBoxes ne contiennent pas de doublons, on peut facilement récupérer la ligne de l'élément choisi dans une ComboBox avec ListIndex + 2. Cela permet pour Supprimer,de supprimer l'élément choisi avec :

DL = CTRL.ListIndex + 2

Il y aurait d'autres manière de procéder mais comme je ne gère pas encore bien les tableaux structurés j'ai opté pour cette méthode qui marche. D'ailleurs je n'ai toujours pas trouvé pourquoi ça marchait chez moi et pas au boulot. Ça prouve que ma méthode n'est pas idéale...

Du coup je comprends mieux le code. Merci. Par contre, sur ma feuille "Listes" j'ai supprimer 2 tableaux structurés ET les Tags dans les propriétés des box concernées mais là, le code ne marche plus, alors qu'il n'y a aucune référence a une plage de tag ou nombre de colonne.

Ligne pointée: O.Cells(DL, CTRL.Tag).Value = CTRL.Value

Tu aurais une idées?

Re,

J'ai testé chez moi et tout marche autant pour Ajouter que pour supprimer. Quel est le problème exactement ?

La seule manipulation que j'ai fait, j'ai supprimé 2 tableaux structurés, j'ai enlevé les Tag dans la propriété des box concerné par la suppression.

Je n'ai rien touché dans le code et quand j'exécute, voici ce que j'obtiens:

2021 02 27 07 28 55 modification des listes de la base de donnees 2021 02 27 07 35 36 microsoft visual basic pour applications thierry martin ep v01 xlsm arret

Bon, j'avance.

Maintenant ca fonctionne, mais ca copie et écrase la 1ere ligne du tableau plutôt que de le faire en bas de colonne. (Test fait avec a,b,c,d)

2021 02 27 09 40 52 contacts agences b a c a france test3 xlsm excel

Bonjour,

Comment as-tu résolu le problème ? J'ai testé différentes manipulation, cherché sur les forums, aucun moyen de trouver une quelconque root cause ..

Par avance merci.

Rechercher des sujets similaires à "effacer valeur fonction combobox"