Copier coller selon valeurs

Bonjour à toute la communauté,

Je suis bloqué sur une question de copier/coller en VBA et me demande d'ailleurs si ce que je souhaite n'est pas trop complexe à mettre en place.

Je vous expose le cas:

J'ai une feuille que nous appellerons Feuille 1 qui contient une quinzaine de colonnes de références. Je souhaite copier coller dans une Feuille 2 les références des cellules des colonnes (A;D;I;N) seulement si les valeurs de la cellule de la même ligne de référence d'une cinquième colonne (O) affiche OK (au lieu de KO).

J'ai bien un code me permettant d'exécuter le copier coller sans aucun soucis mais pas le code permettant de le faire selon la valeur de la cellule.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Feuil1.Range("A:A,D:D, I:I,N:N").Copy Feuil2.Cells(1, 1)

End Sub

Ce code fonctionne tant que je suis sur un plaquage bête et méchant de mes données. Je pense comprendre qu'il faut demander d'analyser sur le nombre de lignes du tableau le nombre de cellule de la colonne O avec la valeur OK pour coller les références des 4 autres mais suis incapable de voir comment l'écrire clairement.

Merci déjà d'avance pour le temps passé à réfléchir à ce sujet et pour celles et ceux qui prendront le temps de me répondre.

Bernard

Bonjour BernardDRANEB,

Est ce que tu as pensé à aller dans la direction de faire un filtre sur les "OK", puis faire une sélection des cellules visibles seulement pour tes colonnes A, D, I, N, puis de les coller sur ton autre feuille ?

Ou sinon tu peux faire une boucle sur chacune des lignes qui testera si dans ta colonne "O" tu as "OK" et ainsi tu pourras faire le copier coller

N'hésite pas si besoin ;

Baroute78

Bonjour BAROUTE78,

Merci, ça pourrait être une solution mais je ne souhaite pas que les utilisateurs aient à filtrer eux mêmes l'information en amont. Sinon ça marche très bien en effet.

BernardDRANEB,

Désolé je n'ai pas été très clair dans mon explication, le filtre se ferait par vba directement et serait complètement transparent pour l'utilisateur. Aurais-tu un fichier exemple sur lequel je pourrai m'appuyer ?

Désolé BAROUTE78,

Malheureusement, je ne vais pas être en mesure d'envoyer un fichier d'exemple désolé

Quelles informations souhaitent tu avoir pour m'aiguiller?

Je te fais un exemple des deux méthodes qui ont été proposées et reviens vers toi

Hello,

Du coup je t'ai fait une méthode, l'autre était un peu plus longue à mettre en place et celle ci fonctionne bien

Dis moi ce que t'en penses

6methode.xlsm (20.09 Ko)

Peut être celui ci sera plus adapté au niveau du code

6methode.xlsm (21.01 Ko)

Merci d'avoir pris le temps.

Sur tes deux fichiers cela fonctionne effectivement. J'ai donc essayé de les transposer à mon fichier. Cela fonctionne mais en ne m'affichant que les intitulés de mes colonnes.

Je regarde dans ton code pour comprendre ce que je n'ai pas bien appliqué.

Tu peux m'envoyer juste une capture du code si jamais

A vrai dire, j'ai uniquement changé les colonnes pour l'instant:

Sheets(Feuille1).Range(""A:A,D:D, I:I,N:N").Select

Je ne comprends pas dans ton code où tu vas chercher la valeur dans la colonne O

D'autre part, je suis allé jouer dans ton tableur et je remarque que si je rajoute x lignes, le code ne reprend pas les nouvelles lignes. Je cherche à savoir comment tu as défini le périmètre d'action (attention je débute pas mal même si je comprends vite ^^). J'y vais à tâtons.

Hey en effet il y avait une petite coquille dans le code qui faisait planter la macro

Du coup je t'ai corrigé ça.

Pour ce qui est du "OK" je le récupère dans cette ligne qui fait un filtre sur les valeur "OK" directement :

Range("$" & Chr(65) & "$2:$" & Chr(64 + Nombre_Colonne) & "$" & Nb_Ligne_Feuille1).AutoFilter Field:=Nombre_Colonne, Criteria1:="OK"

Pour le périmètre d'action j'utilise cette variable qui détermine le nombre de ligne de ta base :

Nb_Ligne_Feuille1 = Sheets(Feuille1).Range("A" & Rows.Count).End(xlUp).Row

N'hésite pas si t'as encore besoin

10methode.xlsm (21.47 Ko)

Merci beaucoup BAROUTE78 pour ton temps et tes conseils qui m'aident dans la réflexion que je dois mener pour résoudre mon problème initial ^^.

Je décortique encore ton code pour le comprendre (c'est comme ça que l'on apprend).

Sinon, j'ai essayé avec l'enregistreur de macro pour voir quel code en sortait et en substance cela donne cela (j'ai changé l'ordre de mes colonnes qui deviennent A,B,C,F, la colonne O restant identique):

Sub Macro1()
'
' Macro1 Macro
'
    ActiveSheet.Range("$O$1:$O$3124").AutoFilter Field:=1, Criteria1:="OK"
    Columns("A:C").Select
    Range("A:C,F:F").Select
    Range("F1").Activate
    Selection.Copy
    Sheets("Feuille 2").Select
    Range("A1").Select
    ActiveSheet.Paste
End Sub

Bonne journée

Rechercher des sujets similaires à "copier coller valeurs"