Macro Recherche sous Conditions

Bonjour à tous,

J’ai besoin de votre aide pour mettre en place une macro compliquée (du moins pour mon niveau !).

Voici mon problème :

J’ai un fichier avec 4 onglets.

Dans l’onglet EXPORT, j’importe des données (Copier-Coller). Dans l’onglet PLANNING j’établis un planning via une macro qui, au croisement de la bonne date et du bon nom, me renvoie une valeur (texte) en fonction de données contenues dans EXPORT.

J’aimerais une macro qui, dans mon onglet FRAIS (identique à PLANNING), me renvoie une valeur contenue dans GRILLE TARIFS, excepté pour les cellules grisées et selon 2 conditions dépendant de l’onglet PLANNING.

Dans PLANNING les cellules sont remplies grâce à deux données : le temps (‘Grille tarifs’!H1:Q1) et le lieu (‘Grille tarifs’!F2:F17).

Donc par exemple dans Frais!B2, lorsque Planning!B2 renvoie la valeur contenue dans ‘Grille tarifs’!H1 + la valeur contenue dans ‘Grille tarifs’!F2, la cellule doit nous afficher la valeur de ‘Grille tarifs’!H2 et ainsi de suite selon le tableau ‘Grille tarifs’!F1:Q17. Si les cellules sont vides dans Planning! alors elles doivent être également vide dans ‘Frais’!.

Il faut donc tester toute la feuille Planning avec tous les critères du tableau de Grille tarifs (on ne tient pas compte de la colonne G du tableau).

Je joins un fichier pour tenter d’être plus clair.

PS : des dates et des collaborateurs sont susceptibles d’être ajoutés, le test doit donc se poursuivre tant qu’il y a des dates en colonne A et des collaborateurs en ligne 1.

J’ai conscience que c’est plus qu’un conseil que je demande mais j’ai vraiment besoin de votre aide.

D’avance merci.

Bonjour

Exemple incomplet

Le dossier est vide

Il faudrait savoir ce que tu as dans la feuille Planning

NulEnVBA a écrit :

Dans l’onglet PLANNING j’établis un planning via une macro qui, au croisement de la bonne date et du bon nom, me renvoie une valeur (texte) en fonction de données contenues dans EXPORT.

Où est la macro (c'est un fichier Xlsx)

Donnes un (plusieurs) exemples de ce que tu veux trouver dans la page frais

Bonjour Banzai64,

J'ai viré la macro sinon ça ne passait pas.

Dans Planning j'ai rempli 3 cellules, c'est ce type de données qui est normalment généré par la macro et ce sur des centaines de cellules évidemment.

Donc en théorie, la macro que j'aimerais mettre en place devrait, dans cet exemple, me remplir dans l'onglet 'Frais' les cellules B3, D4 et D5 avec respectivement les montants suivants : 100, 74 et 74.

Si je ne suis pas assez clair n'hésites pas.

Bonjour

A mon avis il serait plus facile d'inclure dans la macro qui t'alimente ta page Planning un code pour alimenter la plage Frais

Car les codes dans la page Planning ne sont pas toujours de la même forme

Je vais essayer de trouver une solution mais SGDG

Si ça peut t'aider, voici la macro qui me sert à remplir l'onglet planning :

Sub test()

Dim c As Range, o As Range, iCol!, iLRS!, iRow!, S$, Ss$, k As Date, kk%

With Worksheets("Export")

iLRS = .Range("A" & .Rows.Count).End(3).Row

End With

For Each o In Worksheets("Export").Range("A2:A" & iLRS)

k = o.Value

iRow = CLng(k) - CLng(Worksheets("Planning").Range("A2")) + 2

S = Worksheets("Export").Cells(o.Row, 3)

Ss = Worksheets("Export").Cells(o.Row, 4)

With Worksheets("Planning").Rows(1)

Set c = .Find(S)

If Not c Is Nothing Then

iCol = c.Column

.Cells(iRow, iCol) = Ss

kk = o.Offset(, 1) - o

If kk > 0 Then

For i = 1 To kk

.Cells(iRow + i, iCol) = Ss

Next

End If

End If

End With

Next

End Sub

Bonjour

Une version à tester

Pas pratique les cellules fusionnées

Moi je ne comprends pas tout

Dans PLANNING les cellules sont remplies grâce à deux données : le temps (‘Grille tarifs’!H1:Q1) et le lieu (‘Grille tarifs’!F2:F17).

Dans la macro fournie je n'ai pas vu (sans doute je l'ai raté) une quelconque référence à la page Grille tarifs

