Copie de ligne d'une feuille à une autre avec condition
Bonjour,
Je viens sur le forum par un petit problème.
Je suis pas doué sur la macro, j'en ai jamais fait, mais je ne trouve pas de solution intéressante avec les formules:
Je cherche à copier une ligne dans d'une feuille à une autre en automatique avec une condition.
J'ai une feuille qui sera remplit au fur et à mesure (feuill1)
Puis j'ai les feuille suivantes qui doivent récupérer les données si elles sont concernées (1 feuille par ligne).
Dans mon fichier, j'ai des noms (sécurité, caisse, ...)
Les colonnes "Secteur" et " Rayon" sont les éléments qui me permettent de classer les évênements dans les feuilles correspondants.
Je vous laisse regarder mon début... les images parlent plus que les mots.
Je cherche à copier une ligne d'une feuille à une autre avec une condition (feuille "Sécurité" lorsque rayon="Sécurité", fauille "EM" si Secteur "EM", ...)
Merci de votre aide.
Edouard
Bonjour
En adaptant le Code donné par Yvouille (et heureusement pour moi, bien documenté) sur un des sujets se trouvant sous ton post
aprés insertion en A1 de chaque Feuille (Sauf "Incivilté Client") de la formule
=DROITE(CELLULE("nomfichier";$A$1);NBCAR(CELLULE("nomfichier";$A$1))-TROUVE("]";CELLULE("nomfichier";$A$1)))Code dans ThisWorkBook
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
' Ce code est lancé après qu'une feuille quelconque ait été activée
Dim i As Integer, j As Integer
Application.ScreenUpdating = False
If Range("A1") = "Sécurité" Or Range("A1") = "Caisse" Or Range("A1") = "Vendeurs" Or Range("A1") = "ELS" Then
' Si la cellule A1 de la feuille sélectionnée comporte l'une de ces abréviations, alors ...
' (Sinon il ne se passe rien et le code s'arrête là)
Range("A15:J200").ClearContents
' ... on vide le contenu des lignes 15 à 200 de la feuille sélectionnée et ...
With Sheets("Incivilité Client")
' With / End With permet de travailler sur deux feuilles en parallèle
' Ci-dessous, les reférences avec un point devant concerne la feuille
' indiquée ci-dessus, les références sans point celles de la feuille sélectionnée
For i = 3 To .Range("A200").End(xlUp).Row
' Permet de passer en revue toutes les lignes de la feuille "Planning général jusqu'à ligne 200"
If .Range("E" & i) = Range("A1") Then
' Si la cellule de la colonne E de la ligne passée en revue de la feuille "Planning général"
' correspond à la cellule A1 de la feuille sélectionnée alors .......
j = Range("A200").End(xlUp).Row + 1
' On cherche à chaque fois quelle est la première ligne vide de la feuille sélectionnée ...
.Range("A" & i & ":J" & i).Copy Destination:=Range("A" & j)
' ... et on copie la ligne concernée de la feuille "Planning général"
' pour la coller après la dernière ligne de la feuille sélectionnée
End If
Next i
End With
End If
End SubCordialement
Bonjour Amadeus,
un super résultat tout comme je le souhaitais!!!
J'ai plus qu'a comprendre la partie de macro que tu as ajouté.
Merci beaucoup pour ton aide.
Edouard
Bonjour
Petite remarque
Le premier fichier joint faisait 5,7 Mo (et est passé quand même. Je trouvais le temps bien long...). Je l'ai donc remplacé par celui-ci (moind de 100 Ko)
J'espére que tu n'as pas chargé le premier!!
Cordialement
Bonjour Amadéus,
j'ai ouvert le premier fichier pour voir un peu, je suis curieux...
Merci beaucoup pour les explications, je vais regardé cela au calme pour déchiffrer la macro.
J'ai un léger problème, il me copie à chaque fois toute la ligne et pas uniquement le tableau colonne A à J...
Je ne peux pas déplacer les cellules nommées dans une autre feuille car cela ne marche pas...
En remplicant les lignes, je remarque qu'il m'inscrit plusieurs fois la même ligne, un léger problème de redondance que je m'explique pas.
Merci encore pour ton aide précieuse!!!
Edouard
Bonjour
J'ai mis tes listes sur une autre Feuille.
J'ai changé ta formule de validation en colonne E
Sur toutes les Feuilles, (sauf "Incivilité Client"), la ligne de titre doit être la même; sur ce fichier la ligne 14.
Teste et dis moi...
cordialement
Bonjour,
ok pour moi, cela fonctionne et je n'ai plus la redondance.
Super.
Pour commencer les autres feuilles à la ligne 2 je dois modifier cela:
Range("A15:J200").ClearContents
' ... on vide le contenu des lignes 15 à 200 de la feuille sélectionnée et ...
En:
Range("A2:J200").ClearContents
' ... on vide le contenu des lignes 15 à 200 de la feuille sélectionnée et ...
Comme cela je simplifie la mise en page et je diminue le poids du fichier.
Merci pour ton aide.
Edouard