MULTI CONDITIONS - Recherche une valeur dans une colonne

Bonjour à tous sur ce forum!

Après noël, je me suis remise au boulot! Je m'attaque à un de mes gros projets et je post dans l'espoir d'être un peu débloquée

Dans A & C : ce sont des dates regroupées par REGION. On retrouve les MÊMES régions dans les 2 colonnes, mais pas le même nombre de lignes associées!

Mon projet :

Pour i=5 to ?

Si Cells(i,3) est inférieure à la date d’aujourd’hui ET SI Cells(i, 3) est absente de la colonne A Alors

Supprimer les plages de cellule [Cells(i,3) ;Cells(i,9)]

--> j’ai mis en rouge les lignes correspondant à ces conditions pour la région PdL pour illustrer

Cela doit permettre d’aligner les dates entre les colonnes A & C ; et ce pour chaque région

Mes questions :

1) Comment faire la boucle FOR pour que ça se répète pour chaque Région ?

2) Comment prendre en compte la deuxième condition : « ET SI Cells(i, 3) est absente de la colonne A »… je pensais à la fonction FIND que j’ai découvert il y a peu mais j’aurais besoin d’un peu d’aide.. !

Fichier en PJ avec mon "début" de macro!

Merci d'avance, je peux répondre rapidement si je n'ai pas été claire!

Bien cordialement,

86testv1.zip (13.09 Ko)

J'ai réussi à faire fonctionner mes 3 conditions entre les lignes 5 et 44!! , voir fichier en PJ

Mais j'ai toujours le problème de la boucle FOR, pour que ça se répète pour chaque région...Là dessus, je bloque complètement

Si quelqu'un a une idée, je suis preneuse, merci encore!

81testv2.zip (12.56 Ko)

Bonsoir,

le principe du fichier joint :

création d'un tableau avec comme référence de ses index successifs le numéro de ligne de début et de fin de chaque région :

région(0) = 5 = ligne de début de la région PdL

région(1) = 44 = ligne de fin de la région PdL

région(2) = 45 = ligne de début de la région Bretagne

etc...

évidemment tout ceci en boucle non définie car le nombre de ligne peut être amené à être modifié.

Une fois le tableau créée, il suffit de reprendre votre code et de l'insérer dans une boucle afin de survoler les 6 régions

for j=0 to 5

et de remplacer vos valeur "en dur" par des variables qui ne sont que les valeurs du tableau remplis ci-dessus...

un coefficient multiplicateur de deux est rajouter afin d'incrémenter correctement l'index du tableau en fonction de la région en cour de traitement :

pour j = 0

index(j*2) = index(0) = début zone PdL

index((j*2)+1) = index(1) = fin zone PdL

pour j=1

index(j*2) = index(2) = début zone Bretagne

index((j*2)+1) = index(3) = fin zone Bretagne

etc...

Comme votre code fonctionne, tout va bien, région après région il est fonctionnel...

@ bientôt

LouReeD

82testv2-loureed.xlsm (31.25 Ko)

Bonsoir LoureeD

Merci! En plus avec vos explications, c'était vraiment top!! Et oui ça marche sans problème, donc nous avons opté pour cette solution!

J"avais pensé à une autre méthode, qui est beaucoup moins synthétique et efficace, mais qui - il me semble - devrait fonctionner aussi.

Nous venons de finir de la coder: elle fonctionne mais quelques dates ne réagissent "normalement". Il faut que j'appuie plusieurs fois d'affilé sur le bouton "START" de VBA pour que toutes les lignes devant être supprimées le soient.

C'est le cas pour le 19/12/2014 de PdL, et de 22/11/2014 de Bretagne.

Pour ma "culture vba", savez vous ce qui cloche dans ces boucles? (nous utilisons votre méthode mais voulons savoir ce qui cloche avec la notre)

Bien cordialement,

Bonsoir

Repas de famille...

Je répondrais plus tard

@ bientôt

LouReeD

Voilà,

repas terminé et analyse terminée...

