[VBA ARRAY]Recherche dans un tableau par rapport à une plage

Bonjour tout le monde,

je demande l'aide de toute personne qui maitrise la fonction ARRAY de VBA.

Je souhaiterais traiter un tableau de plusieurs 100ene de milliers de lignes et qui s'agrandit continuellement.

L'idée c'est qu'il y a deux bases de données, la principale (la plus volumineuse) qui contient toutes les données et la deuxième qui détermine sur quels éléments apporter les modifications.

Je mets à dispo un fichier permettant de mieux comprendre la situation.

L'idée est de modifier dans l'onglet BASE les NOMS contenues dans l'onglet MODIFICATIONS. Si le nom apparait dans cet onglet alors on cherche dans la ligne (BASE) la valeur la plus récente (sans tenir compte des 0). Le but est de remplacer les derniers 0 de ces NOM par vide.

J'ai tenté de me lancer avec des boucles (de recherche vertical puis horizontal) mais au bout de 10min Excel n'était toujours pas revenu à lui

Si vous avez des pistes (même autre que ARRAY) ou bien même la solutions, je suis preneur.

Je vous remercie bien fortement d'avance,

234base.xlsx (12.48 Ko)

Hugo

Bonjour,

ça m'étonnerait que tu obtiennes une réponse en passant par un tel hébergeur.

De plus ton exposé n'est pas clair.

Pas besoin de nous donner de volumineux fichiers : Un classeur avec 3 feuilles et quelques lignes.

Un onglet Base, Un onglet Modif et un onglet Résultat à obtenir.

Chaque onglet avec 10 lignes maxi devrait suffire à dégrossir le problème.

A+

galopin01 a écrit :

Bonjour,

ça m'étonnerait que tu obtiennes une réponse en passant par un tel hébergeur.

De plus ton exposé n'est pas clair.

Pas besoin de nous donner de volumineux fichiers : Un classeur avec 3 feuilles et quelques lignes.

Un onglet Base, Un onglet Modif et un onglet Résultat à obtenir.

Chaque onglet avec 10 lignes maxi devrait suffire à dégrossir le problème.

A+

Mon fichier est composé ainsi et est mis à disposition pour éclaircir mes propos brumeux justement

L'idée est de discuter autours de la problématique. Il me parait évident que la longueur de mon explication n'améliore en rien sa compréhension mais seul je n'arrive pas à résoudre cette problématique et c'est pourquoi je fais appel à vous.

Si vous avez des demandes d'info complémentaires, des idées ou des solutions. Je suis preneur !

Merci à tous.

Bonsoir,

La base s'arrête à la colonne I ? Sinon préciser quelle est la dernière colonne à examiner.

A+

galopin01 a écrit :

Bonsoir,

La base s'arrête à la colonne I ? Sinon préciser quelle est la dernière colonne à examiner.

A+

Oui c est la I mais le nombre de colonnes et de lignes est amené a augmenter. La macro pourra permettre de rechercher le NOM concerné par la modif pour supprimer tous les derniers zéro (en partant donc de la dernière colonne comportant un en tête)

Bonjour,

La feuille("Modificateur") ne comporte-t-elle QUE des éléments à modifier( sans avoir besoin de vérifier qu'il y a un "x" dans la colonne B ?)

galopin01 a écrit :

Bonjour,

La feuille("Modificateur") ne comporte-t-elle QUE des éléments à modifier( sans avoir besoin de vérifier qu'il y a un "x" dans la colonne B ?)

Oui tout à fait. En fait c'était pour respecté le format du fichier original mais la colonne B n'a pas d'interet ici.

Bonjour,

La macro KIVABIEN :

Sub galopin()
Dim cB%, iLC%, i&, ii&, iB&, iM&, ArrB, ArrM, oB, oM, Y As Boolean
'Détermination des bornes et Chargement des Array
Set oB = Worksheets("BASE")
Set oM = Worksheets("MODIFICATEUR")
cB = oB.Cells(1).End(2).Column
iB = oB.Cells(1).End(4).Row
iM = oM.Cells(1).End(4).Row
ArrB = oB.Range(oB.Cells(1, 1), oB.Cells(iB, cB))
ArrM = oM.Range(oM.Cells(1, 1), oM.Cells(iM, 1))
'Modification
For i = 2 To iM
   For ii = 2 To iB
      If ArrB(ii, 1) = ArrM(i, 1) Then
      Y = True
      iLC = cB
         Do While Y
            If ArrB(ii, iLC) > 0 Then
               Y = False
            Else
               ArrB(ii, iLC) = ""
               iLC = iLC - 1
            End If
         Loop
      End If
   Next
Next
'Transfert dans la base
oB.Range(oB.Cells(1, 1), oB.Cells(iB, cB)) = ArrB
End Sub

Nota : A tester quand même...

Si le Proc donne des signes d'essoufflement il faudra peut-être saucissonner la base (dans la macro) en tranches de 100 000 lignes.

NB : Pour de grandes bases le format : .xlsb est souvent avantageux.

A+

Merci d'avance. Je vais tester ce code.

Je vais changer le format du fichier dans ce cas.

Merci pour tous ces conseils

Rechercher des sujets similaires à "vba array recherche tableau rapport plage"