collage conditionnel?

baboucm

XLDnaute Nouveau
Bonjour à tous
j'ai une question hyper complexe...
J'explique mon problème:
j'ai un classeur excel de 5 feuilles:
feuille1=données
feuille2=accepted
feuille3=rejected
feuille4=pending
feuille5=autres

dans la feuille 1 se trouve toutes mes données que je rentre quotidiennement dans cette feuille au fil de l'évolution de mon travail.
pour votre comprehension le fichier concerne des demandes de remboursement
la colonne J de la feuille1 indique si la demande est accepted, rejected, pending ou autres

Je voudrai que en fonction de la valeur dans la colonne J de la feuille 1, si en ligne Pi (Pi signifie pour moi une ligne du tableau) le resultat est "accepted" il faut copier toute la ligne Pi dans la feuille Accepted, à la suite des lignes déjà remplies. Et de même si le résultat est "rejected" copier la ligne Pi dans la feuille rejected à la suite, idem avec pending et Autres...

jusque là je sais même pas si c'est faisable!!

une fois la ligne Pi copiée dans une des 4 feuilles elle devient la ligne que j'appelle Pi' correspondant à la ligne Pi de la feuille donnée
je voudrai que si je modifie une cellule de la ligne Pi' autre que J la modification se répercute également dans le feuille données à la ligne Pi

dernière demande:
est-ce qu'il existe une manipulation simple pour que quand je remplisse mon tableau données les lignes que je viens de remplir se copies d'un seul geste comme expliqué ci-dessus?
Et enfin si une demande en statut pending donc copiée avec un lien dans les feuilles pending ligne Pi' et feuille données ligne Pi si la demande devient accepted que se passe-t-il? où dois-je effectuer la modification de statut?

par avance je vous remercie de votre aide!!
si le père noel existe, il y a une solution a mon problème!!
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : collage conditionnel?

Bonjour Baboucm, bonjour le forum,

Un fichier exemple, basé sur ton propre fichier, contenant une poignée de données non condidentielles, même structure, onglets, étiquette, plage nommées etc... serait le bienvenu.
 
G

Guest

Guest
Re : collage conditionnel?

Bonjour,

J'avais fait un truc comme ça et que je viens de synthétisé et d'adapter à ta demande avant que tu ne joignes ton fichier.

Vois si cela te conviens.

Par contre je n'aurai pas le temps ce soir de l'adapter à ton fichier.
En le regardant d'ailleurs je me suis demandé quel était l'identifiant unique de tes lignes de données? Sans cela ça va être compliqué surtout si tu ne connais pas vba.

A+
 

baboucm

XLDnaute Nouveau
Re : collage conditionnel?

Bonjour à tous,
Je crois que j'ai pas bien compris ce qu'est l'identifiant unique et sa fonction???

Hasco,
J'ai réussit après de dur épreuves à ouvrir ton fichier! (c'est un projet pour le boulot et donc je le traite sur le pc du bureau et pour des raisons de sécurité il n'y a pas de lien possible entre le pc et systeme d'exploitation ou se trouve excel!!)enfin bref j'ai réussi
mais je comprend pas quelle manipulation as tu utilisé pour que les lignes de ta feuille source se copient sur ta feuille cible correspondant au statut selectionné?? de plus si par exemple tu modifie le statut de la ref X23 en "en cour" la modification ne s'effectue pas dans les 2 feuilles...

En ce qui concerne mes connaissances excel j'ai suivit une formation excel de 12 demi-journées mais en groupe de 15 de niveaux très différents donc c'était pas très efficace, pour tout dire on a même pas abordé les tableau croisés dynamique et on a fait qu'une seule application en VBA, cependant avant ça j'ai fait prepa math spé, et même si j'était la plus nulle de ma classe (a l'examem d'info à la fin de l'année j'ai eu 1!! par ce que c'était mon anniversaire et que l'examinateur me faisait 1 point en cadeau!! lol )j'arrive a comprendre certaines structures VBA similaires à mapple mais comme je connais pas bien le langage je sais pas les créer!
 
G

Guest

Guest
Re : collage conditionnel?

Bonjour Baboucm,

Alors nous allons aller lentement, étape par étape.