Votre première macro fonctionnait bien en partant du bas vers le haut, hors votre nouvelle va du haut vers le bas donc lors d'une suppression de ligne (exemple la 17) la ligne 18 prend sa place et devient la 17, et le test continu en incrémentant I de +1 donc 18, et là pas de chance l'ancienne ligne 18, transformée en 17 suite à la suppression ne peut plus être testée... d'où le besoin de lancer la macro plusieurs fois car au "tour" suivant la "nouvelle" 17 est bien testée...

donc modification :

For i = LTC1 To LTC2

par :

For i = LTC2 To LTC1 step - 1

ça c'est pour la première boucle mais à la suivante... mince les références ne sont plus bonnes en effet LTC3 = Corse = ligne 72 au départ de la macro, suite au suppression de la première boucle n'est plus d'actualité car si 5 lignes supprimées alors LTC3 = Corse = devrait être égal à la ligne 67 !!! Non ?

Du coup il faut relancer la macro plusieurs fois également...

Les définition LTC3 et 2 devraient être faites suite à la première boucle et ainsi de suite pour les autres...

@ bientôt

LouReeD

Re

depuis peu j'essaie de ne pas mettre en "dur" des valeurs... exemple "AQUITAINE"

Donc ci-joint le fichier modifier au niveau de la macro pour enlever les valeurs en dur des noms de régions, comme cela si un jour vous décidez de mettre "Pays de la Loire" alors il n'y aura pas d'incidence sur la macro.

@ bientôt

LouReeD

Bonjour LouReeD,

Tout d'abord meilleurs voeux!

Je n'ai pas trop eu ni pris le temps de bosser sur mon projet depuis le 27, donc désolée pour ce retard. Je ne connaissais pas le principe des valeurs pas en "dur": merci pour l'info!

Si vous permettez, je vous pose encore une question pratique pour excel:Si un jour, il n'y a pas de données relatives à la région "Bretagne" (je les ai grisées dans le fichier), comment faire tourner tout de même ma macro?

Exemple, si un jour je n'ai "que" les données relatives à PdL, Corse & PACA; puis le lendemain j'ai les données relatives à Corse, NORD & Aquitaine --> comment faire tourner la macro malgré cet obstacle?

D'avance désolée si c'est une question un peu "bête"

Bonne journée,

Bien cordialement,

Bonsoir,

Ici, pour moi il n'y a pas de question bêtes !

Le niveau de chacun fait la raison de ce forum....

Le principe de fonctionnement de la macro est :

je regarde la valeur de la cellule, si ce n'est pas une date on en déduit que c'est le nom d'une région.

Donc la ligne Excel de fin de zone de la région précédente et égale à la ligne de la cellule testée -1 (sauf si la ligne testée est la numéro 5 qui correspond au numéro de la première cellule à tester)

Le numéro de ligne Excel de la cellule testée est donc le numéro de début de zone de la région suivante.

Et ainsi de suite jusqu'à trouver l'intitulé "total général" qui indique qu'il n'y a plus de région à chercher.

Donc dans notre cas la région Bretagne, lorsque le numéro de ligne Excel de la cellule testée est égal à 45

fin de zone région précédente = 45 - 1 = 44

début de zone Bretagne = 45

suite de la macro : teste de la cellule en ligne 46:

46 n'est pas une date, donc une région, donc numéro de ligne Excel fin de zone région précédente (Bretagne) = 46 - 1 = 45

début de zone de la région en cours = 46

La deuxième partie du code fait une boucle de la ligne fin de zone d'une région jusqu'à la ligne de début de zone et teste que la cellule correspondant correspond à une date : dans notre cas pour la Bretagne :

on fait une boucle qui va de 45 à 45 par intervalle de -1: donc une seule fois la boucle, et les teste de la cellule en ligne 45 dit que ce n'est pas une date, donc rien ne passe ! Hourra

Voilà, en cas d'absence de données sur une région, la macro tourne et ne produis pas d'erreur...

@ bientôt

LouReeD

super merci pour toutes ces explications! Ta méthode est vraiment bien vu que j'ai beaucoup de régions à traiter

Cdlt,

Merci à vous .-)

n'oubliez pas...

@ bientôt

LouReeD

Rechercher des sujets similaires à "multi conditions recherche valeur colonne"