XL 2010 Fonction VBA sous conditions SI

Antoine.B

XLDnaute Nouveau
Bonjour à tous,

Je débute en macro/VBA et je souhaite bénéficier de votre aide.

Voilà , j'ai un fichier qui contient des données dans la feuille 1 et qui sont renseignés de manière quotidienne.
J'aimerai qu'un tableau ( feuille 2) s'alimente tout seul de la manière suivante :
Si le résultat d'une formule est ok ( cellule A3 feuille 2) ---alors une ligne se créée et reprend des données présents dans la feuille 1 ( range F3:J3 --feuille1)

Merci pour vos retours.
 

Pièces jointes

  • brouillon TDB.xlsm
    34.3 KB · Affichages: 18

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Antoine, et bienvenu sur XLD.
Un essai en PJ qui s'exécute automatiquement lorsqu'on sélectionne la feuille 2. Avec :
VB:
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    DL = Sheets("Feuil1").Range("A65500").End(xlUp).Row
    [A3:A65000].ClearContents                       ' On efface la feuille
    tablo = Sheets("Feuil1").Range("A1:K" & DL)     ' On trasfert le tableau 1 en array ( plus rapide )
    Crit1 = Sheets("liste déroulante").[I2]         ' On mémorise les deux critères
    Crit2 = Sheets("liste déroulante").[J3]
    ReDim TabloOut(UBound(tablo), 9)                ' On initie le tableau de sortie.
    iout = 0
    For i = 1 To UBound(tablo)
        ' =SI(OU(Feuil1!$E3='liste déroulante'!$I$2;Feuil1!$E3='liste déroulante'!$J$3);"ok";" ")
        If tablo(i, 5) = Crit1 Or tablo(i, 5) = Crit2 Then
            TabloOut(iout, 0) = "ok"
            For k = 6 To 11 ' On stocke les 6 colonnes
                TabloOut(iout, k - 5) = tablo(i, k)
            Next k
            iout = iout + 1
        End If
    Next i
    [A3].Resize(UBound(TabloOut, 1), UBound(TabloOut, 2)) = TabloOut    ' On restitue le tableau
End Sub
 

Pièces jointes

  • brouillon TDB (1).xlsm
    36.8 KB · Affichages: 13

Antoine.B

XLDnaute Nouveau
Bonjour Barbatruc,

Merci pour ta rapidité de réponse.
Ca marche niquel !🙂
Que signifie ton commentaire en array ?
Si je comprends bien , tu nettoies le tableau en feuille 1 mais sélectionne des critères que tu veux sauvegarder.
Tu les ressors ensuite en "out"
Que signifie ubound?
En faite je comprends pas après Redim .
Dernière question :
Tu as appris ça ou ?

Antoine
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
1-array : En fait je transfert tout le tableau dans un tableau VBA ( dit array ), cela permet ensuite d'aller beaucoup plus vte à l'exécution. C'est plus rapide de travailler avec un tableau VBA qu'avec un tablo XL.
2-ubound : ubound(tablo) donne le nombre d'éléments présent dans le tablo.
3-redim : Une fois acquis le tableau (array) je regarde sa taille (ubound) puis je crée un même tableau pour la sortie (Redim). Cela permet de remplir le tableau des valeurs de sortie.
Tu as appris ça ou ?
Autodidacte depuis de ... très nombreuses années.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Qu'appelez vous avoir accès ?
Pour le voir, en faisant du pas à pas dans la macro, et en examinant les variables locales :
1653394943777.png

Par VBA dans cette même macro en faisant :
VB:
Valeur=tablo(i, j)
Avec "i" N° de ligne, "j" N° de colonne.
Idem pour TabloOut.
Mais ce n'est valable que dans la macro.
Si vous voulez voir cet array de n'importe quelle macro, il faut définir ces tableaux en Public, avec avant le Sub faire :
Public Tablo, TabloOut
 

Antoine.B

XLDnaute Nouveau
Qu'appelez vous avoir accès ?
Pour le voir, en faisant du pas à pas dans la macro, et en examinant les variables locales :
Regarde la pièce jointe 1140386
Par VBA dans cette même macro en faisant :
VB:
Valeur=tablo(i, j)
Avec "i" N° de ligne, "j" N° de colonne.
Idem pour TabloOut.
Mais ce n'est valable que dans la macro.
Si vous voulez voir cet array de n'importe quelle macro, il faut définir ces tableaux en Public, avec avant le Sub faire :
Public Tablo, TabloOut
Sans passer par un tableau VBA dit array
Ca aurait donné quoi ?
Merci pour le retour
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Au lieu de faire un
VB:
For i=1 to Ubound(Tablo)
on pouvait faire
Code:
For i=1 to DL
      If Cells(i,"E")= Crit1 .....
Mais ça aurait été beaucoup plus long si le tableau est grand, et c'est une mauvaise habitude que de travailler directement dans les cellules.
En PJ un test de vitesse RW cellules vs RW array.
 

Pièces jointes

  • 3- Test RW cellules vs array.xlsm
    118.7 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 175
Membres
103 152
dernier inscrit
Karibu