XL 2013 Echange de données entre 2 feuilles

Izydore

XLDnaute Nouveau
Bonjour,

J'ai un tableau Feuil 1 dont les données s'étendent de B12:U984.

Sur la feuil2 je souhaite copier vers la feuil1 certaines cellules d’une ligne (colonne E et H) si je mets OUI dans la colonne I vers la feuil1 (colonne I et J) uniquement entre les lignes 864 et 984 sur la première ligne vide de la colonne I et renvoyer la valeur de la cellule colonne B feuil1 vers la colonne J feuil 2 de la ligne qui vient d’être copiée.

Mon code copie les cellules pas au bon endroit et je n’arrive pas à récupérer la valeur de la colonne B Feuil1 vers colonne J Feuil2.

Ci-joint un fichier exemple avec une explication sur la feuille 2

Merci pour votre aide
 

Pièces jointes

  • Classeur2TEST.xlsm
    129.5 KB · Affichages: 5
Solution
Re,
En PJ un essai.
On dispose déjà de toutes les infos, donc c'est simple.
NB : J'ai rajouté une sécurité, car si un bug se produit alors le flag Application.EnableEvents reste à False et on ne pleut plus accéder à la macro.

Et d'ailleurs RechercheV ne marcherait pas car il faudrait que N°Tache soit à droite du critère cherché. Il faudrait utiliser dans ce cas Index Equiv. Mais une ligne de VBA est quand même plus "élégant".:)

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Izodore,
un essai en PJ, j'ai un peu remanié votre macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("I3:I65535")) Is Nothing Then
    If Target.Value = "OUI" Then
        With Sheets("Feuil1")
            ligvide = .Range("I863:I65535").End(xlDown).Row + 1
            .Cells(ligvide, 10) = Cells(Target.Row, 5)  ' Copie valeur colonne E
            .Cells(ligvide, 9) = Cells(Target.Row, 8)   ' Copie valeur colonne H
            .Cells(ligvide, 4).Value = Format(Date, "mm/dd/yyyy")
        End With
    End If
End If
End Sub
 

Pièces jointes

  • Classeur2TEST.xlsm
    134.4 KB · Affichages: 8

Izydore

XLDnaute Nouveau
Bonjour sylvanu,
J'ai essayé la modification, mais si je supprime les données de la feuille 1 (ligne 864) , j'ai une erreur d'exécution 1004.
Il n'y a pas le retour d'information de la cellule D feuille 1 vers la feuille 2 colonne J.
merci
 

Izydore

XLDnaute Nouveau
La ligne 864 étant occupée, je l'ai considéré comme telle.
Remplacez la ligne 5 par :
VB:
ligvide = 864 + Application.CountIf(.Range("I864:I65535"), "*")
cela suppose qu'il n'y a pas de lignes vides entre les lignes remplies.
J'ai testé le code, c'est bon si je n'ai pas de ligne vide sur la feuille 1, sinon la copie se fait toujours sur la même ligne. Le problème c'est que mon tableau de la feuille 1 varie une fois par mois, toutes les lignes de travaux effectués sont supprimées. la solution n'est pas simple.
 

Izydore

XLDnaute Nouveau
J'ai testé le code, c'est bon si je n'ai pas de ligne vide sur la feuille 1, sinon la copie se fait toujours sur la même ligne. Le problème c'est que mon tableau de la feuille 1 varie une fois par mois, toutes les lignes de travaux effectués sont supprimées. la solution n'est pas simple.
Bonjour Sylvanu,
Je me suis peut être mal expliqué : sur la feuille 1 je suis à même d'effacer des lignes copiées. Lorsqu'il y a une ligne vide entre 2 lignes, le code remplace la dernière ligne écrite. Il faudrait pouvoir rechercher les lignes vides entre les lignes.
Dans l'exemple ci joint, la ligne 865 est vide et (864 et 866 remplie). A chaque fois que je vais mettre oui la ligne 866 sera écraser par la nouvelle.
J'ai modifier le début du code pour la recherche de la conditions "OUI" car cela me générer une erreur dans une autre macro.
Ci joint le fichier
 

Pièces jointes

  • Classeur2TEST (2).xlsm
    131.3 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Izodore,
J'avais vraiment pas compris que vous effaciez des lignes dans feuil1.
En PJ un essai.
En fait je part simplement de la ligne 864 jusqu'à 984 et je cherche la première cellule J vide.
 

Pièces jointes

  • Classeur2TEST (2) (2).xlsm
    135.6 KB · Affichages: 2

Izydore

XLDnaute Nouveau
Bonjour Izodore,
J'avais vraiment pas compris que vous effaciez des lignes dans feuil1.
En PJ un essai.
En fait je part simplement de la ligne 864 jusqu'à 984 et je cherche la première cellule J vide.
Merci,
Le premier point de ma demande fonctionne.
Pour le second, dois je faire un autre poste ou pouvons continuer.
Explication :
Dans l'exemple : Si je mets I6 (feuil2)=OUI cela copie la ligne dans la feuille 1 (exemple 864).
Alors il faut récupérer la valeur de la cellule B864 feuille 1 et la copier dans la cellule J6 feuille 2.
j'ai mis en surbrillance vert l'échange d'information.
Sinon je peux faire un rechercheV ?
Merci
 

Pièces jointes

  • Classeur2TEST (2) (2).xlsm
    129.3 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En PJ un essai.
On dispose déjà de toutes les infos, donc c'est simple.
NB : J'ai rajouté une sécurité, car si un bug se produit alors le flag Application.EnableEvents reste à False et on ne pleut plus accéder à la macro.

Et d'ailleurs RechercheV ne marcherait pas car il faudrait que N°Tache soit à droite du critère cherché. Il faudrait utiliser dans ce cas Index Equiv. Mais une ligne de VBA est quand même plus "élégant".:)
 

Pièces jointes

  • Classeur2TEST (V3).xlsm
    134.5 KB · Affichages: 5

Izydore

XLDnaute Nouveau
Re,
En PJ un essai.
On dispose déjà de toutes les infos, donc c'est simple.
NB : J'ai rajouté une sécurité, car si un bug se produit alors le flag Application.EnableEvents reste à False et on ne pleut plus accéder à la macro.

Et d'ailleurs RechercheV ne marcherait pas car il faudrait que N°Tache soit à droite du critère cherché. Il faudrait utiliser dans ce cas Index Equiv. Mais une ligne de VBA est quand même plus "élégant".:)
En effet depuis ce matin je cherchais une solution avec rechercheV mais en vain.
Merci beaucoup pour ton aide.
 

Discussions similaires

Réponses
7
Affichages
343

Statistiques des forums

Discussions
312 169
Messages
2 085 929
Membres
103 047
dernier inscrit
Duuubee