Tout d'abord un identifiant unique est une référence (numérique ou non) identifiant un élément de manière à ce qu'il y en ait pas deux ou plus identiques.

Pour ton fichier, j'ai choisi arbitrairement la colonne C. Mais on peux en choisir une autre. Le plus important étant que cette référence n'apparaisse qu'une fois dans la feuille DONNEES.

Vois si ce que j'ai fait te conviens. Change les status, repère les lignes sur les autres feuilles et dis si cela fonctionne.

Surtout ne pas supprimer ou effacer la feuille 'Variables' aui est déstinée à être cachée lorsque tout sera ok.

Tout le code VBA se trouve dans le module ThisWorkBook pour le moment.
ALT+F11 sélectionner dans l'arborescence le projet correspondant au fichier Baboucm.xls,
le développer puis localiser l'élément 'ThisWorkbook' et double-cliquer dessus.

Sinon, essaie d'être la plus précise possible dans l'énoncé de tes difficultés.

A+
 
Dernière modification par un modérateur:

baboucm

XLDnaute Nouveau
Re : collage conditionnel?

bonjour à tous,
bonjour Hasco!
wouao impressionnant!!
j'ai commencé à le tester un peu, j'ai remarqué quelques anomalies:
-dans vba il y a une erreur de frappe c'est pas acceptées mais accepted ce qui fait bugger le programme, j'ai fait la modif et ça marche