Pas grave en soi, mais j'aurais aimé comprendre

En fait la macro va bien chercher les données dans l'onglet 'Export', mais étant donné que j'ai supprimé les données, pour visualiser j'ai mis comme référence le tableau de l'onglet 'Grille tarifs'.

Je teste et je reviens vers toi.

Ta macro fonctionne bien dans le fichier de test, malheureusement lorsque je l'intègre dans mon fichier original elle me retourne " Lieux X non trouvé".

Je suppose que c'est dû au fait que le nom de mes sites réels peuvent contenir des espaces et être par exemple de type : aaa aa (aaa) ?

Comment puis-je corriger ?

Et de plus, sans vouloir trop abusé, est-ce que ça t'ennuierait de me faire une petite explication de texte, m'expliquer ce que chaque ligne veut dire, ce qu'elle entraine comme action ? (pour ma culture VBA personnelle!!)

En tout cas merci beaucoup car dans la version de test ça fonctionne très bien et c'est exactement ce qu'il me faut !

Bonjour

NulEnVBA a écrit :

Je suppose que c'est dû au fait que le nom de mes sites réels peuvent contenir des espaces et être par exemple de type : aaa aa (aaa) ?

Tout à fait ça

NulEnVBA a écrit :

Comment puis-je corriger ?

En y mettant un souligné (touche 8 )

Ou alors dans ton tableau Planning il faut séparer la durée et le lieu par une , (virgule) par exemple

Il faudra modifier la macro que je t'ai faite mais c'est faisable

Quelques explications dans le code

SU-PER, ça fonctionne nickel.

Merci beaucoup Banzai64.

Par contre j'ai une question :

Ma 1ère macro, pour remplir l'onglet Planning, met près de 3 min pour s'exécuter !!!!! Existe-t-il un moyen pour qu'elle s'exécute plus rapidement ? Idem quand j'ouvre mon fichier, il met au moins 30 secondes !!

Bonjour

Il me faudrait des données dans l'onglet Export afin de tester un peu mieux ta macro

NulEnVBA a écrit :

j'ouvre mon fichier, il met au moins 30 secondes !!

Pas d'idée précise

Voir si des liens

Faire un nettoyage du fichier

Voici le fichier réel avec seulement les données modifiées.

L'ouverture ne pose plus de problème car j'ai supprimé pas mal de ligne, en revanche la macro en prend toujours autant et en fait je pense que c'est provoqué par les formules des cellules grisées dans l'onglet Planning.

Par contre j'ai parlé trop vite, la macro pour les Frais ne reconnait pas la Durée, elle se base sur "1 1/2 J" et non pas sur "1 1/2 J T" or c'est sur ce dernier modèle que j'ai absolument besoin qu'elle se base, car cette donnée viens de l'extérieur et je ne paux pas la modifier. Ou alors il faut que lorsqu'elle cherche dans l'onglet Planning elle ne tienne pas compte du " T". Car en fait là elle ne reconnait plus les données Durée !


J'ai essayé en séparant la Durée du Lieu par un espace ou par une virgule mais dans les 2 cas il ne reconnait pas la Durée.

Bonjour

Quelques modifications dans les macros

Je t'ai refais ta macro test mais pas gain de temps (à vérifier le résultat)

J'ai juste désactiver le calcul au début de la macro et l'ai rétablit à la fin

Mes deux macros (l'ancienne Test et la nouvelle Planning sont opérationnelles)

Modification de la macro Frais

Tient compte des infos avec la virgule

A vérifier soigneusement

J'ai testé,

Malheureusement la macro Test me renvoie des donnée dans des cellules grisées ce qui est anormal.

Et la macro Frais bug:

Run-time error '5' :

Invalid procedure call or argument

Il me surligne en jaune la ligne suivante :

Duree = Left(Cel, InStrRev(Cel, ",", -1) - 1)

Bonjour

Incredible (incroyable)

je viens de retester la version 4 et aucun des soucis que tu indiques

Aucun message d'erreur

Aucune inscription dans les zones grises

Je ne comprends pas !!

Je viens de le retélécharger et ça me fait les mêmes erreurs.

Bonjour

NulEnVBA a écrit :

Je viens de le retélécharger et ça me fait les mêmes erreurs.

?????

Je ne comprends plus le compteur ne fonctionne plus

nombre de fois

Effectivement !!!

Bonsoir

Laconique !

et un peu énervé aussi de ne pas réussir à faire fonctionner cette satané macro

Rechercher des sujets similaires à "macro recherche conditions"