IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Suppression de ligne en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Par défaut Suppression de ligne en VBA
    Bonjour Je voudrai que lorsque que je clique sur le bouton supprimer qu'il me demande le numéro d 'identifiant que je souhaite supprimer et de me supprimer la ligne si je fais oui si non il fait rien et ferme la fenêtre.

    Je galère un peut voici mon code merci beaucoup
    Je fais cela pour une association.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Private Sub btnsupdelabasebddinv_Click()
     
    Sheets("DOSSIERS Les invisibles").Activate
    Dim i As Integer
    Dim SupprimeLigne As String
     
    SupprimeLigne = InputBox("Veuillez taper le numéro d'identifiant OE à supprimer", "SUPPRESSION")
     
    With ThisWorkbook.Sheets("DOSSIERS Les invisibles")
     
     
    'on se positionne sur la dernière ligne de la colonne A et on remonte jusqu'à la n°2
    For i = .Range("V" & .Rows.Count).End(xlUp).Row To 2 Step -1
     
    MsgBox "Etes vous sur de vouloir supprimer de la base cet identifiant?", vbYesNo + vbInformation, "CONFIRMATION"
    'If Reponse = vbYes Then
    'on supprime la ligne.
    Rows(i).Delete
     
    End If
    Next i
     
    End With
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Plutôt que de boucler sur toutes les lignes, faire un filtre sur la valeur à supprimer et supprimer ces lignes filtrées.
    Code à adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Private Sub btnsupdelabasebddinv_Click()
        Dim i As Integer, DerCol As Long, DerLig As Long, col As Long
        Dim SupprimeLigne As String
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Sheets("DOSSIERS Les invisibles").Activate
        SupprimeLigne = InputBox("Veuillez taper le numéro d'identifiant OE à supprimer", "SUPPRESSION")
        Reponse = MsgBox("Etes vous sur de vouloir supprimer de la base cet identifiant?", vbYesNo + vbInformation, "CONFIRMATION")
        If Reponse = 6 Then 'vbYes
            Rows("1").Select
            If ActiveSheet.AutoFilterMode Then
                isOn = "On"
            Else
                isOn = "Off"
                Selection.AutoFilter
            End If
            DerCol = Range("XFD1").End(xlToLeft).Column
            DerLig = Range("A10000").End(xlUp).Row
            col = 22 'Colonne V
            ActiveSheet.Range(Cells(1, "A"), Cells(DerLig, DerCol)).AutoFilter Field:=col, Criteria1:=SupprimeLigne
            Range("_FilterDataBase").Offset(1, 0).Resize(, DerCol).SpecialCells(xlCellTypeVisible).Delete
        End If
        ActiveSheet.AutoFilterMode = False
        Unload UserForm1 'mettez ici le nom de votre formulaire
    End Sub
    Cdlt

  3. #3
    Membre averti
    Homme Profil pro
    Autodidact en VBA pour un ami indépendant
    Inscrit en
    Février 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidact en VBA pour un ami indépendant

    Informations forums :
    Inscription : Février 2019
    Messages : 29
    Par défaut
    Bonjour,

    je pense quand utilisant la fonction .find ça sera plus facile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub CommandButton2_Click()
     
    Sheets("DOSSIERS Les invisibles").Activate
     
    Dim SupprimeLigne As String
    SupprimeLigne = InputBox("Veuillez taper le numéro d'identifiant OE à supprimer", "SUPPRESSION")
    If SupprimeLigne = "" Then
    Exit Sub
    Else
    Select Case MsgBox("Etes vous sur de vouloir supprimer de la base cet identifiant?", vbYesNo + vbInformation, "CONFIRMATION")
     Case vbYes
     Set d = Sheets("DOSSIERS Les invisibles").Range("A:A").Find(SupprimeLigne, LookIn:=xlValues, lookat:=xlWhole)
    If Not d Is Nothing Then
     a = d.Row
    Rows(a).Delete
    Else
    MsgBox "Cette identifiant n'existe pas", vbOKOnly, "SUPPRESSION"
    End If
    Case vbNo
    Exit Sub
    End Select
    End If
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Envoyé par NujWex
    je pense quand utilisant la fonction .find ça sera plus facile.
    OK, et s'il y a plusieurs lignes à supprimer, ou est la boucle?

  5. #5
    Membre averti
    Homme Profil pro
    Autodidact en VBA pour un ami indépendant
    Inscrit en
    Février 2019
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidact en VBA pour un ami indépendant

    Informations forums :
    Inscription : Février 2019
    Messages : 29
    Par défaut
    J'avais pas compris qu'il pouvait avoir plusieurs fois la même valeur, il suffi de faire une boucles avec .findnext

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Private Sub CommandButton2_Click()
     
    Sheets("DOSSIERS Les invisibles").Activate
     
    Dim SupprimeLigne As String
    SupprimeLigne = InputBox("Veuillez taper le numéro d'identifiant OE à supprimer", "SUPPRESSION")
    If SupprimeLigne = "" Then
    Exit Sub
    Else
    Select Case MsgBox("Etes vous sur de vouloir supprimer de la base cet identifiant?", vbYesNo + vbInformation, "CONFIRMATION")
     Case vbYes
     Set d = Sheets("Feuil1").Range("A:A").Find(SupprimeLigne, LookIn:=xlValues, lookat:=xlWhole)
    If Not d Is Nothing Then
    Do
     a = d.Row
    Rows(a).Delete
    Set d = Sheets("DOSSIERS Les invisibles").Range("A:A").FindNext
    Loop While Not d Is Nothing
    Else
    MsgBox "Cette identifiant n'existe pas", vbOKOnly, "SUPPRESSION"
    End If
    Case vbNo
    Exit Sub
    End Select
    End If
    End Sub

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bien sûr, mais pensez-vous que ce sera plus rapide qu'un filtre qui efface toutes les lignes en 1 seule fois?

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    On peut aussi utiliser les filtres avancés ou PowerQuery pour extraire les lignes qui conviennent. Si c'est du "one shot", les filtres avancés sont une bonne solution. Avec PowerQuery, on peut, en cas de "one shot", supprimer la source et couper la connexion sur la table résultante. Sinon, une simple actualisation de PQ permet de mettre à jour la requête résultante.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    il faut quand même faire attention au code proposé!

    Dans le code du message #18, les valeurs sont remplacées par "" à la ligne 10 avant le test de la réponse au msgbox. Même si l'utilisateur dit non, les cellules correspondant à l'ID sont mises à blanc. Je doute que ce soit ce qui est souhaité!

    Pourquoi aller chercher la dernière ligne avec f.[A10000]. Pourquoi A10000? Ca ne coûte pas plus cher d'aller chercher la dernière ligne avec f.range("a1048576") ou f.range("a" & f.rows.count), tant qu'à faire. De plus, normalement, en 2019, on travaille avec des tableaux structurés pour ce genre de cas. Ca évite de devoir chercher la dernière ligne, et ça donne plus de souplesse au code puisque si le tableau est déplacé, agrandi, modifié, le code continue à fonctionner sans devoir le modifier.

    Quant à l'ajout d'un On Error Resume Next pour contourner une erreur, ce n'est pas le top en programmation. Ca "masque" toutes les erreurs exceptions sans discrimination si elles ne sont pas évaluées après la ligne qui pose problème. Sur la ligne incriminée, l'exception levée pourrait vouloir dire que l'identifiant n'a pas été trouvé, et donc qu'il n'y a pas de cellules vides. Il serait plus judicieux de tester que l'identifiant est présent avant la suppression (un simple application.countif suffit), ce qui garantira qu'il y aura des cellules blanches après le remplacement.

    Programmer à coup de "On Error" est la meilleure façon de se prendre le mur à brève échéance.


    Sans tableau structuré, il est préférable de valoriser une variable de type range plutôt que de la définir à chaque ligne. Ca évite les "V:V" puis les V2:V" & derligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub DeleteRows()
      Dim ID As String
      Dim r As Range
     
      ID = InputBox("Saisissez l'ID à supprimer svp")
      If ID <> "" Then
        Set r = Range("a2:a" & Range("a1048576").End(xlUp).Row)
        If Application.CountIfs(r, ID) > 0 Then
          If MsgBox("Voulez-vous supprimer les lignes pour cet id?", vbQuestion + vbYesNo) = vbYes Then
            r.Replace what:=ID, replacement:="", lookat:=xlWhole
            r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
          End If
        Else
          MsgBox "L'ID n'a pas été trouvé dans le tableau"
        End If
      Else
        MsgBox "Aucun ID n'a été saisi"
      End If
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    [...]

    Bonjour
    est il possible qu'il recherche dans la colonne V l'identifiant de la personne et qu'il supprimer cette ligne, sinon le code est parfait

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par jb1975 Voir le message
    Bonjour
    est il possible qu'il recherche dans la colonne V l'identifiant de la personne et qu'il supprimer cette ligne, sinon le code est parfait
    Hum. Faut quand même un minimum d'efforts pour lire le code et le comprendre Il n'est alors pas difficile de voir ce qu'il faut adapter. L'avantage, c'est que comme la plage est définie une seule fois au début de la procédure, il suffit en fait de modifier l'adresse de la plage r.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set r = Range("a2:a" & Range("a1048576").End(xlUp).Row)
    doit être modifié en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set r = Range("V2:V" & Range("V1048576").End(xlUp).Row)
    A toi de voir si tu bornes par rapport la dernière ligne de V, de A ou d'une autre colonne.

    Attention que le code que je propose travaille sur la feuille active. Si tu veux travailler avec une feuille particulière, il te suffit de préfixer r de l'objet Worksheet qui pointe vers la bonne feuille comme l'avait fait Arturo. A nouveau, pour une ligne de plus, on gagne en clarté de code et on évite des f.range("v2:v" & derligne) répétés dans le code, en travaillant avec une plage qui est définie une fois au début de la procédure. Le code gagne en légèreté, en lisibilité et en maintenance car après l'affectation de la plage à R, on ne travaille plus qu'avec R. Si la localisation ou la taille de R change, on n'a qu'une ligne à modifier au lieu d'aller pêcher dans le code toutes les lignes à modifier. Je rappelle qu'un tableau structuré ne demanderait aucune modification de code pour continuer malgré le déplacement ou le dimensionnement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub DeleteRows()
      Dim ID As String
      Dim r As Range
      Dim sh As Worksheet
     
      Set sh = Sheets("DOSSIERS Les invisibles")
      ID = InputBox("Saisissez l'ID à supprimer svp")
      If ID <> "" Then
        Set r = sh.Range("v2:v" & sh.Range("v1048576").End(xlUp).Row)
        If Application.CountIfs(r, ID) > 0 Then
          If MsgBox("Voulez-vous supprimer les lignes pour cet id?", vbQuestion + vbYesNo) = vbYes Then
            r.Replace what:=ID, replacement:="", lookat:=xlWhole
            r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
          End If
        Else
          MsgBox "L'ID n'a pas été trouvé dans le tableau"
        End If
      Else
        MsgBox "Aucun ID n'a été saisi"
      End If
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Par défaut
    merci je vais tester en fait je fais bénévolement en plus de mon travail donc pas beaucoup de temps pour le mettreen application.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    ...


    Bonsoir je viens de tester il bloque à r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete je comprends pas bien SpecialCells(xlCellTypeBlanks puis je vous laisser le fichier excel pour que je le récupère ensuite une fois corrigé. Le pire je ne sais pas pourquoi j'ai le userform Frmodification qui se lance ensuite Merci beaucoup

    Il ne me reste que cela à corriger pour faire fonctionner mon classeur.Tableau de bord général Les Invisibles.xlsm

    Login si besoin
    Jamal
    mdp: 123

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Le code que je t'ai donné (comme ceux des autres intervenants) ne peut pas fonctionner pour un tableau structuré. il ne fonctionne que pour des plages "classiques" d'Excel. Je t'ai donné celui-là dans un premier temps parce que depuis le début de la discussion, les codes donnés illustrent un traitement "classique" des données. C'est parce que tu es dans un tableau structuré que tu rencontre cette erreur, déjà mentionnée au message #18. Comme quoi, éviter l'erreur par un On Error Resume Next comme je l'ai lu dans une réponse ne sert à rien et évite simplement de réfléchir à la cause de l'erreur, et donc probablement d'en causer une autre ailleurs (ou ne pas exécuter ce qui doit l'être, comme la suppression de la ligne dans le cas qui nous occupe).

    Comme je l'ai dit, l'utilisation d'un tableau structuré te dispenserait de devoir préciser la feuille et la colonne V, de devoir rechercher la dernière ligne, et de supprimer les lignes entières car dans un tableau structuré, on ne supprime les données que sur les colonnes du tableau. On ne peut pas supprimer des lignes non contiguës d'une feuille si elles contiennent des lignes de tableau structuré, d'où le problème que tu rencontres.

    Dans un tableau structuré, on ne sait pas supprimer des parties de lignes. Supprimer une cellule d'un tableau structuré revient à supprimer la ligne entière du tableau qui contient cette cellule (donc sans rien supprimer ni à gauche ni à droite du tableau).

    Voici le code corrigé par rapport à cette nouvelle donne. Tu remarqueras que l'on n'a plus besoin de préciser la feuille, ni de rechercher la dernière ligne, ni de préciser la colonne V, ni de supprimer la ligne entière (EntireRow)... Que du bonheur, en somme. Si tu déplaces ton tableau, latéralement ou verticalement sur la feuille où sur une autre, si tu insères ou supprimes des colonnes (pas la colonne [identifiant OE], évidemment), ton code continue à fonctionner sans aucune modification. Ca amène de la sécurité, de la pérennité, de la fiabilité, une réduction du code (et donc du risque d'erreurs) et une meilleure lisibilité du code. Il te faudra modifier ton code uniquement en cas de renommage du tableau ou de la colonne utilisée dans ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub btnsupdelabasebddinv_Click()
      Dim ID As String
      Dim r As Range
     
      ID = InputBox("Saisissez l'ID à supprimer svp")
      If ID <> "" Then
        Set r = Range("Tableau2[identifiant OE]")
        If Application.CountIfs(r, ID) > 0 Then
          If MsgBox("Voulez-vous supprimer les lignes pour cet id?", vbQuestion + vbYesNo) = vbYes Then
            r.Replace what:=ID, replacement:="", lookat:=xlWhole
            r.SpecialCells(xlCellTypeBlanks).Delete
          End If
        Else
          MsgBox "L'ID n'a pas été trouvé dans le tableau"
        End If
      Else
        MsgBox "Aucun ID n'a été saisi"
      End If
    End Sub
    Pense à nommer ton tableau (Tableau2, ce n'est pas très explicite) et note que lorsque tu l'auras renommé, il faudra adapter ton code car la modification en Excel n'est pas reportée en VBA.


    Citation Envoyé par jb1975 Voir le message
    [...]Le pire je ne sais pas pourquoi j'ai le userform Frmodification qui se lance ensuite[...]
    Tu as placé du code sur le Selection_Change de la feuille. La suppression des lignes alors que tu es dans la feuille amène une modification de la sélection, et donc le code évènementiel (qui lance le userform) est lancé lors de la suppression des lignes. Tu aurais intérêt soit à désactiver les évènements le temps du traitement, soit à afficher le userform plutôt sur un double click dans le tableau. Perso, je choisirais la seconde solution.

    NB: Je n'ai pas eu besoin du login et du mot de passe... La "sécurité" de ton classeur est à revoir
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    ...
    Merci je vais voir cela

    En effet concernant la sécurité du classeur est presque terminé, c’est voulu je n'ai pas fait de Logout et n'ai pas protégé les codes, je le ferai un fois terminé

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Par défaut
    Citation Envoyé par jb1975 Voir le message
    Merci je vais voir cela

    En effet concernant la sécurité du classeur est presque terminé, c’est voulu je n'ai pas fait de Logout et n'ai pas protégé les codes, je le ferai un fois terminé
    Franchement je dis chapeau depuis le temps que je cherche c'est un truc de fou.
    Merci pour l'asso que je bosse avec,Ils pourront plus se consacrer pour les personnes qui recherchent du travail.

    Je vais modifier mon tableau et aussi faire un tableau structuré, il fallait juste que je lance la machine pour qu'ils puissent travailler à l asso.
    merci encore pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insertion de ligne avec VBA
    Par ANTMA dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 24/09/2007, 14h10
  2. Mettre du texte sur 2 ligne en VBA
    Par cyraile dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/06/2007, 08h42
  3. [VBA-E Colonnes et lignes en VBA Excel
    Par skeut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/03/2007, 16h32
  4. Saut de ligne sous VBA
    Par lg022 dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/02/2007, 11h05
  5. saut de ligne label VBA
    Par shub dans le forum IHM
    Réponses: 2
    Dernier message: 02/05/2006, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo