Insertion ligne sous conditions

Bonjour,

Je publie mon premier post car je rencontre un problème pour insérer une nouvelle ligne si 3 conditions sont remplies:

exemple en pj: Je dois insérer une ligne entre la ligne 39 et 40 car

  • B40 et D39 sont différents
  • B40 - D39 <= 5 minutes
  • F40 = F39

[ISub Macro1()

l = Range("J" & Rows.Count).End(xlUp).Row

For I = l To 2 Step -1

If Range("c" & I) <> Range("f" & I - 1) And Range("F" & I) = Range("F" & I - 1) And Range("c" & I) - Range("f" & I - 1) <= 0.003472222 Then

Rows(I + 1).Select

Selection.Insert Shift:=xlDown

End If

Next I

End Subline][/Inline]

Je rencontre un problème car j'une ligne est ajoutée entre la ligne 46 et 48 alors que les 3 conditions ne sont pas remplies

Savez vous pourquoi ce bout de code ne fonctionne pas?

Merci d'avance de votre aide

13exemple.xlsm (17.49 Ko)

Salut,

Je trouve ta demande et ton exemple assez mal foutus. Tout d'abord, la macro dans ton fichier ne correspond pas à celle inscrite sur le fil. Laquelle est la bonne ?

Ensuite tu as déjà des lignes vides entre les lignes que tu mentionnes (par exemple la ligne 39 est vide alors que tu prétends qu'elle comporte des données). Et puis tu compares des données de la colonne F alors qu'elle est absolument vide !!??

Alors fourni nous un fichier avec seulement 5 lignes – avant le lancement de la macro – dont 1 ou deux qui remplissent les conditions voulues et 1 ou 2 non. Ce sera plus facile à te suivre

Et revois tes explications en fonction de ce nouveau fichier.

Amicalement.

Bonjour Yvouille,

Tout d'abord merci pour ton retour et tes réflexions très justes.

La bonne macro est celle sur le fichier excel qui ne fait pas référence à la colonne F.

Dans le fichier joint une ligne doit être insérée sous les lignes

  • 4
  • 5
  • 8
  • 10

En faisant tourner la macro actuelle une ligne est insérée entre l'avant dernière et la dernière .

Merci d'avance de ton aide

Tout d'abord, pour la boucle For/Next, tu dois t'arrêter à la ligne 3 car il est inutile - et impossible - de comparer les lignes 2 et 1 (les lignes 2 et 2 - 1). Ton code n'arrive pas à contrôler si 05:58 - "Fin" est plus petit que 5 minutes ou non D'ailleurs, la macro bloque lorsque I = 2.

Ensuite tu compares la colonne C avec la colonne D alors que je présume que tu voudrais comparer les colonnes B et D, soit If Range("B" & I) <> Range("D" & I - 1) à la place de If Range("c" & I) <> Range("D" & I - 1) .

Mais alors aucune ligne n'est masquée !

Dans le fichier ci-joint, j'ai corrigé la boucle For/Next selon les infos ci-dessus, mais je n'ai pas corrigé l'autre ligne et j'ai lancé la macro sur la feuille intitulée ''macro Ta version modifiée''. Mais selon moi les résultats sont tous fantaisistes, bien que l'un ou l'autre peuvent être corrects par hasard.

Sur la feuille ''macro Version Yvouille'', j'ai également corrigé le passage If Range("B" & I) <> Range("D" & I - 1) et tu vois que rien ne se passe.

Ma proposition : Sur la base de la feuille ''macro'' que je te fourni en retour (avec la numérotation des lignes dans la colonne F), écarte manuellement les lignes que tu voudrais voir écartées par macro en indiquant pour un seul exemple les conditions qui font que cette ligne doit être ajoutée et indique les conditions qui font qu'un autre exemple ne doit pas être écarté. INDIQUE MOI PAR EXEMPLE : Il doit y avoir une nouvelle ligne entre les lignes 4 et 5 car la cellule V5 est différente de la cellule W4 ET que la cellule X4 est plus petite que la cellule Y5 ET que la différence entre M4 et N4 est plus petite qu'un quart d'heure PAR CONTRE, comme la cellule V10 est identique à la cellule W11, il ne faut pas ajouter de ligne entre elles.

Je me chargerai de traduire ça en VBA et tu pourras apprendre en observant le code

Bonjour Yvouille,

Je ne vois pas de fichier dans ton message.

Je te propose donc le fichier suivant,

Il y a la version de base dans l'onglet base, la version manuel correspond au résultat que je souhaite avoir et la version macro correspondra au résultat de la macro.

J'ai remis les numéros de ligne en F ( je ne sais pas si c'est comme ça que tu voulais faire).

Dans la version manuelle la ligne 5 est vide car

  • E6 =E4
  • B6 <> D4
  • B6 - D4< 5 MINUTES

Salut,

INDIQUE MOI PAR EXEMPLE : Il doit y avoir une nouvelle ligne entre les lignes 4 et 5 car la cellule V5 est différente de la cellule W4 ET que la cellule X4 est plus petite que la cellule Y5 ET que la différence entre M4 et N4 est plus petite qu'un quart d'heure PAR CONTRE, comme la cellule V10 est identique à la cellule W11, il ne faut pas ajouter de ligne entre elles.

On ne peut pas vraiment dire que tu as suivi mes conseils et répondu à ma demande

Tu ne dis pas si tes conditions sont des OU ou des ET :

Tu souhaites

E6 =E4 ET B6 <> D4 ET B6 - D4< 5 MINUTES

ou alors

E6 =E4 OU B6 <> D4 OU B6 - D4< 5 MINUTES

??

Un fois tu dis indiques la condition B6 - D4< 5 MINUTES, une autre fois B6 - D4<= 5 MINUTES : ce n’est pas la même chose.

