XL 2010 Récupérer certaines d'1 tableau dans 1 autre

cathodique

XLDnaute Barbatruc
Bonjour:),

En ce dimanche, j'ai voulu améliorer ma manipulation des tableaux. Mais, je m’emmêle les "pinceaux" comme on dit. Je m'en remets à vous pour me venir en aide.
Je récupère dans un tableau certains colonnes de la feuille. Je voudrai extraire de ce tableau dans un autre tableau certaines lignes remplissant les conditions suivantes:
If Tb(i, 3) <> "A" Or Tb(i, 3) <> "C" Then
Là, je suis perdu.
VB:
Option Explicit

Sub Tableau()
    Dim Tb1(), Tb(), i As Integer, j As Byte, n As Integer, Tb2()

    With Feuil1.Range("A2:F" & Cells(Rows.Count, 1).End(xlUp).Row)
        Tb = Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 2, 5, 6))
    End With
'à partir d'ici je suis perdu
    n = 0
    For i = LBound(Tb) To UBound(Tb)
        For j = 1 To 4
            If Tb(i, 3) <> "A" Or Tb(i, 3) <> "C" Then
                  n = n + 1
                ReDim Preserve Tb1(1 To UBound(Tb), 1 To n)
                Tb1(i, n) = Tb(i, j)
            End If
        Next j
    Next i
'    Tb2 = Application.Transpose(Tb1)
Stop
End Sub
En vous remerciant par avance.

Bon dimanche.
 

Pièces jointes

  • MonTableau.xlsm
    18.5 KB · Affichages: 38
Solution
Bonjour Cathodique:), Patrick;), Sylvanu;),

D'après ce que j'ai compris du fil, un essai
VB:
Option Explicit

Sub Tableaux()
    Dim Tb(), Tb1(), Tb2(), i%, j%, n%
    DL = Application.Max(Range("H65500").End(xlUp).Row, 2)
    Range("H2:K" & DL).ClearContents
    Application.ScreenUpdating = False
    With Feuil1.Range("A2:F" & Cells(Rows.Count, 1).End(xlUp).Row)
        Tb = Application.Index(.Value, Evaluate("row(1:" & .Rows.Count & ")"), Array(1, 2, 5, 6))
    End With
    '''''''''''''''''''''''''''''''
    For i = 1 To UBound(Tb)
        If Tb(i, 3) = "B" Or Tb(i, 3) = "D" Then
            n = n + 1
            ReDim Preserve Tb1(1 To 4, 1 To n)
            For j = 1 To 4
                Tb1(j, n) = Tb(i, j)
            Next j...

patricktoulon

XLDnaute Barbatruc
A bon! 🤣 🤣 🤣 🤣
ils sont surtout facile a comprendre ;) a partir du moment ou on maîtrise l'utilisation de application.index et toutes ses possibilités

le seul inconvénient avec app.index c'est la limite a 65535 lignes
qui a été corrigé pour 2010 et 2013 sur les version office (disque ou iso) ,sur 2016 et plus pas de soucis
sur 2007 ben walouh!!!!bye bye!!!
 

cathodique

XLDnaute Barbatruc
Sylvanu;), Cp4;),ChTi160;), PatrickToulon;),

Messieurs tous mes remerciements.

@patricktoulon: J'ai peut-être l'esprit tordu mais autant que ça. Il est vrai que je ne maitrise pas comme toi, mais je fais quelques efforts de compréhension.
Dans ma demande initiale (ouvre le fichier du premier post), il n'était pas question de supprimer des lignes vides car il n'y en a pas.

Je me suis peut-être mal exprimé. Je voulais faire une boucle avec un Redim Preserve à chaque tour de boucle. Pourquoi? Ce n'est peut-être pas la méthode la plus adaptée mais c'est comme ça que je l'ai perçu.
En fait sur mon véritable fichier, après un tri de mon tableau (array), il s'avère qu'il y a des lignes vides qui se retrouvent au début de l'array. Or, d'après moi, si je redimensionne et preserve mon tableau, au final après tri je n'aurai ce problème.

Au fait les lignes vides, Cp4 s'en est aperçu, c'est Sylvanu qui les a ajouté d'après ce qu'il avait compris.

Voilà, le pourquoi. Avec ton code, ça fonctionne aussi parfaitement.

Bon après-midi.
 

patricktoulon

XLDnaute Barbatruc
re
oui t'inquiet @cathodique tu es plus dans l'apprentissage de redim preserve en transposition (obligatoire vu le fonctionnement de cette fonction) que le résultat
ce que je déplore par contre ,c'est que vous utilisez les 2 méthodes inutilement
en gros c'est pas la méthode redim preserve dans 2 boucles imbriquées que je critique
c'est le fait que vous utilisiez les 2
ce qui est absolument inutile (je te l'ai montré précédemment)
 

Discussions similaires