[RESOLU]Supprimer lignes tableau avec condition suivant un autre tableau

cathodique

XLDnaute Barbatruc
Bonsoir,

Je voudrais supprimer des lignes du tableau Tb dont les conditions de suppression sont dans un autre tableau TDate.
Les conditions sont les suivantes: Tb(i,1) = Tdate(j,1) and Year(Tb(i,3))<Tdate(j,2)

J'ai sous les yeux un tuto, dans lequel il est dit qu'on ne peut utiliser "Delete" pour un tableau et pour ce faire il faut utiliser un compteur, ça fait un bon moment que j'essaie sans succès.
VB:
Option Explicit
Sub Macro2()
    Dim L As Integer, i As Integer, j As Integer, c As Long, k As Long
    Dim Tb(), TbR()
    Dim TDate(1 To 8, 1 To 2)
    Dim Bd As Worksheet

    'Tableau date 
    TDate(1, 1) = "T1": TDate(1, 2) = "1960"
    TDate(2, 1) = "H2": TDate(2, 2) = "1960"
    TDate(3, 1) = "O1": TDate(3, 2) = "1982"
    TDate(4, 1) = "G1": TDate(4, 2) = "1986"
    TDate(5, 1) = "L1": TDate(5, 2) = "1996"
    TDate(6, 1) = "G2": TDate(6, 2) = "2000"
    TDate(7, 1) = "DL1": TDate(7, 2) = "2004"
    TDate(8, 1) = "RO1": TDate(8, 2) = "2006"
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Set Bd = Sheets("bd")
    L = Bd.Range("A" & Rows.Count).End(xlUp).Row
    Tb = Bd.Range("A1:C" & L).Value
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    For i = 1 To UBound(Tb)
        For j = 1 To 8
            c = c + 1
            If Tb(i, 1) = TDate(j, 1) And Year(Tb(i, 3)) < TDate(j, 2) Then
                TbR(c, 1) = Tb(i, 1) '**bug n'appartient pas à la selection
                TbR(c, 2) = Tb(i, 2)
                TbR(c, 3) = Tb(i, 3)
            End If
        Next j
    Next i

    Bd.[I1].Resize(UBound(TbR), 3) = TbR
End Sub

En vous remerciant.

NB: il n'y a que 2 lignes qui doivent disparaitre (celles qui sont en rouge sur la feuille)
 

Pièces jointes

  • OterLignes.xlsm
    18.6 KB · Affichages: 55
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Supprimer lignes tableau avec condition suivant un autre tableau

Bonsoir cathodique,

Voir le fichier joint. Mais la macro trouve 17 lignes à supprimer (contrairement aux deux lignes annoncées dans l'énoncé). J'ai peut-être mal compris le problème.

Pour l'initialisation du tableau TDate,j'ai remplacé les années en mode texte par des nombre. En effet dans la comparaison Year(Tb(i, 3)) >= TDate(j, 2), Year renvoie un nombre et pas un texte.

VB:
Sub Macro2()
  Dim L As Long, i As Long, j As Long, c As Long, k As Long
  Dim Tb(), TDate(1 To 8, 1 To 2), Bd As Worksheet

  'Tableau date
   TDate(1, 1) = "T1": TDate(1, 2) = 1960
  TDate(2, 1) = "H2": TDate(2, 2) = 1960
  TDate(3, 1) = "O1": TDate(3, 2) = 1982
  TDate(4, 1) = "G1": TDate(4, 2) = 1986
  TDate(5, 1) = "L1": TDate(5, 2) = 1996
  TDate(6, 1) = "G2": TDate(6, 2) = 2000
  TDate(7, 1) = "DL1": TDate(7, 2) = 2004
  TDate(8, 1) = "RO1": TDate(8, 2) = 2006
  
  Set Bd = Sheets("bd")
  L = Bd.Range("A" & Rows.Count).End(xlUp).Row
  Tb = Bd.Range("A1:C" & L).Value
  
  For i = 1 To UBound(Tb)
    For j = 1 To 8
      If Tb(i, 1) = TDate(j, 1) And Year(Tb(i, 3)) >= TDate(j, 2) Then
        c = c + 1
        Tb(c, 1) = Tb(i, 1)
        Tb(c, 2) = Tb(i, 2)
        Tb(c, 3) = Tb(i, 3)
        Exit For
      End If
    Next j
  Next i
  
  Bd.Range("i:k").Clear
  Bd.Range("i1").Resize(c, 3) = Tb
End Sub
 

Pièces jointes

  • cathodique-OterLignes-v1.xlsm
    20.3 KB · Affichages: 50
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : Supprimer lignes tableau avec condition suivant un autre tableau

Bonjour mapomme,

Très gentil de m'avoir corrigé le code. Merci aussi d'avoir pris la peine de vérifier et de pointer les lignes.
En effet, pour le résultat il y a 17 lignes qui ne doivent plus apparaitre. J'avais réduit le nombre de lignes pour avoir un fichier plus simple (sur lequel 2 seulement devait ne plus apparaitre). Désolé, je me suis trompé de fichier.
Pour l'initialisation du tableau TDate,j'ai remplacé les années en mode texte par des nombre. En effet dans la comparaison Year(Tb(i, 3)) >= TDate(j, 2), Year renvoie un nombre et pas un texte.
Je ne vois où tu as remplacé les années en mode texte par des nombres, je n'ai pas bien compris, merci de m'éclairer.
Encore merci. Bonne journée.

Edit: C'est bon, je viens juste de m'en apercevoir, tu as retirer les "" des nombres :eek:

Mais encore une chose, je voudrais renvoyer le résultat sous une forme concaténée Tb(c,1)&"|"&Tb(c,2)&"|"&Tb(c,3) dans un tableau, et aussi sur la feuille juste pour voir le résultat. Merci.
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Supprimer lignes tableau avec condition suivant un autre tableau

Bonjour cathodique,

[...] Mais encore une chose, je voudrais renvoyer le résultat sous une forme concaténée Tb(c,1)&"|"&Tb(c,2)&"|"&Tb(c,3) dans un tableau, et aussi sur la feuille juste pour voir le résultat. [...]

Si j'ai bien interprété la question, voir la version v1a...
 

Pièces jointes

  • cathodique-OterLignes-v1a.xlsm
    21.8 KB · Affichages: 60

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Supprimer lignes tableau avec condition suivant un autre tableau

Re,

C'est parfaitement ça, c'est impeccable. Malgré les tutos que j'ai imprimé sur les arrays et les dictionnaires, et les exos que j'ai suivi ça ne veut pas rentrer dans ma petite tête.
' pourquoi une colonne ? "c'était dans le code

En fait, je dois maintenant comparer ce dernier tableau à un Dictionnaire, Je pense bien que je suis allé trop vite en besogne.
Je vais mettre ton dernier tableau dans un Dico pour extraire les lignes qui ne sont pas présentes dans l'autre Dico.

Toute ma gratitude.
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
202
Réponses
23
Affichages
1 K
Réponses
12
Affichages
537

Statistiques des forums

Discussions
311 720
Messages
2 081 917
Membres
101 839
dernier inscrit
laurentEstrées