Copier puis supprimer ligne en fonction d'un critère

Bonjour à toutes et à tous,

Je reconnais que la question a souvent été posée sur divers forums, cependant impossible de trouver un code qui s'adapterait à mon cas ou que j'arrive de moi-même à modifier.

Je souhaite transférer des lignes sur une autre feuille à partir du moment ou les cellules possèdent un "Oui" dans la colonne I vers la feuille "Réussite" et qu'ensuite cette ligne soit supprimée de la feuille "Suivi"

Je vous joins mon fichier qui possède déjà divers codes pour les rendez-vous sur Outlook et autres formules que vous pourrez constater.

J'ai essayé de compléter mon deuxième code avec la formule suivante sans succès :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G:I")) Is Nothing Then
    If Range("H" & Target.Row) = "Non" Then
    Range("G" & Target.Row) = "/!\ RDV à modifier"
    Else
    If Range("I" & Target.Row) = "Non" Then
    Range("G" & Target.Row) = "/!\ Voir feuille Echec"
   Else
     If Range("I" & Target.Row) = "Oui" Then
     Sheets("Suivi").Range("A" & Lig_I).Copy Sheets("Reussite").Range("B2")
   End If
    End If
    End If
End If
If Not Intersect(Target, Range("A:E")) Is Nothing Then
    If Range("A" & Target.Row) <> "" Then
      If Range("B" & Target.Row) <> "" Then
        If Range("E" & Target.Row) <> "" Then
      Range("G" & Target.Row) = "Non"
      Else
      Range("G" & Target.Row) = "Oui"
        End If
    End If
End If
    End If
End Sub

Ou encore un autre mais la première ligne ou "Oui" apparaît dans la colonne I se copie sans cesse...

Enfin bref je ne sais plus quoi faire !

Help !

Merci beaucoup,

Solène

23test-constats.xlsm (35.13 Ko)

bonjour

en informatique de gestion de données (ou d'information si tu préfères) on ne supprime JAMAIS de ligne

on reste toujours sur une unique feuille (ou table de données) et on filtre selon la colonne "Réussite".

Pas de feuille annexe où on "reporte" telle ou telle information.

si on veut on fait un TCD, bien plus chouette pour faire des bilans et des courbes.

TOUS les progiciels fonctionnent de cette manière

aucun calcul, aucun VBA. Simple !

dans 10 ans ça marchera encore, et je te souhaite d'avoir un onglet de 1 000 000 lignes

Bonjour,

Merci de ta réponse ! J'ai essayé justement avec le Tableau de bord. Cependant ce fichier me sert à programmer des examens et ceux qui ont réussi doivent être archivés mais pas supprimés. Ils me plombent la feuille 1 pour vérifier mes rendez-vous et se reprogramment dans Outlook si je ne les retire pas, avec le premier code VBA.

C'est pourquoi j'aurais vraiment souhaité mettre cela en place, d'autant plus que je devrai certainement passer la main à d'autres gestionnaires pas forcément doués sur Excel qui ne savent pas forcément filtrer et archiver, et encore moins gérer un TBD...

Une autre solution ?

Merci,

Solène

Bonsoir Solène,

je te retourne ton fichier modifié :

80test-constats.xlsm (36.90 Ko)

à toi de faire tous les tests nécessaires.

Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour dhany,

Je te remercie pour ton aide ! Cependant ton code interfère pour le moment avec le mien pour les changements automatiques dans les cellules de la colonne G

Il ne fonctionne pas non plus directement dans le fichier que tu m'as envoyé et de ce fait non plus dans mon fichier perso.

Je vais essayer de comprendre le code que tu m'as transmise pour pouvoir l'adapter au mieux à mes attentes. Je tente d'améliorer mon niveau sur VBA mais ne sais pas par où commencer

Merci beaucoup pour ton aide ! Je reviens vers toi en cas d'incompréhension

Solène

re à vous

un TCD, pas un TDB

ne passe jamais la main définitivement sur du VBA.

tu pilotes des RDV avec VBA ?

mon avis : pas de VBA, faire ultra-simple. Pas de lien avec Outlook.

Mieux encore, pas de TCD.

Juste une liste avec des filtres.

Facile à comprendre et à prendre en main même par un novice, compatible tous OS (tous Windows, Mac, tablettes, smartphones donc dans le cloud )

note : il semble que tu ne connais pas (je ne parle même pas de maîtriser) les fonctions de base d'Excel, les TCD par exemple. Alors il est déraisonnable de te lancer dans du VBA.

escalade le Ballon d'Alsace avant de te lancer dans le Cervin.

mais ce n'est que mon avis.

Bonjour Solène,

quand j'ai testé mon fichier, j'ai pas eu d'problème !

voici ce que fait le code VBA, pour une ligne donnée :


1) si tu modifies la cellule d'une des colonnes A:E