2 petits problèmes
quand pour la demande x on modifie le statut dans la feuille cible pending la modification ne s'effectue pas sur la feuille données et ne se copie pas dans la feuille rejected. exemple
une demande x pending dans la feuille cible pending deviens rejected donc dans la feuille pending à la demande x correspondante je met le statut rejected, et la (apres enregistrement fermeture et réouverture du fichier, la ligne correspondant à la demande x devrait disparaitre de la feuille pending apparaitre dans la feuille rejected et passer en statut rejected dans la feuille données.
est-ce clair?
2eme pb: si dans la feuille source ou cible on modifie une information autre que le statut par exemple la date de relance la modification ne se repercute pas.

merci beaucoup de votre aide!!!
j'espere que j'ai était assez clair!!
finit les heures sup je rentre chez moi!!
a demain
bonne soirée
 
G

Guest

Guest
Re : collage conditionnel?

Re,

Oui, pour les deux questions dont tu parles, saches que je n'ai pas traiter le problèmes donc c'est normal.

Comme je te le disais dans le post précédent, il vaut mieux procéder pas à pas. As-tu compris le fonctionnement et la démarche du truc? C'est ça l'important!

Pour le premier problème:
A mon avis, si nous faisons comme tu le désires, cela risque de devenir une usine à gaz..... Excel n'est pas un systeme de gestion de base de données. Nous pouvons nous en approcher mais au risque de perte de données et/ou d'incohérence des données.

Ce que je te propose, c'est affiner ce que nous avons déjà. La feuille DONNEES étant considérée comme tableaux de bord à partir de laquelle se font les changements. Si tu veux faire un changement de statut, fais le à partir de la feuille DONNEES.

Pour le second on peut le faire.

[EDITION]

En fait c'est réalisé pour les deux questions.
A toi de voir et contrôler si tout fonctionne correctement.
J'ai fait quelques tests et cela semble convenir.

A+
 
Dernière modification par un modérateur:

baboucm

XLDnaute Nouveau
Re : collage conditionnel?

Bonjour à tous,
Avant tout je tiens a vous remercier de votre aide (je ne trouve pas d'adjectif pour dire à quel point elle est précieuse et efficace) je vous admire et j'aimerai pouvoir moi aussi en savoir assez pour pouvoir aider d'autre personnes, mais mon niveau ne me le permet pas pour l'instant! mais peut-être qu'un jour....

Hasco, j'ai testé ton fichier en long en large et en travers, je ne trouve rien à redire!!!
c'est merveilleux
J'ai pas bien compris le fonctionnement.
(j'ai peur de paraitre stupide mais il faut passer par ce stade pour avancer alors..)
les 4 premières lignes commençants par dim : tu definis les variables mais je comprend pas bien le langage mais je devine, ça a un lien avec les données de la feuille variable, mais je vois pas la fonction de l'identifiant unique.
ensuite je comprend pas la ligne commençant pas Private Sub....mais comme toutes les procédures commencent ainsi je suppose que ça marque le début.
après je comprend jusque suppression des données
là je comprend pas la ligne If OldSheet<>"" And [NumLigne]>0 Then
ensuite dans copies des donnes dans la nouvelles feuille je comprend pas : Intersect(Range("Datas"),Target.EntireRow).Copy Destination:=.Range("A"& x Row)
et pourquoi Application.EnableEvents=True ???
après tout le reste est un peu flou mais pas chinois, je comprend bien à quoi servent les fonctions (en même si je comprend à quoi ça sert c'est par ce que tu l'as bien expliqué!!) mais je suis incapable de les utiliser, et j'ai comme l'impression que c'est ce que je vais devoir modifier pour adapter la macro à mon fichier original.
en effet dans mon fichier original l'identifiant unique est en colonne D et le statut en colonne K j'ai également rajouté 3 colonnes mais comme il n'y a pas de matrices de définie je pense que le fait de rajouter des colonnes ne pose pas de problème.
La question est donc quels éléments précis de la macro dois-je modifier pour l'adapter à mon fichier original?

A cela s'ajoute quelques questions simples (je pense)
est-il possible que la macro ne reproduise pas la mise en forme conditionelle sur les feuilles cibles car je compte en appliquer une autre pour chaque feuille cible?
Je compte également faire des tris par filtres auto une fois la macro finit mais je pense que ça ne pose pas de problèmes.

Après question subsidiaire, est-il possible de faire des sommes de cellules sur des MFC? je m'explique par exemple dans la feuille pending je vais faire une MFC qui met en bleu des demandes qui ont moins de 30jours et en rouge celle qui ont plus de 30 jours et je voudrai pouvoir calculer la somme des cellules en rouge et la somme des cellules en bleu. est-ce que c'est possible? ( ça serait pratique si c'est possible car pour la feuille accepted il y a 3 critères, les mêmes que la MFC que je vais utiliser!)
ne trouvant pas de réponse j'ai essayé des somme.si et sommeprod sans succes , je comprend pas pourquoi par exemple dans pending pour ton dernier fichier j'ai fait
=somme.si(I2:I6;"<(AUJOURDHUI()-30)";H2:H6) et ça me donne 0.
je me suis aidée du site de boisgontier mais j'arrive pas a faire marcher tout ça.

En tout cas je t'adresse vraiment un grand merci pour tout ce que tu fait et toutes mes félicitations!!
bonne soirée
et encore merci à vous tous
 
G

Guest

Guest
Re : collage conditionnel?

Bonsoir à toi Babou,

Que de questions!;)

Code:
Dim oldSheet As String  'Ancienne feuille dans laquelle se trouvait la ligne copiée
Dim newSheet As String  'Feuille dans laquelle copier la ligne
Dim LeStatut As String  'Statuts en cours de changement
Dim xRow As Long        'Numéro de ligne

Ce sont les déclarations des variables qui vont servir
String -> Chaine de caractère
Long -> Entier Long


Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 
End Sub

Il s'agit d'un évènement générer par excel lorsqu'une cellule du classeur a changé de valeur.
Paramètres:
Sh en l'occurence est une variable objet pointant la feuille dans laquelle la cellule a changé. Target est une variable objet pointant vers la cellule changée

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Evènement généré en l'occurence, par Excel lorsque qu'on sélectionne une ou plusieures cellules ou plages de cellules.
Paramètres Idem que SheetChange

Code:
Intersect(Range("Datas"), Target)
Renvoi une variable objet pointant vers l'intersection des deux plages de cellules Datas, et Target. Cette dernière est la cellule sélectionnée.
'Datas' est un nom de plage définit dans menu Insertion/Nom/Définir (tu connais je crois) 'Datas' s'adapte aux nouvelle ligne ajoutées ou supprimées.

donc

Code:
If Not Intersect(Range("Datas"), Target) Is Nothing Then
Si l'intersection de la cellule selectionnée avec notre plage Datas ne renvoie pas rien (littéralement) on met la valeur de la colonne C (que j'ai pris comme référence) de la ligne sélectionnée dans la cellule nommée 'RefEnCours' (B3) de la feuille variable.

A partir de là les formules de la feuille variables vont chercher dans les autres feuilles si la référence existe en colonne C si oui la formule renvoie le nom de la feuille idoine si non la formule renvoie "".

Ce résultat est renvoyé dans la cellule nommée 'NomFeuille' (B4) de la feuille variables.

Sous cette cellule tu as une autre cellule (B5) nommée 'NumLigne' renvoie le numéro de la ligne sur laquelle se trouve la référence 'RefEnCours' (B3) dans la feuille 'NomFeuille' (B4).

'Statuts' est également une plage nommée de la feuille 'DONNEES' et correspondant à la colonne J. Elle est nommée dans insertion/nom/définir et sa formule est =Datas DONNEES!$J:$J (avec l'espace).

Si dans ton fichier final c'est la colonne K qui contient le statut tu n'auras qu'à changé le $J:$J par $K:$K.

Reprenons la démarche.
1 Tu sélectionnes une cellule quelconque de Datas (feuille Données) Excel génère l'évènement SelectionChange pour cette feuille. On l'intercepte et on met la référence dans la cellule 'RefEnCours'. Excel effectue les calculs sus-dits.

Tu changes le statut, excel génère l'évènement Change pour la feuille et la cellule. Nous interceptons ce changement et récupérons dans la variable oldSheet le nom de la feuille où se trouve également la ligne en cours. Suivant le nouveau Statut nous retournons le nom de la nouvelle feuille dans laquelle il va falloir coller les données.

Après ce sont des tests pour savoir si oldsheet et newSheet ne sont pas les même ou si newSheet ou oldSheet ne sont pas vide "".

Bon pour le moment je m'arrête là. dis moi si c'est un peu plus clair ou pas avant d'avancer plus loin.

A+
 

baboucm

XLDnaute Nouveau
Re : collage conditionnel?

Bonjour à tous!
Lundi matin, après un week-end difficile je vais predre mon ami excel à bras le corps!
je comprend un peu mieux la procèdure, j'aurais certainement encore besoin d'aide pour l'adapter à mon fichier original (en effet quand on débute ça marche jamais du premier coup et on comprend pas pourquoi!) Avant cela, est-ce qu'il y a encore des choses à modifier dans la procédure avant que je l'adapte?? Par exemple est-ce qu'il faut faire quelque chose dans la macro pour quelle ne reproduise pas la MFC de la feuille données??
 

baboucm

XLDnaute Nouveau
Re : collage conditionnel?

ReBonjour!
J'ai essayé d'adapter la macro à mon fichier, et évidement ça marche pas (c'est normal excel n'as pas de jambes lol :))
en fait ça à l'air de fonctionner sauf que je ne peux plus utiliser la fonction ctrl+f pour rechercher mon identifiant unique!! il me dit qu'excel ne le trouve pas alors qu'il est sous mes yeux!!!
et 2e problème il me copie la MFC sur les feuilles cibles en ecrasant celle déjà présente.
Je vais continuer à tester mon fichier pour voir si il n'y a pas d'autres bug.
Pour l'adapter j'ai changé les caractères en gras:
Case "ACCEPTED", "PENDING", "REJECTED", "AUTRE"
Dim d As Range
[RefEnCours] = Sh.Cells(Target.Row, 4)
Set d = Range("References").Find(what:=Sh.Cells(Target.Row, 4), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
If Not d Is Nothing Then
Sheets("DONNEES").Cells(d.Row, Target.Column) = Target
End If
End Select

ensuite dans la feuille variable case NomFeuille
=SI(RefEnCours<>"";SI(NB.SI(ACCEPTED!D:D;RefEnCours)>0;"ACCEPTED";SI(NB.SI(PENDING!$D:$D;RefEnCours)>0;"PENDING";SI(NB.SI(REJECTED!$D:$D;RefEnCours);"REJECTED";SI(NB.SI(AUTRES!$D:$D;RefEnCours)>0;"AUTRES";""))));"")
ensuite feuille variable case NumLigne :
=SI(NomFeuille<>"";EQUIV(RefEnCours;INDIRECT(NomFeuille & "!D:D");0);0)
Ensuite dans insertion, nom, definir j'ai changé
References=Datas DONNEES!$D:$D
et ensuite
Status=Datas DONNEES!$K:$K

voila je crois que j'ai rien oublié

Dans l'attente de vos réponses à mes problèmes, je vous renouvelle mes remerciements...
 

baboucm

XLDnaute Nouveau
Re : collage conditionnel?

Bonjour le forum, bonjour Hasco,
J'ai passer la journée à checher des solutions sur ce forum et sur internet je n'ai rien trouvé!!
Je ne comprend toujours pas pourquoi quand je change le statut d'un identifiant unique xxxxxxxx, quand le fait controle+f xxxxxxxx "excel ne trouve pas les données que vous cherchez" ni dans la feuille cible ni dans la feuille données! c'est important que je comprenne cette erreur car elle peut me causer des problèmes, il faut que je comprenne comment l'éviter!!
et dernier problème, je ne sais pas comment faire pour que la macro ne copie pas les MFC de la feuille source car j'ai une differente a appliquer à chaque feuille cible!!!
pour le reste j'ai trouvé j'ai enfin compris la structure de sommeprod ce qui m'évite de faire une somme de cellules ayant une MFC.
J'espère que quelqu'un pourra m'aider car il faut que je finisse ça cette semaine!!
merci de votre aide
 
G

Guest

Guest
Re : collage conditionnel?

Bonjour Babou,

Pour la copie des valeurs uniquement (sans format du tout)

remplacer les lignes idoines par celles ci-dessous
Ce qui a changé est en rouge:
Code:
'-----------------------------------------------------------------------------
                '               COPIES DES DONNEES DANS LA NOUVELLE FEUILLE
                '-----------------------------------------------------------------------------
                With Sheets(newSheet)
                    'Récupérer le numéro de la prochaine ligne vide dans la
                    'nouvelle feuille
                    xRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
                    'Désactiver la gestion des évènement pour éviter
                    'les appels en boucle
                    Application.EnableEvents = False
                    'Copie des données dans la nouvelle feuille
                    [COLOR=red]Intersect(Range("Datas"), Target.EntireRow).Copy
                    .Range("A" & xRow).PasteSpecial xlPasteValues
[/COLOR]                    Application.CutCopyMode = False
                    Application.EnableEvents = True
                End With

Pour ce qui est du Contrôle+F.

dans l'évènement 'Workbook_SheetChange' tu as une ligne (en bas) :

Code:
Set c = Range("References").Find(what:=Sh.Cells(Target.Row, 3), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)

Cette ligne recherche la référence dans la colonne nommée "Reference".
Cette procedures modifie la valeur de certains paramètres de la boîte de dialogue de recherche (quand tu fais CTRL+F).

Ces paramètres sont LookIn, LookAt, SearchOrder.

Lookin= dans quoi chercher Valeur ou Formules
Lookat= Dans la cellule entière ou non
SearchOrder=Dans quel sens? Par ligne ou par colonne.

Dans la ligne VBA donnée plus haut ils sont paramétrer pour
chercher dans les valeurs, sur la totalité de la cellule, et par ligne.
Il est important de les laissés ainsi dans le code car sinon, c'est par VBA que la recherche risque de ne plus fonctionner.

Par contre pour les recherches par CTRL+F, il faut que tu rétablisses les paramètres que tu désires manuellement. En Cliquant sur le bouton Options de la boîte de dialogues.

A+
 

baboucm

XLDnaute Nouveau
Re : collage conditionnel?

Bonjour Hasco,
merci beaucoup pour ton aide, j'ai effectué les modifications ça a l'air de marcher, mais je testerai ça plus en profondeur demain.
En décochant dans la boite de dialogue "totalité du contenu de la cellule le controle f fonctionne correctement.
en tout cas merci infiniment pour tout et bonne soirée!
je reviens demain pour dire si tout est ok
 

Discussions similaires

Réponses
9
Affichages
493
Réponses
25
Affichages
767
Réponses
7
Affichages
403

Statistiques des forums

Discussions
312 482
Messages
2 088 765
Membres
103 954
dernier inscrit
SirJah