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 :

Problème ajout suppression de lignes. [XL-2007]


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
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut Problème ajout suppression de lignes.
    Bonjour,

    Dans le classeur ci-joint, j'ai une macro qui historise dans la feuille "Histo_TRLT" les changement de "TRLT Total J/O" et "Date MAJ" effectué dans la feuille "Liste des onglets".

    Le problème que je n'arrive pas à résoudre est le suivant:

    Si dans la feuille "Liste des onglets" j'ai une ou plusieurs nouvelles lignes ou suppressions de lignes, j'aimerai recopier ou supprimer la/les lignes dans la feuille "Histo_TRLT".
    Merci de votre aide.

    ED

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Private Sub Worksheet_Activate()
     
     
        'définition des variables
        Dim histo As String
        Dim TRLThisto As Integer
        Dim i As Integer
        Dim j As Integer
        Dim Derncol As Integer
        Dim Derncoltitre As Integer
     
     
     
    j = 2 'N° ligne Liste des onglets
    i = 2 'N° ligne Histo TRLT
     
    Do While Cells(i, 2) <> ""
     
    'recherche de  la premiere colonne vide par ligne ds la feuille Histo_TRLT
    Derncol = (Cells(i, Cells.Columns.Count).End(xlToLeft).Column) + 1
     
     
     
    histo = Cells(i, 1).Value 'récupère la valeur "Référence" de la feuille histo
     
    TRLThisto = Cells(i, Derncol - 2) 'récupère la derniere valeur TRLT de la feuille histo
    'MsgBox (TRLThisto)
     
     
    While Sheets("Liste des onglets").Cells(j, 1) <> "" ' parcours le tableau de la feuille Liste des onglets
     
        If Sheets("Liste des onglets").Cells(j, 1) = histo And Sheets("Liste des onglets").Cells(j, 3) <> TRLThisto Then 'ne recupere les données que si differentes
            Cells(i, Derncol) = Sheets("Liste des onglets").Cells(j, 3) 'renvoie le TRLT dans la cellule de la premiere colonne vide de la ligne active de la feuille "Histo_TRLT
            Cells(i, Derncol + 1) = CDate(Sheets("Liste des onglets").Cells(j, 7)) 'renvoie la date dans la cellule de la deuxieme colonne vide de la ligne active de la feuille "Histo_TRLT
        End If
     
     
    j = j + 1
    'DernLigneliste = Sheets("Liste des onglets").Range("A" & Rows.Count).End(xlUp).Row 'compte les lignes de la liste des onglets
     
    Wend
    j = 2
    i = i + 1
    Loop
     
       Derncoltitre = Sheets("Histo_TRLT").UsedRange.Columns.Count 'recherche numero de la premiere colonne vide de la premiere ligne sur la feuille Histo_TRLT pour coller les titres
        'MsgBox (Derncoltitre)
     
        'copier coller des titres des deux colonnes
    Range(Cells(1, Sheets("Histo_TRLT").UsedRange.Columns.Count - 3), Cells(1, Sheets("Histo_TRLT").UsedRange.Columns.Count - 2)).Select
    Selection.Copy
    Range(Cells(1, Sheets("Histo_TRLT").UsedRange.Columns.Count - 1), Cells(1, Sheets("Histo_TRLT").UsedRange.Columns.Count)).Select
    ActiveSheet.Paste
         Application.CutCopyMode = False 'enleve la surbrillance copier
     
         Columns.AutoFit 'largeur de colonnes auto
     
        Range("A2").Select
     
    End Sub

  2. #2
    Membre expérimenté
    Homme Profil pro
    Pompier de service
    Inscrit en
    Février 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Pompier de service

    Informations forums :
    Inscription : Février 2014
    Messages : 146
    Par défaut
    Excel ne propose pas, par défaut, d'interception des évènements "ajout" ou "suppression de ligne"

    Pour contourner le problème, une solution :
    - Ajouter dans ta feuille "liste des onglets" 2 boutons "Ajout ligne" et "Suppression ligne" qui vont déclencher du code VBA que tu pourras exploiter comme tu veux,


  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    Merci de votre réponse,
    Je pensais pas à un évènement " ajout" ou "suppression de ligne", mais plutôt a un comparatif des deux feuilles.
    Si la référence n'existe pas dans la feuille "Histo_TRLT", mais existe dans la feuille "Liste des onglets" alors on recopie la ligne dans "Histo_TRLT".
    Inversement, si la référence existe dans la feuille "Histo_TRLT", mais n'existe plus dans la feuille "Liste des onglets" alors on supprime la ligne dans "Histo_TRLT".

  4. #4
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonsoir
    Vous pensez bien, c'est ce que je fais avec le code ci-dessous : a adpater

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'masque les lignes dont les vacanciers sont masqué avec le n° de soin
    dim L as range, r as integer 
    'pour la plage suivante : je compte le nombre de ligne sinon a chaque ligne retiré c'est le brin ( la ligne 10 devenant 9....)
    For R = 6 To Range("a1:a" & [c65000].End(xlUp).Row).Rows.Count
    'je verifie que mon n° d'enregistrement est existant sur l'autre feuille
            Set L = Feuil62.Columns(4).Find(Cells(R, 1).Value, LookIn:=xlValues, lookat:=xlWhole)
            If L Is Nothing Then
                If R >= 6 Then
    'si ce n'est pas le cas, j'efface la ligne
                Rows(R).Delete 
                Else: Exit For
                End If
            End If
    Next R
    je fais ensuite la comparaison inverse afin d'ajouter les n° d'enregistrement manquants.
    Je me serais bien essayé sur votre fichier mais je n'arrive pas a l'ouvrir.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    Bonjour,
    Voici mon fichier avec la formule pour la suppression des lignes qui n'existent plus dans la feuille "Liste des onglets".

    Problème je n'arrive pas à faire l'inverse, import dans la feuille "Histo_TRLT" des nouvelles lignes de la feuille "Liste des onglets".

    Si l'un d'entre vous a un solution ...

    Merci,

    ED

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Private Sub Worksheet_Activate()
     
     
        'définition des variables
        Dim histo As String
        Dim TRLThisto As Integer
        Dim i As Integer
        Dim j As Integer
        Dim Derncol As Integer
        Dim Derncoltitre As Integer
     
     
     
    j = 2 'N° ligne Liste des onglets
    i = 2 'N° ligne Histo TRLT
     
     'module suppression des lignes qui n'existent plus dans la feuille "Liste des onglets"
    Dim l As Range, r As Integer
     
    For r = 2 To Range("a2:a" & [c65000].End(xlUp).Row).Rows.Count
     
    Set l = Feuil2.Columns(1).Find(Cells(r, 1).Value, LookIn:=xlValues, lookat:=xlWhole)
     
    If l Is Nothing Then
     
    If r >= 2 Then
     
    Rows(r).Delete
     
    Else: Exit For
    End If
    End If
     
    Next r
     
     
     
     
    'module ajout des nouvelles colonnes TRLT et Date
     
    Do While Cells(i, 2) <> ""
     
    'recherche de  la premiere colonne vide par ligne ds la feuille Histo_TRLT
    Derncol = (Cells(i, Cells.Columns.Count).End(xlToLeft).Column) + 1
     
     
     
    histo = Cells(i, 1).Value 'récupère la valeur "Référence" de la feuille histo
     
    TRLThisto = Cells(i, Derncol - 2) 'récupère la derniere valeur TRLT de la feuille histo
    'MsgBox (TRLThisto)
     
     
    While Sheets("Liste des onglets").Cells(j, 1) <> "" ' parcours le tableau de la feuille Liste des onglets
     
        If Sheets("Liste des onglets").Cells(j, 1) = histo And Sheets("Liste des onglets").Cells(j, 3) <> TRLThisto Then 'ne recupere les données que si differentes
            Cells(i, Derncol) = Sheets("Liste des onglets").Cells(j, 3) 'renvoie le TRLT dans la cellule de la premiere colonne vide de la ligne active de la feuille "Histo_TRLT
            Cells(i, Derncol + 1) = CDate(Sheets("Liste des onglets").Cells(j, 7)) 'renvoie la date dans la cellule de la deuxieme colonne vide de la ligne active de la feuille "Histo_TRLT
        End If
     
     
    j = j + 1
    'DernLigneliste = Sheets("Liste des onglets").Range("A" & Rows.Count).End(xlUp).Row 'compte les lignes de la liste des onglets
     
    Wend
    j = 2
    i = i + 1
    Loop
     
       Derncoltitre = Sheets("Histo_TRLT").UsedRange.Columns.Count 'recherche numero de la premiere colonne vide de la premiere ligne sur la feuille Histo_TRLT pour coller les titres
        'MsgBox (Derncoltitre)
     
        'copier coller des titres des deux colonnes
    Range(Cells(1, Sheets("Histo_TRLT").UsedRange.Columns.Count - 3), Cells(1, Sheets("Histo_TRLT").UsedRange.Columns.Count - 2)).Select
    Selection.Copy
    Range(Cells(1, Sheets("Histo_TRLT").UsedRange.Columns.Count - 1), Cells(1, Sheets("Histo_TRLT").UsedRange.Columns.Count)).Select
    ActiveSheet.Paste
         Application.CutCopyMode = False 'enleve la surbrillance copier
     
         Columns.AutoFit 'largeur de colonnes auto
     
        Range("A2").Select
     
    End Sub

  6. #6
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour, la suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'module ajout des nouvelles colonnes TRLT et Date
    With Sheets("trlt")
    For r = 2 To .Range("a2:a" & .[c65000].End(xlUp).Row).Rows.Count
    Set l = Columns(1).Find(Cells(r, 1).Value, LookIn:=xlValues, lookat:=xlWhole)
    If l Is Nothing Then
    If r >= 2 Then
    .Rows(r).Copy Rows(r).Insert
    'j'ai choisi de copier la ligne de trlt dans liste onglets.
    Else: Exit For
    End If
    End If
    Next r
    N'arrivant pas a ouvrir les fichiers joints, je n'ai pus réaliser de test.

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

Discussions similaires

  1. [Access 2003] Problème de suppression de ligne
    Par Amitom dans le forum Access
    Réponses: 1
    Dernier message: 10/05/2007, 16h51
  2. [VBA-E] Problème de suppression de lignes
    Par coxi77 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/07/2006, 14h01
  3. [Excel & D7]Problème de suppression de lignes
    Par Isa31 dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 14/03/2006, 09h00
  4. Problème de suppression de ligne dans ma base !
    Par gregman dans le forum ASP
    Réponses: 2
    Dernier message: 21/05/2005, 08h14
  5. [Excel - VBA] Problème de suppression de lignes...
    Par beholder2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2005, 17h27

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