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 dernière ligne tableau [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Par défaut Suppression dernière ligne tableau
    Bonjour à tous,

    J'ai besoin de votre aide pour comprendre une manipulation qui ne fonctionne qu'une fois. Je m'explique:

    Après avoir entré des écritures sur une journal coptable, je dois les basculer sur le journal de banque.
    Jusque là, tout va bien.
    Mais certaines écritures ne nécessite pas d'être enregistrées dans le journal de banque, donc un ligne vide se créé et se positionne en bas du tableau;
    Je sais la répérer, enfin je crois, et j'arrive la supprimer à la première écritures.
    Mais au second passage, j'ai une erreur "Variable objet ou variable de bloc With non définie."

    Voici les lignes incriminées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     ws_Rapproche.Range("Nbr_Banque").FormulaR1C1 = "=COUNTA(C[-13])" 'Remise à zéro du compteur de ligne tableau
        zi_Nb = ws_Rapproche.Range("Nbr_Banque").Value + 1 'Variable utilisée pour la suppression
        If ws_Rapproche.Range("B" & zi_Nb) = "" Then 'Si la cellule B est vide alors
            Selection.ListObject.ListRows(zi_Nb - 4).Delete 'Je supprime la ligne concerné. Le tableau commence à la ligne 4 donc (Compteur -4)
        End If
    Qu'en pensez-vous ?
    Merci par avance pour votre aide.
    Vincent

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juillet 2024
    Messages : 47
    Par défaut
    Bonjour,

    Sans fichier anonymisé, cela me semble difficile de pouvoir vous aider

  3. #3
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 521
    Par défaut
    Bonjour à tous,
    @Vincentb74 à dis :
    donc un ligne vide se créé et se positionne en bas du tableau;
    Je sais la répérer, enfin je crois, et j'arrive la supprimer à la première écritures.
    Si c'est toujours la dernière ligne qu'il faut supprimer, alors il faut utiliser les propriétés du tableau et le nombre de lignes. Exemple :
    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
        Dim lstO As Excel.ListObject
        'Todo "Mettre une gestion d'erreur ?"
     
        ' // Affectation d'une variable ListObject
        Set lstO = ws_raproche.Range("NBR_Banque").ListObject
     
        If Not lstO Is Nothing Then
            ' // Affectation d'une variable ListRow
            Dim lstR As Excel.ListRow
            With lstO
                ' // On recherche la dernière ligne du tableau
                Set lstR = .ListRows(.ListRows.Count)
            End With
            With lstR
                If .Range(2).Value = vbNullString Then lstR.Delete
                ' // Plutôt utiliser le nom de la colonne
                'If .Range(.Parent.ListColumns("NomDeLaColonne").Index).Value = vbNullString Then lstR.Delete
            End With
        End If
    Sans fichier ou plus d'info c'est difficile de répondre, mais pour ma part j'aurais affecté une variable ListRow bien avant cela. Au moment de l'écriture des données dans le tableau. Ensuite si la valeur de la cellule "B" est vide alors la ligne est supprimée. Et ce qui serait encore mieux serait de ne pas l'écrire.

  4. #4
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Par défaut
    Citation Envoyé par Valtrase Voir le message
    Bonjour à tous,
    @Vincentb74 à dis :


    Si c'est toujours la dernière ligne qu'il faut supprimer, alors il faut utiliser les propriétés du tableau et le nombre de lignes. Exemple :
    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
        Dim lstO As Excel.ListObject
        'Todo "Mettre une gestion d'erreur ?"
     
        ' // Affectation d'une variable ListObject
        Set lstO = ws_raproche.Range("NBR_Banque").ListObject
     
        If Not lstO Is Nothing Then
            ' // Affectation d'une variable ListRow
            Dim lstR As Excel.ListRow
            With lstO
                ' // On recherche la dernière ligne du tableau
                Set lstR = .ListRows(.ListRows.Count)
            End With
            With lstR
                If .Range(2).Value = vbNullString Then lstR.Delete
                ' // Plutôt utiliser le nom de la colonne
                'If .Range(.Parent.ListColumns("NomDeLaColonne").Index).Value = vbNullString Then lstR.Delete
            End With
        End If
    Sans fichier ou plus d'info c'est difficile de répondre, mais pour ma part j'aurais affecté une variable ListRow bien avant cela. Au moment de l'écriture des données dans le tableau. Ensuite si la valeur de la cellule "B" est vide alors la ligne est supprimée. Et ce qui serait encore mieux serait de ne pas l'écrire.

    Merci beaucoup pour votre aide, mon problème est désormais résolu.
    Bonne journée à tous.

    Vincent

  5. #5
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 521
    Par défaut
    Bonjour à tous,
    Petit retour. Il serait bien de tester si le tableau comporte des lignes avant d'affecter lstR, et ceci afin d'éviter de futurs bugs lors de traitement.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
        'Todo "Mettre une gestion d'erreur ?"
        On Error GoTo Catch
     
        ' // Affectation d'une variable ListObject
        Dim lstO As Excel.ListObject
        Set lstO = ws_raproche.Range("NBR_Banque").ListObject
     
        If Not lstO Is Nothing Then
            With lstO
                ' // On recherche la dernière ligne du tableau
                If .ListRows.count > 0 Then
                    ' // Affectation d'une variable ListRow
                    Dim lstR As Excel.ListRow
                    Set lstR = .ListRows(.ListRows.count)
                    With lstR
                        If .Range(2).Value = vbNullString Then lstR.Delete
                        ' // Plutôt utiliser le nom de la colonne
                        'If .Range(.Parent.ListColumns("NomDeLaColonne").Index).Value = vbNullString Then lstR.Delete
                    End With
                Else
                    MsgBox "Le tableau ne comporte aucune ligne." & vbCrLf _
                         & "La procédure va être stoppée !!", vbOKOnly Or vbExclamation, "Gestion de tableau"
                End If
            End With
        Else
            MsgBox "Oupss... Nous avons rencontré un problème." & vbCrLf _
                 & "Impossible d'initialiser le tableau ""Nbr_Banque""" & vbCrLf _
                 & "" & vbCrLf _
                 & "La procédure va être stoppée !!", vbOKOnly Or vbExclamation, "Gestion de tableau"
     
        End If
     
    Catch:
        If Err.Number <> 0 Then
            'ToDo "Make something."
            Err.Clear
            Resume Next
        End If

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut
    Hello,

    Description très vague, c'est surtout description du problème généré par un début de solution via VBA.
    Il aurait été intéressant de partir du point de départ.

    Visiblement, on a un journal comptable contenant toutes les écritures, à partir duquel un second journal comptable (celui de la banque) est généré.
    Cela ressemble fort à un cas d'usage très adapté pour Power Query.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/04/2011, 16h42
  2. suppression de ligne tableau sas
    Par betsoooo dans le forum SAS Base
    Réponses: 6
    Dernier message: 17/06/2009, 16h16
  3. [DOM] PB Suppression ligne tableau sur IE
    Par speedev dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/11/2006, 15h41
  4. [Tableaux] Suppression de lignes dans un tableau
    Par lodan dans le forum Langage
    Réponses: 9
    Dernier message: 15/09/2006, 21h08
  5. [Word] Suppression des lignes d'un tableau
    Par sat478 dans le forum VBA Word
    Réponses: 2
    Dernier message: 06/09/2006, 15h22

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