* la cellule de la colonne G prend la valeur "Non" si y'a aucune donnée en colonnes A ; B ; E

* dans le cas contraire, la cellule de la colonne G prend la valeur "Oui"


2) si tu modifies la cellule d'une des colonnes H:I

* ça met dans chn la valeur de la cellule, en minuscules ➯ chn = "non" ou "oui"

* si c'est non, ça met en colonne G un de ces 2 messages :

- "/!\ RDV à modifier" si la modif en "Non" était en colonne H

- "/!\ Voir feuille Echec" si la modif en "Non" était en colonne I

une petite parenthèse en passant : là, j'vois pas pourquoi ça peut interférer avec ton code vu qu'tu peux pas faire une modif en même temps dans une des colonnes A:E et dans une des colonnes H:I ... même en utilisant tes 2 mains à la fois !

* si c'est pas "non", alors normalement, c'est forcément "oui" ; par précaution, jai mis un test qui fait qu'ça sort de la sub si c'est différent de "oui" (au cas où un utilisateur saisi autre chose que "Non" ou "Oui") ; donc ni oui ni non ➯ sortie d'sub

conséquence : on exécute l'instruction suivante seulement si c'est "oui"

* si le changement en "Oui" a eu lieu en colonne H "Présence" : on sort de la sub

conséquence : comme c'est dans la 2ème partie d'sub, donc si changement en H ou I, tout le reste de la sub est exécuté seulement si tu as mis "Oui" en colonne I "Réussite" ; et c'est bien la condition nécessaire pour faire ta copie en feuille "Reussite" (= archivage), qui sera suivie par la suppression en feuille "Suivi" de la ligne copiée (ce que tu avais demandé).


j'te laisse vérifier tout ça soigneusement ; si c'est pas bon, faut qu'tu m'donnes plus de précisions sur c'qui va pas :

* quels sont exactement les mauvais résultats que tu obtiens ? quels devraient être les résultats attendus ?

* et aussi : quand ça se produit ? en faisant quelle manip ?

dhany

Bonjour à tous les deux,

Tout d'abord, en réponse à jmd, je suis tout à fait consciente d'être extrêmement loin de maîtriser Excel. Maintenant j'ai commencé en Septembre et je peux t'assurer que d'après les fichiers que je conçois, je maîtrise à minima les fonctions de base AINSI que les TCD. Je pense qu'il s'agit d'une erreur de juger sans connaitre ni savoir. Je suis totalement autodidacte et essaie d'apprendre petit à petit un sujet qui m'intéresse grandement. Maintenant je n'ai pas forcément la bonne méthode d'apprentissage, si tu as de vrais conseils je serai ravie de les connaître. S'il ne s'agissait que de moi je ne prendrai pas le temps de concevoir des fichiers si complexes, mais ils seront utilisés par des collègues ne maîtrisant pas Excel c'est pourquoi je souhaite leur rendre le fichier intuitif et facile d'utilisation. En aucun cas je n'ai exigé ton aide si tu ne souhaites pas m'en donner ni même de me répondre si mes questions te déplaisent. Mais ce n'est que mon avis.

Dhany, je te remercie grandement de ton aide. En effet finalement tout fonctionne, j'avais dû faire une erreur avant de partir en congé. Je recherche maintenant à faire de même pour ceux qui n'ont pas réussi. J'ai donc essayé de modifier ton code cependant les lignes avec cellules vides se mettent également dans l'autre feuille appelée "Liste E". J'ai essayé d'y ajouter Not IsEmpty mais là c'est encore pire. Puis-je abuser une dernière fois de ton savoir ?

Déjà, le fait de sortir de la macro si la colonne G contient "/!\" ne poserait-il pas problème par rapport à ce que je demande ?

Merci beaucoup

Solène

Bonjour Solène,

j'ai bien lu ton message, et je t'en remercie ; je vais essayer de t'aider, mais je dois d'abord terminer un autre travail que j'ai en cours ; quand je lirai ta nouvelle demande plus en détail, je devrai peut-être te demander plus d'infos pour mieux comprendre le problème ; je crois déjà que ça serait préférable que tu joignes ton fichier sur lequel il y a un problème ; s'il y a des données confidentielles, remplace-les par des données fictives et poste-le sur le forum, ou envoie-moi ton fichier en MP (Message Privé).

dhany

re à vous

Sloyd,

ne te méprends pas. Je veux vraiment t'aider, sans forcément répondre à ta question directe et déjà mal engagée (c'est mon avis perso de moi )

Si au bord de la route un gars est en panne et veux que je répare le moteur, je lui dis franchement qu'en fait c'est le frein à main qui est bloqué. Je rejette sa question directe, et revois le problème globalement.

tu veux un fichier de suivi , et non "Copier puis supprimer ligne en fonction d'un critère" comme le dit ton titre.

si je te suggère de faire hyper simple, c'est pour que tu disposes immédiatement d'un fichier qui fonctionne et fonctionnera durant des années.

sur PC présents et à venir, sur tablette et smartphone.

que le moindre débutant sur Excel saura faire évoluer et/ou corriger.

bef, une appli fiable.

constate que de bonne foi, je cherche à te faaire gagner du temps, et aussi à tes collègues.

remarque (je me répète) que les progiciels que tu cherches à imiter ne sont jamais développés sous Excel. Il y a une raison : Excel n'est pas le bon environnement pour développer ces jolies applications. D'ailleurs pas si "intuitives".

Quel que soit ton choix, bon travail. Sur ce forum tu as constaté qu'il y a des super VBA-istes qui pourront t'aider.

Amitiés

@Solène

tu a écrit :

Dhany, je te remercie grandement de ton aide.

c'est avec plaisir, merci pour ton retour et pour les !


finalement tout fonctionne

parfait, j'en suis positivement ravi !


Je recherche maintenant à faire de même pour ceux qui n'ont pas réussi.

« ceux » : c'est tes collègues qui n'ont pas réussi à utiliser le fichier ? ou c'est les fichiers pour lesquels ça n'a pas marché ?


se mettent également dans l'autre feuille appelée "Liste E".

tiens donc, voici une nouvelle feuille "Liste E" ! dans l'fichier initial, c'était d'la feuille "Suivi" à la feuille "Reussite" ; je suppose que "Liste E" joue le même rôle que "Suivi", et copie éventuelle en "Reussite" ; ou j'ai perdu et c'est sur "Suivi", avec copie en "Liste E" ?

dans le 1er cas, la feuille "Liste E" doit avoir la même structure que la feuille "Suivi" ; dans le 2ème cas, la feuille "Liste E" doit avoir la même structure que la feuille "Réussite"

bien sûr, le code VBA de la feuille "Suivi" doit être dans le module de la feuille qui joue le rôle de "Suivi" ; adapter éventuellement :

With Worksheets("Reussite")


les lignes avec cellules vides se mettent également dans l'autre feuille appelée "Liste E". J'ai essayé d'y ajouter Not IsEmpty mais là c'est encore pire.

ça, c'est tout à fait normal, t'inquiètes pas : comme j'le dis souvent, y'a qu'moi qui ait le feeling avec mes propres codes VBA, donc dès que quelqu'un d'autre se met à y toucher, comme par hasard, ça foire !

bon, trêve de plaisanteries, la non-détection des cellules vides, c'est plutôt embêtant ! j'allais te proposer d'utiliser Not IsEmpty, mais tu dis qu'tu l'as fait et qu'ça marche pas ! mais peut-être que tu l'as pas fait de la bonne façon ? essaye cela :

    Cells(lig, 7) = IIf(Not IsEmpty(Cells(lig, 1)) And _
      Not IsEmpty(Cells(lig, 2)) And Not IsEmpty(Cells(lig, 5)), "Non", "Oui")

si ça marche toujours pas, essaye cela :

    Cells(lig, 7) = IIf(Cells(lig, 1) > 0 And _
      Cells(lig, 2) > 0 And Cells(lig, 5) > 0, "Non", "Oui")

autre possibilité :

    Cells(lig, 7) = IIf(Val(Cells(lig, 1)) > 0 And _
      Val(Cells(lig, 2)) > 0 And Val(Cells(lig, 5)) > 0, "Non", "Oui")

non ? toujours pas ? alors dernière solution :

bon, avant d'en arriver à cette extrémité, ça serait plus simple d'envoyer ton fichier (sans données confidentielles).

à te lire pour la suite.

dhany

Rechercher des sujets similaires à "copier puis supprimer ligne fonction critere"