Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je me casse le bec depuis pas mal de temps sur une formule qui permettrait d' obtenir le résultat suivant :
Tableau source :
16
1
3
52
90
1
67
2
1
9
Tableau recherché :
3
67
9
(voir dans le fichier Excel joint les vrais tableaux en exemple)
Je cherche en fait à lister toutes les valeurs qui suivent la valeur "1" dans mon tableau source.
J'imagine qu'il faut en passer par une formule matricielle, si vous voyez une macro qui peut fonctionner je prends aussi (j'y connais pas grand chose).
Dans le doc Excel joint vous verrez que je cherche à appliquer cette formule sur plusieurs colonnes avec des nombres de lignes variables.
Voilà, si cela peut inspirer des esprits curieux et surtout vifs et avisés, eh bien ce serait une aide précieuse, parce que là, je sèche.
Sur ce bonne soirée à tous,
et vive Excel !
PS : maintenant que j'arrive à décrire mon problème je souhaite modifier le titre de ce topic car il n'est pas très transparent, mais j'ai bien l'impression que c'est impossible.
Le titre aurait été "extraire des valeurs d'un tableau sous condition"
à la fin, les performances sont au rendez-vous.
Dans une configuration où nos deux procédures donnaient un rapport de durée d'exécution de l'ordre de 1 pour 450, ces modifications ramènent le rapport à environ 1 pour 5. C'est la procédure utilisant les tableaux qui reste la plus rapide (dans cette configuration particulière : je n'en ai pas essayé d'autres).
Re : extraire des valeurs d'un tableau sous condition
Bonsoir à tous ceux qui ont contribué ici et aux lecteurs,
Votre comparatif, Roger, est vraiment efficace. Et les résultats montrent une rapidité époustouflante ! Je l'ai testé sur 120.000 cellules, il indique des performances de l'ordre de 0,06 secondes pour traiter les 60.000 premières cellules de la deuxième colonne, en utilisant le bouton ROGER, et 0,05 secondes pour traiter les 60.000 autres cellules de la troisième colonne, toujours avec le même bouton ROGER.
Autrement dit, c'est impressionnant de rapidité, et sans commune mesure avec ce que permettent les fonctions matricielles sur des plages aussi conséquentes.
Donc un énorme merci pour ce script !
Comme je l'ai dit dans le premier post, je suis une bille en macro (ou en langages informatiques de toutes sortes, d'ailleurs). J'ai essayé il y a quelques mois d'en décortiquer une toute simple et je buttais à chaque mot.
Ce soir j'ai essayé malgré tout de prendre en main la macro de ROGER pour l'adapter à mon cas.
Je souhaite effectivement extraire d'un tableau source toutes les valeurs qui suivent la valeur "1" dans un tableau de destination (voir le doc Excel du premier post), mais dans le cas présent mon tableau source s'étale sur 10 feuilles. J'ai déjà pensé à le réduire, où à transposer les colonnes en lignes, mais ça présente encore moins bien au final car j'ai plus de lignes que de colonnes. Bref, je garde mes 10 feuilles, ça présente bien.
J'ai 255 colonnes utilisées par ces suites de chiffres, sur chaque feuille (sauf sur la 10ème, où il y en a un peu moins). Mon but ici est donc d'extraire les valeurs consécutives de "1" des tableaux sources, et de les copier ailleurs, sous la même forme. Ce qui implique dans mon cas que ces tableaux prennent place sur d'autres feuilles, par manque de place.
L'idéal pour moi serait qu'à partir de mon doc Excel avec toutes ses données de base sur 10 feuilles ("Tableaux sources.xls") je puisse constituer un autre doc Excel avec ces fameuses extractions sur 10 autres feuilles ("Tableaux sous_1.xls"). Le schéma des extractions serait donc le suivant :
En conservant à chaque fois les données sources dans leur emplacement d'origine, et en stockant les données recherchées dans le fichier d'arrivée.
J'ai donc essayé d'adapter la macro, mais vu que je découvre le langage VB ce soir, et d'une manière générale les scripts, je ne m'attendais évidemment pas à un résultat flamboyant.
Pour que vous puissiez mesurer l'ampleur des dégâts, je vous fais part de ma maigre contribution, qui visait à extraire les valeurs "sous 1" de ma première feuille de départ vers une autre feuille dans un autre classeur :
Code:
Private Sub ROGER2327_Click()
sous
End Sub
Sub sous()
[COLOR="YellowGreen"]J'ai simplement fait les 3 lignes suivantes, tout le reste étant la contribution de ROGER2327 :[/COLOR]
Workbooks.Open Filename:="C:\Documents and Settings\Kierkegard\Bureau\Tableaux sous_1.xls"
Sheets("Feuil1").Activate
Sheets("Feuil1").Insert
Dim oPlg, nPlg As Long, tDat, nDat As Long, nLig As Long, nCol As Long, nOff As Long
Dim t As Single '***
nOff = 3 ' Paramètre.
nLig = 5 ' Paramètre.
With ActiveSheet
For nCol = 1 To 3 ' Paramètres.
t = Timer '***
nDat = 0
oPlg = .Range(.Cells(nLig, nCol), .Cells(.Rows.Count, nCol).End(xlUp)).Value ' Données
ReDim tDat(1 To 1, 1 To 1)
For nPlg = 1 To -1 + UBound(oPlg, 1)
' Au choix, une seule des trois lignes suivantes.
' If oPlg(nPlg, 1) = 1 And Not IsEmpty(oPlg(nPlg + 1, 1)) Then
' If oPlg(nPlg, 1) = 1 And oPlg(nPlg + 1, 1) <> "" Then
If oPlg(nPlg, 1) = 1 Then
nDat = 1 + nDat
tDat(1, nDat) = oPlg(nPlg + 1, 1)
ReDim Preserve tDat(1 To 1, 1 To 1 + nDat)
End If
Next nPlg
.Cells(nLig, nOff + nCol) = " " ' Pour le cas où la colonne serait vide.
.Range(.Cells(nLig, nOff + nCol), .Cells(.Rows.Count, nOff + nCol).End(xlUp)).ClearContents
.Cells(nLig, nOff + nCol).Resize(UBound(tDat, 2), 1) = Application.Transpose(tDat)
.Cells(1, nOff + nCol).Value = Int(100 * (Timer - t) + 0.5) / 100 '***
Next nCol
End With
End Sub
Évidemment ça ne fonctionne pas. A titre informatif, pour écrire trois petites lignes mal utilisées, j'ai passé 45 minutes à trifouiller Google. Vous l'aurez compris, je suis novice.
Bref, je crois que j'ai grandement besoin d'aide sur ce coup. Si la communauté d'XLD pouvait me guider, je suis preneur !
Re : extraire des valeurs d'un tableau sous condition
Re...
Je suis heureux que vous ayez trouvé de l'intérêt à cette procédure. Il est toujours intéressant d'avoir une appréciation sur ce qu'on a fait (fût-elle désagréable, ce qui n'est pas le cas aujourd'hui). Cela permet d'améliorer la qualité des réponses ultérieures.
Pour ce qui est de la suite de votre projet, je verrai dans les jours à venir si je puis y contribuer. J'espère que d'autres apporteront leur vision de la chose : la communauté d'XLD, pour reprendre votre expression, est riche de talents...
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD