Copier coller avec condition sur une autre feuille

Bonjour ,

Je suis entrain de travailler sur une AMDEC ( Analyse des Modes de Défaillances des Effets et de leur Criticté).

Je souhaiterais sur mon fichier excel sur l'onglet "Synthèse" avec les cotations G*F*D ( Gravité , Fréquence , Detection) à chaque fois que l'IPR va depasser le 100, je voudrais que ca me copie la ligne sur l'onglet "PA".

A vos lumières SVP.

Vous trouverez ci joint mon fichier

Cordialement

26amdec.zip (379.75 Ko)

Le tableau trié arrive en J4 sur l'onglet PA, mais je ne sais pas quel partie du tableau de synthese tu veux dans PA don j'ai pris tout le tableau ...

Tu mets à jour via "données" "raffrachir tout"

7amdec.zip (377.73 Ko)

Bonjour merci pour votre retour .

Toutefois votre fichier ne marche pas....j'ai un message d'erreur .

Je souhaiterais juste sur mon fichier excel sur l'onglet "Synthèse" avec les cotations G*F*D ( Gravité , Fréquence , Detection) à chaque fois que l'IPR va depasser le 100, je voudrais que ça me copie l'intégralité de la ligne sur sur une autre feuille.

A vos lumières SVP.

Vous trouverez ci joint mon fichier

Cordialement

4amdec.zip (379.75 Ko)

Bonjour lim01,

j'ai bien compris que tu veux faire la copie de la ligne entière, quand l'IPR dépasse 100 ; MAIS entre la feuille "synthèse" et la feuille "PA", les entêtes de colonnes ne correspondent pas !

en-têtes de la feuille "synthèse" :

image 1

en-têtes de la feuille "PA" :

image 2

dès lors, il faut que tu fasses un tableau de correspondance pour chaque colonne ; exemple :

image 3

dans la colonne vide, il doit y avoir une des lettres A à H ; MAIS il y a un problème de nombre de colonnes ! comment veux-tu mettre les 18 données de la feuille "synthèse" dans les 8 colonnes de la feuille "PA" ? veux-tu mettre plusieurs données dans une seule colonne ? par exemple (F G D et I P R) en H ? faut-il ne pas copier les colonnes grises de "ETAT AMELIORE" et copier seulement les colonnes blanches (dont celles de "ETAT INITIAL") ?

bien sûr, même s'il y a 2 I P R, jai compris que c'est le 1er I P R (de "ETAT INITIAL") qui doit être testé par rapport à 100.

enfin, tu dois envoyer un fichier où il y a des données à copier, même si elles sont fictives ; on ne va pas perdre de temps à inventer et à saisir des données pour pouvoir tester si la macro fait bien le travail attendu !

à te lire pour la suite.

dhany

Bonjour ,

je remercie pour ton retour Dhany.

j'ai creé le tableau de correspondance dans le fichier , j'ai egalement rempli le fichier pour voir si le macro fonctionnait.

vous trouverez en pj le fichier rempli .

3amdec-1.zip (385.46 Ko)

Bonjour lim01,

voici ton fichier Excel .xls modifié (896 Ko) :

4amdec.zip (388.74 Ko)

le même fichier en version .xlsm (211 Ko) :

11amdec.xlsm (210.18 Ko)

* à l'ouverture du fichier, tu es sur la feuille "PA" ; tableau vide : aucune donnée sous la ligne 4

* va sur la feuille "synthèse" ; en T10, j'ai ajouté l'info "30-nov" et la cellule active est M10

* appuie sur la touche Suppr (suppression) pour effacer M10 ➯ y'a plus de couleur rouge en P10

* saisis 5 en M10IPR sur fond rouge en P10 ; et va voir en feuille "PA" : tes 3 infos ont été copiées !

* cette copie se fait quand tu saisis F, G, ou D (en colonne M, N, ou O) ET que l'IPR dépasse 100.

* la prochaine copie se fera sous la ligne qui a été copiée ; puis juste dessous encore ; etc...


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,

Une variante.

Cdlt.

8amdec-1.xlsm (273.77 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim N As Long
    N = Cells(Rows.Count, 11).End(xlUp).Row
    If Not Intersect(Target, Cells(8, 13).Resize(N - 7, 3)) Is Nothing And Target.Count = 1 Then
        If Cells(Target.Row, 16) > 100 Then
            With Worksheets("PA")
                N = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                .Cells(N, 1).Value = Cells(Target.Row, 11).Value
                .Cells(N, 2).Value = Cells(Target.Row, 19).Value
                .Cells(N, 6).Value = Cells(Target.Row, 20).Value
            End With
        End If
    End If
End Sub

Bonjour dhany ,

j'ai testé le fichier ça correspond à ce que je voulais .Merci beaucoup mec tu geres au top . c'est fort sympa.

Etant nouveau sur VBA pour mieux comprendre ton code , je pourrais juste avoir les commentaires stp ?

Jean Eric je te remercie egalement pour ton retour c'est sympa.

@lim01

tu a écrit :

j'ai testé le fichier ça correspond à ce que je voulais.

merci pour ton retour !


tu a écrit :

pour mieux comprendre ton code, je pourrais juste avoir les commentaires stp ?

oui, mais ça va être un peu long à faire, alors t'étonne pas si ça tarde.

dhany

ça marche @dhany.

je reste à l'ecoute .

Bonne soirée

j'vais essayer de te faire ça pour demain.

bonne soirée à toi aussi.

dhany

Merci beaucoup

Bonjour lim01,

voici l'explication du code VBA :

Option Explicit : oblige à déclarer toutes les variables utilisées

Private Sub Worksheet_Change(ByVal Target As Range) : sub exécutée s'il y a un changement de donnée sur la feuille

Dim lg1&, lg2&, col%, ipr& : déclaration de variables ; lg1& : idem que lg1 As Long ; col% : idem que col As Integer

With Target .. End With : Target est la cellule active

If .CountLarge > 1 Then Exit Sub : sortie s'il y a plus d'une cellule sélectionnée

lg1 = .Row: If lg1 < 8 Then Exit Sub : lg1 = n° ligne de Target ; sortie si c'est au-dessus de la ligne 8

col = .Column: If col < 13 Or col > 15 Then Exit Sub : col = n° colonne de Target ; sortie si c'est à gauche de la colonne M ou à droite de la colonne O ; rappel : c'est les colonnes de F ; G ; D ; on ne peut pas tester la colonne IPR car il y a une formule, donc on n'y fait pas de saisie : l'événement changement de donnée ne peut pas s'y produire ➯ ça oblige donc à tester F; G ; D

ipr = Cells(lg1, 13) * Cells(lg1, 14) * Cells(lg1, 15) : calcul de IPR (avec la nouvelle donnée saisie, ou sans la donnée effacée)

If ipr <= 100 Then Exit Sub : sortie si IPR <= 100 ; sinon : IPR > 100, et on continue pour copier tes 3 données

Application.ScreenUpdating = 0 : gel de l'affichage écran ➯ l'écran n'est plus mis à jour ➯ ça va plus vite

With Worksheets("PA") .. End With : avec la feuille "PA"

lg2 = .Cells(Rows.Count, 1).End(3)(2).Row : idem que lg2 = .Cells(Rows.Count, "A").End(xlUp).Row +1

lg2 = n° dernière ligne utilisée (selon la colonne A) + 1 ; c'est donc la ligne vide qui est sous la dernière ligne utilisée

.Cells(lg2, 1) = Cells(lg1, 11) : copie en col A "ACTIONS" de "Mesures mises en place" (col K - fusion KL)

.Cells(lg2, 2) = Cells(lg1, 19) : copie en col B "Personnes concernées" de "Resp" (col S)

.Cells(lg2, 6) = Cells(lg1, 20) : copie en col F "Date réalisation" de "Délai" (col T)

les .Cells (avec un point devant) sont les cellules qui dépendent du With, donc de la feuille "PA"

dhany

Bonjour,

Les explications sur la procédure événementielle modifiée.

18amdec-1.xlsm (234.48 Ko)
Option Explicit
'procédure événementielle qui se produit quand l'utilisateur modifie des cellules de la feuille de calcul
'Me correspond à la feuille active !
Private Sub Worksheet_Change(ByVal Target As Range)
'déclaration des variables
Dim lastRow As Long
    'numéro dernière ligne colonne 11 (K) de la feuille active
    lastRow = Me.Cells(Rows.Count, 11).End(xlUp).Row
    'si une cellule de la plage M8:O & lastRow est modifiée et la cellule modifiée est unique
    If Not Intersect(Target, Me.Cells(8, 13).Resize(lastRow - 7, 3)) Is Nothing And Target.Count = 1 Then
        'si la valeur de la cellule en colonne O est supérieure à 100
        If Me.Cells(Target.Row, 16) > 100 Then
            With Worksheets("PA")
                'numméro dernière ligne colonne 1 (A) de la feuille PA
                lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                'restitution des données
                .Cells(lastRow, 1).Value = Me.Cells(Target.Row, 11).Value   'Mesures mises en place (colonne K)
                .Cells(lastRow, 2).Value = Me.Cells(Target.Row, 19).Value   'Resp (colonne S)
                .Cells(lastRow, 6).Value = Me.Cells(Target.Row, 20).Value   'Délai (colonne T)
            End With
        End If
    End If
End Sub

Bonsoir lim01,

pas de retour sur mon explication de code VBA ? voir ici.

j'espère que cette longue explication détaillée ne t'ennuiera pas,

et que tu sauras en tirer tout le bénéfice.

dhany

Je te remercie encore une fois @dhany , d'avoir pris le temps de detailler ton code .

Au top .

Merci egalement a Jean Eric

lim01 a écrit :

Je te remercie encore une fois dhany, d'avoir pris le temps de détailler ton code.

Au top.

merci pour ton retour !


sauf si tu as autre chose à demander, merci de passer le sujet en résolu : clique sur à droite de (coin haut droit du post); ça permet aussi de clôturer le fil de la discussion (toi seul peut le faire, car c'est toi qui a créé ce sujet).

dhany

ça marche par contre je viens de deceler un petit probleme .

En effet , sur les colonnes" resp" et "delai" si je ne les renseigne pas avant la cotation de la G*F*D . Elles ne se copient pas sur la feuille "PA" .

y'a t'il une solution à ca ???

tu a écrit :

Ça marche, par contre je viens de déceler un petit problème.

En effet, sur les colonnes "Resp" et "Délai", si je ne les renseigne pas avant la cotation de G*F*D, elles ne se copient pas sur la feuille "PA".

??? ben c'est normal, ça ! si tu renseignes pas "Resp" et "Délai" (colonnes S et T), alors ces cellules sont vides ; et la macro copie 2 infos vides ; elle ne peut ni deviner ni inventer ce que tu n'as pas saisi, lol ! j'ai pas fait un programme d'Intelligence Artificielle, mais même avec l'IA, ça n'y arriverait pas ! peut-être avec un programme télépathe qui lirait dans tes pensées ce qu'il doit mettre pour Resp et Délai quand ils ne sont pas renseignés ? (mais j'ai pas d'ordinateur médium biologique sous la main : ça existe pas encore !)

dhany

Non je n'ai peut etre pas été clair .

en gros si je renseigne la G*F*D je valide avec la touche "entrée" ça copie la ligne " sans la colonne "resp" et "delai" qui seront vide parceque pas renseigné .

juste qu'ici c'est normal .

Toutefois quand je renseigne apres avoir valider la G*F*D la feuille "PA" ne prend pas en compte cette mis à jour . meme quand je fais actualiser tout .

Rechercher des sujets similaires à "copier coller condition feuille"