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

  1. #21
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 11
    Points
    11
    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

  2. #22
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    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...
    ---------------

  3. #23
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 11
    Points
    11
    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.

  4. #24
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 11
    Points
    11
    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

  5. #25
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    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...
    ---------------

  6. #26
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 11
    Points
    11
    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é

  7. #27
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 20
    Points : 11
    Points
    11
    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.
Page 2 sur 2 PremièrePremière 12

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