Impossible de supprimer une ligne par formulaire

Bonjour,

Je veux supprimer une ligne via un formulaire, mais cela ne se fait pas et j'ai ces messages qui apparaisse.

sup1

et voici la ligne qui pose problème. Il trouve la ligne a supprimer sur mon tableau , c'est bien la "245".

suppression

J'ai un autre formulaire qui fait la même chose sur une autre feuille et cela fonctionne. Je cherche ou est l'erreur mais je ne trouve pas ce qui est faux.

Attend avec impatience votre aide. D'avance merci

Bonjour

Votre feuille n'est pas protégée par hasard ?

Sinon pourquoi utilisez-vous une fonction pour faire cela ?

Votre code pourrait être plus court ...

Bonjour,

Non elle n'est pas protégé, car quand je vais dessus ma cellule directement je peux la supprimer.

J'utilise cela car j'utilise un USF pour remplir et corriger les données. et il y a beaucoup de formule et cela évite que l'on entre des données dans des cellules avec formule.

usf

Pas facile de vous répondre sur base de photos

Déjà votre code posté en photo... vous disposez des balises de code en cliquant sur l'icone "</>" pour poster un code

Qu'est ce qui déclenche la fonction ?

C'est le bouton "supprimer". je met le fichier en pièce jointe, ce sera mieux. Dés que vous ouvrez le fichier un formulaire s'ouvre. Aller sur

Mécanique préventive, gestion article, la le formulaire en question s'ouvre. C'est pareil pour l'électrique et cela fonctionne pour celui-ci

10plan-maintenance.zip (822.98 Ko)

Il y a plusieurs truc gênants.

1. Lorsque vous ouvrez votre formulaire on a plus de contrôle pour vérifier sur la feuille. Vous masquez l'application excel. Très embêtant... on ne sait plus rien controler

2. Je ne comprends pas que vous utilisiez des FUNCTION dans vos codes et les appeler par un CALL ??.
Une fonction s'exécute toujours depuis une variable déterminée et définie dans un code et n'a jamais besoin d'un CALL
Ici vous n'avez jamais ce cas. Du coup, vous devriez remplacer tous les FUNCTION et END FUNCTION par SUB et END SUB

3. Pour votre souci (j'ai dû bien chercher là... ) il vient du fait que vous voulez supprimer la ligne mais dans deux tableaux structurés différents. Remplacez votre code par celui ci-dessous

Private Sub delete_from_form_with_confirmation()

If MsgBox("Vous voulez vraiment supprimer cette maintenance?", vbQuestion + vbYesNo + vbDefaultButton2, "Confirmation") = vbYes Then
    Dim rng1 As Range
    With ThisWorkbook.Sheets("Planification du préventif_MEC")
        Set rng1 = .Range("B:B").Find(ComboBox3.Value, , xlValues, xlWhole)
        If Not rng1 Is Nothing Then
            Dim row_number As Long
            row_number = rng1.Row
            .Range("B" & row_number & ":AG" & row_number).Delete
        End If
    End With
End If
End Sub

A noter que les noms de tableaux structurés ne sont plus corrects sur cette feuille Planification du préventif_MEC
En bref, tous les codes ne font pas appel aux lignes de codes utilisées lors de tableaux structurés, ce qui aurait dû donner un genre de code comme ceci -->

ThisWorkbook.Sheets("Planification du préventif_MEC").listobjects(1).listrows(row_number - 2).range.delete

Cordialement

Merci pour votre réponse et la correction.

Je débute en programmation, c'est en regardant des explications sur internet pour ce genre de chose que j'ai fait mon tableau et les codes, je les prend sur le site internet "WBA writer" qui poste aussi des vidéos.

Qu'Est ce que vous voulez dire par: les noms de tableaux structurés ne sont plus corrects sur cette feuille Planification du préventif_MEC.

Je comprends pas?

Je prend note de vos remarques et vous remercie encore le temps passer à me corriger. Je vais de suite corriger mon fichier par rapport à vos remarques

Bonjour,

Qu'Est ce que vous voulez dire par: les noms de tableaux structurés ne sont plus corrects sur cette feuille Planification du préventif_MEC.

En fait les tableaux que vous avez sur vos feuilles sont au format structuré. Pour mettre un tableau à ce format, vous avez dû sélectionner les données puis cliquer sur l'icône "Mettre sous forme de tableau" dans le menu accueil. Cette action crée automatiquement un nom que vous pouvez retrouver dans le gestionnaire de noms.
A y regarder de plus près, il n'y a pas de soucis comme je vous l'avais écrit (désolé...)

Dans la feuille Planification... MEC, les colonnes B à AG sont nommée "Tableau512". Dans la ligne de code que je vous ai donnée, vous pourriez remplacer le listobjects(1) par listobjects("Tableau512").

Maintenant si vous utilisez des codes adaptés aux tableaux structurés, le mieux serait de renommer Tableau512 en un autre nom plus parlant.
Si vous partez dans cette direction, ce sont pratiquement tous les codes qui sont à revoir et peut être celui que je vous ai donné en premier.

Rem : dans vos userforms, vous avez utilisé des instructions Rowssource. Je ne serai pas le seul à vous le dire sur ce forum, évitez absolument cette instruction qui pose parfois des soucis et préférez-lui toujours l'instruction LIST ou ADDITEM.

Crdlt

Bonjour, merci pour votre réponse.

J'ai un autre petit soucis , j'avais poser la question sur le forum pour prendre la plus grande valeur de deux colonne. (Compteur et Effectuer quand).

Cela fonctionne si le compteur augmente mais je n'ai pas sur toute les lignes un compteur, je souhaiterais que l'on prenne la date et l'on transfert les deux.
Je me suis rendu compte de cela en testant avec de vrai valeur je met un fichier Excel simplifier en pièces jointe pour mieux comprendre.

Je ne comprend pas tout sur la formule employé.

13testdate.xlsx (28.28 Ko)

Cela fonctionne si le compteur augmente mais je n'ai pas sur toute les lignes un compteur, je souhaiterais que l'on prenne la date et l'on transfert les deux.

Je n'ai pas saisi votre souci...

De quelle formule parlez-vous ? Celle en M3 ou en L3 ?

C'est bon je viens de trouver la solution à mon problème, je voulais la plus grande valeur en date et non par le compteur.

Car je n'ai pas toute les machine qui on des compteurs.

Merci pour votre aide et vos conseils

Pour L3=INDEX(Tableau2[Compteur];EQUIV(1;(Tableau2[N° Main]=B3)*(Tableau2[Date en chiffre]=M3);0);1)

Pour M3 =MAX(SI(Tableau2[N° Main]=B3;Tableau2[Date en chiffre];0))

Problème résolu alors ou pas ?

dans votre formule Date en chiffre se trouve où dans votre feuille ?

J'ai créer une colonne en plus car pour reprendre la date en chiffe, et non en format date pour faire la comparaison.

Sinon ma formule me fonctionne pas.

Oui mon problème est résolu.

merci

Re,

Parfait si résolu.

Sinon compte tenu de votre tableau au format structuré le code dans lequel vous avez un souci peut être celui-ci en lieu et place de ce que je vous ai proposé précédemment :

Private Sub delete_from_form_with_confirmation()

If MsgBox("Vous voulez vraiment supprimer cette maintenance?", vbQuestion + vbYesNo + vbDefaultButton2, "Confirmation") = vbYes Then
    Dim ligne As Long
    With ThisWorkbook.Sheets("Planification du préventif_MEC").ListObjects("Tableau512")
        On Error Resume Next
        ligne = .ListColumns(1).DataBodyRange.Find(ComboBox3.Value, , xlValues, xlWhole).Row - .HeaderRowRange.Row
        If ligne <> 0 Then .ListRows(ligne).Range.Delete
    End With
End If
End Sub

Crdlt

Rechercher des sujets similaires à "impossible supprimer ligne formulaire"