Je t’ai proposé de placer des numéros de lignes dans la colonne F afin de voir qu’elle était l’ancienne position de la ligne x avant l’insertion des lignes vides.

Désolé pour le fichier oublié l’autre jour.

Dans le fichier ci-joint, tu as une macro qui devrait ajouter des lignes selon les conditions ci-dessous :

E6 =E4 ET B6 <> D4 ET B6 - D4<= 5 MINUTES

Contrôle bien si le résultat obtenu est bien celui souhaité. Si non, crée des exemples de lignes démontrant ce qui ne joue pas et explique-moi - de la manière demandée dans mon précédent message - ce qui n’est pas réalisé.

Tu remarqueras que j’ai modifié certaines de tes données. Par exemple entre les lignes 4 et 5, il n’y a pas de ligne insérée, car la différence entre B5 et D4 est de 10 minutes. Et il n’y a pas de ligne insérée entre les lignes 13 et 14 car ce n’est pas le même ‘’SA’’ dans la colonne E.

Amicalement.

Bonjour Yvouille,

Je viens d'essayer le fichier "Exemple correction_V1" et en lançant la macro rien ne se passe.

Est ce le bon fichier, je ne vois pas les données que tu as modifiées, sur quel onglet as tu fais des modifications ?

Merci du temps que tu prends.

Bonne journée

Re-bonjour,

Je suis absolument désolé, mais c'est déjà la deuxième fois que je fais une erreur au niveau des fichiers joints sur ton fil

J'avais laissé le fichier sur lequel j'ai travaillé hier soir sous ''Téléchargements'' puis j'ai joint le dernier fichier que j'avais dans mon dossier ''Forum''.

Alors voilà le fichier dont il est fait mention dans mon précédent message.

Bonjour Yvouille,

Merci pour ta macro, elle fonctionne à la perfection, j'ai tout de même quelques questions pour progresser:

- Que signifie "option explicit" au début de la macro ?

- Pourquoi faire 5/1440 au lieu de 0.003472222

- L'ordre des conditions dans le IF n'a pas d'importance ?

- Sais tu pourquoi ta macro ne fonctionne pas sur le fichier joint ? elle insert des lignes vides entre chaque ligne

Encore merci

Salut,

- Que signifie "option explicit" au début de la macro ?

Si tu avais cherché un peu sur internet, tu aurais trouvé rapidement 49 345 réponses et quelques-unes de plus en creusant un peu.

- Pourquoi faire 5/1440 au lieu de 0.003472222

Selon moi, 0.003472222 correspond à 4 minutes, 9 dixième, 99 centièmes et 836 millièmes – ou un truc dans le genre – alors que 5/1440 correspond exactement à 5 minutes.

- L'ordre des conditions dans le IF n'a pas d'importance ?

Grand Dieu, oui !

Enfin, non.

C’est un peu comme quand tu imbriques des fonctions ET et OU les unes dans les autres dans une formule ; parfois ça a de l’importance, parfois non. Ainsi, toujours selon moi, si tu imbriques 20 conditions OU ou bien 20 conditions ET, l’ordre n’a pas d’importance. Dès que tu mélanges les ET et les OU, ne te ……. mélange pas les pinceaux.

- Sais tu pourquoi ta macro ne fonctionne pas sur le fichier joint ? elle insert des lignes vides entre chaque ligne

On ne répétera jamais assez qu’un fichier-modèle ne correspondant pas au fichier réel n’est jamais une bonne idée Dans ton fichier réel, par rapport à ton fichier-modèle, la colonne B est en colonne C ; la colonne D est en colonne F et la colonne E est en colonne J.

Comment veux-tu que la macro fonctionne encore ????????

Je n’ai pas cherché plus loin s’il y avait d’autres problèmes.

Si tu ne sais pas adapter la macro fournie pour TON fichier-modèle à TON fichier réel, promets-moi que le dernier fichier reçu est le fichier définitif et j’adapte mon code.

Cordialement.

Salut Yvouille,

Sur google j'ai même 255 000 réponses à la recherche "option explicit" mais j'ai préféré te demander à toi pour en effet gagner du temps mais surtout pour avoir une réponse précise dans le cas de cette macro (que tu maîtrises visiblement bien mieux que moi)

Dans tous les cas je trouve ton lien plutôt intéressant.

J'ignorais que 0.003472222 était une approximation de 5 minutes, je vais donc suivre ton exemple pour la suite.

Le dernier fichier que j'ai transmis, ne fait en effet pas référence aux mêmes colonnes, c'est pour cela que j'avais modifié la macro sans pour autant avoir un résultat me satisfaisant.

Je retiens ton conseil de faire un fichier modèle se rapprochant le plus au fichier réel.

Je peux maintenant te promettre que le fichier sur mon dernier message est bien le dernier car c'est le même que mon fichier réel.

Si tu as une idée du pourquoi la macro ne fonctionne pas je suis preneur.

Bonne soirée

Si tu as une idée du pourquoi la macro ne fonctionne pas je suis preneur.

Ben, je t'avais promis que je corrigerai ton code si nécessaire, non ?

Si tu ne sais pas adapter la macro fournie ......... à ton fichier réel........ j’adapte mon code.

Voici le code adapté en annexe.

Amicalement

Salut Yvouille,

Merci pour ton fichier,

J'avoue que je ne vois pas la différence entre ton code et le mien mais je constate bien que le résultat de ta macro est le bon.

Peux tu me donner une piste pour que je comprenne la différence entre les deux macros?

Bonne journée

Yvouille,

Autant pour moi la différence vient de ma sauter aux yeux.

Merci beaucoup pour le résultat et pour le temps que tu as appris.

A bientôt peut être sur le forum

Rechercher des sujets similaires à "insertion ligne conditions"