Macro pour ramener éléments d'un fichier selon conditions

[Résolu/Fermé]
Signaler
-
Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
-
Bonjour,

Je recherche une solution (macro) afin de ramener différants éléments d'n fichier source (actualisé quatidiennement) vers un autre fichier selon plusieures conditions.

Afin d'être plus claire, je joins les deux fichiers (source et destination) ci-dessous.

Les besoins sont les suivants :

1/si n° COMPTE de DESTINATION existe dans SOURCE et libellé GN = Matière ou autres charges externes ramener "résultat cumulé" dans colonne 1

2/si n° COMPTE de DESTINATION existe dans SOURCE et libellé GN =tous les autres, ramener "résultat cumulé" dans colonne 2

3/si n° COMPTE de TAB n'existe pas dans SOURCE => insérer ligne dans TBD est ramener N°compte et résultas cumulés dans colonne correspondante

http://cjoint.com/?3AFjt2mBF2Z
http://cjoint.com/?3AFjuC3q4ny

J'ai bien tenté les recherchev mais popur les conditions si ça se complique !!!

D'avance merci à ceux qui voudront bien s'intéresser à mon problème ; je me tire les cheveux depuis deux jours et ne trouve pas la solution...

56 réponses

Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
La dernière du soir, j'ai l'impression que pour les données de [source gisor.xls] à reprendre dans [resultat destination] la fonction (Recherchev) est inutile car vous copier toute les lignes donc il suffit de copier colonne par colonne sur la bonne position ...
Qu'en pensez-vous ... ?

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42584 internautes nous ont dit merci ce mois-ci

Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
La proposition promise : https://www.cjoint.com/?3Bpu2AhMA9e
Vous ouvrez les 4 classeurs (rien de plus) et déclencher la procédure avec le bouton.
Bonne découverte.

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42584 internautes nous ont dit merci ce mois-ci

Messages postés
117
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
17 mars 2014
11
Bonjour,

il y a fonction somme si avec des condition pas necessairement dans la plage de séléction:
source:https://support.microsoft.com/fr-fr/office/somme-si-somme-si-fonction-169b8c99-c05c-4483-a712-1697a653039b?ocmsassetid=hp010342932&correlationid=386ae01e-7953-4a67-abaf-e22e0bc58b55&ui=fr-fr&rs=fr-fr&ad=fr

SOMME.SI, fonction
Afficher toutAfficher tout

Cet article décrit la syntaxe de la formule et l'utilisation de la fonction SOMME.SI dans Microsoft Excel.
Description

La fonction SOMME.SI permet de calculer la somme des valeurs d'une plage qui répond au critère spécifié. Par exemple, supposons que dans une colonne contenant des nombres, vous vouliez uniquement calculer la somme des valeurs supérieures à 5. Vous pouvez utiliser la formule suivante :

=SOMME.SI(B2:B25;">5")

Dans cet exemple, le critère est appliqué aux valeurs calculées. Si vous le souhaitez, vous pouvez appliquer le critère à une plage et calculer les valeurs dans une autre plage. Par exemple, la formule =SOMME.SI(B2:B5;"Jean";C2:C5) calcule uniquement la somme des valeurs de la plage C2:C5, dans laquelle les cellules correspondantes de la plage B2:B5 contiennent le mot « Jean ».

Remarque Pour calculer la somme de cellules en fonction de plusieurs critères, voir Fonction SOMME.SI.ENS.
Syntaxe

SOMME.SI(plage;critère;[somme_plage])

La syntaxe de la fonction SOMME.SI comporte les arguments suivants :

plage Obligatoire. Plage de cellules à calculer en fonction du critère. Les cellules de chaque plage doivent être des nombres ou des noms, des matrices ou des références contenant des nombres. Les valeurs vides ou textuelles ne sont pas prises en compte.
critère Obligatoire. critère, exprimé sous forme de nombre, d'expression, de référence de cellule, de texte ou de fonction qui définit les cellules à ajouter. Par exemple, l'argument critère peut être exprimé sous l'une des formes suivantes : 32, ">32", B5, 32, "32", "pommes" ou AUJOURDHUI().

Important Tous les critères textuels et tous les critères qui contiennent des symboles mathématiques ou logiques doivent être placés entre guillemets ("). En revanche, les guillemets ne sont pas nécessaires pour les critères numériques.

plage_somme Facultatif. Cellules réelles à ajouter, si vous voulez ajouter d'autres cellules que celles qui sont spécifiées dans l'argument plage. Si l'argument plage_somme est omis, Excel ajoute les cellules spécifiées dans l'argument plage (les cellules auxquelles s'applique le critère).

Remarques

Vous pouvez utiliser les caractères génériques point d'interrogation (?) et astérisque (*) dans l'argument critère. Le point d'interrogation correspond à un caractère quelconque et l'astérisque correspond à une séquence de caractères quelconque. Pour rechercher réellement un point d'interrogation ou un astérisque, tapez un tilde (~) devant ce caractère.

Remarque

La fonction SOMME.SI renvoie des résultats incorrects lorsque vous l'utilisez pour mettre en correspondance des chaînes comportant plus de 255 caractères avec la chaîne #VALEUR!.
L'argument plage_somme ne doit pas nécessairement avoir la même taille et la même forme que l'argument plage. Les cellules effectivement additionnées sont déterminées en utilisant la cellule supérieure gauche de l'argument plage_somme comme cellule de début, puis en incluant les cellules dont la taille et la forme correspondent à l'argument plage. Par exemple :
Merci pour tous ces éléments mais la fonction somme si ne m'est pas utile, je parlais de la fonction SI pour plusieurs conditions => j'ai trouvé la solution en utilisant loa fonction OU.

Le vrai problème que je rencontre est de ramener le résult cumulé dans la bonne colonne en fonction du N° de compte...

A +
Bonjour,

J'ai un pEu avancé avec les recherchesv mais c'est très lourd, je pense qu'il doit y avoir beaucoup plus simple, quelqu'un pourrait-il m'aider svp ???
Voilà la macro à ce jour :
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Columns("G:G").Select
Selection.Copy
Columns("A:A").Select
ActiveSheet.Paste
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("source ep.xls").Activate
Windows("resultats destnation.xls").Activate
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 16
ActiveWindow.ScrollColumn = 27
ActiveWindow.ScrollColumn = 28
ActiveWindow.ScrollColumn = 29
ActiveWindow.ScrollColumn = 33
ActiveWindow.ScrollColumn = 34
ActiveWindow.ScrollColumn = 35
ActiveWindow.ScrollColumn = 34
ActiveWindow.ScrollColumn = 33
ActiveWindow.ScrollColumn = 32
ActiveWindow.ScrollColumn = 28
ActiveWindow.ScrollColumn = 27
Range("AQ14").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(C[-42],'[source ep.xls]Feuil1'!R1:R65536,1,FALSE)"
Selection.AutoFill Destination:=Range("AQ14:AQ125"), Type:=xlFillDefault
Range("AQ14:AQ125").Select
ActiveWindow.SmallScroll Down:=-84
Range("AR14").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(C[-43],'[source ep.xls]Feuil1'!R1:R65536,17,FALSE)"
Selection.AutoFill Destination:=Range("AR14:AR125"), Type:=xlFillDefault
Range("AR14:AR125").Select
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 15
ActiveWindow.ScrollColumn = 17
ActiveWindow.SmallScroll Down:=-75
Range("AS14").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(C[-44],'[source ep.xls]Feuil1'!R1:R65536,6,FALSE)"
Selection.AutoFill Destination:=Range("AS14:AS125"), Type:=xlFillDefault
Range("AS14:AS125").Select
ActiveWindow.SmallScroll Down:=-42
Range("AU14").Select
ActiveCell.FormulaR1C1 = _
"=OR(RC[-2]=""matières"",RC[-2]=""autres charges externes"")"
Selection.AutoFill Destination:=Range("AU14:AU125"), Type:=xlFillDefault
Range("AU14:AU125").Select
ActiveWindow.SmallScroll Down:=-66
Range("AF15").Select
ActiveCell.FormulaR1C1 = "=IF(R[-1]C[15]=TRUE,R[-1]C[12],0)"
Selection.AutoFill Destination:=Range("AF15:AF54"), Type:=xlFillDefault
Range("AF15:AF54").Select
Selection.AutoFill Destination:=Range("AF15:AF124"), Type:=xlFillDefault
Range("AF15:AF124").Select
ActiveWindow.SmallScroll Down:=-60
Range("AG15").Select
ActiveCell.FormulaR1C1 = "=IF(R[-1]C[14]=FALSE,RC[11],0)"
Range("AG15").Select
Selection.AutoFill Destination:=Range("AG15:AG125"), Type:=xlFillDefault
Range("AG15:AG125").Select
ActiveWindow.SmallScroll Down:=-75
End Sub

Par ailleurs, je viens de m'apercevoir que l'on pouvait voter, est-il possible de le faire une fois la question résolue afin de remercier ceux qui m'ont déjà aidé?
Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
Je vais regarder ce qu'il est possible de faire.

Avec quelques valeurs dans les 2 fichiers (correspondent à l'explication) ce serait plus facile de vous comprendre et vous donner une solution... !

Salutations.
Le Pingou
Merci de vous préoccuper de mon problème.

En fait ma macro fonctionne ( pour les point 1 et 2 suivants) mais je pense qu'il existe une solution plus simple pour arriver au même résultat.
Par contre je bute sur le point 3 (insertion ligne)

Les besoins sont les suivants :
1/si n° COMPTE de DESTINATION existe dans SOURCE et libellé GN = Matière ou autres charges externes ramener "résultat cumulé" dans colonne 1
2/si n° COMPTE de DESTINATION existe dans SOURCE et libellé GN =tous les autres, ramener "résultat cumulé" dans colonne 2
3/si n° COMPTE de TAB n'existe pas dans SOURCE => insérer ligne dans TBD et ramener N°compte et résultas cumulés dans colonne correspondante

Les fichiers ci-dessous ont les éléments (les 4 lignes de source sont à ramener dans destination)
http://cjoint.com/?3AFjt2mBF2Z
http://cjoint.com/?3AFjuC3q4ny

D'avance merci beaucoup et bon we
Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
J'ai déjà parcouru vos 2 fichiers, les explications (1 à 3) ne sont pas identiques à celle du fichier [Destination] c'est pourquoi je vous demande de mettre les valeurs sources aussi au bon emplacement du fichier de destination ... est-ce possible ... !
Si vous avez créé une macro il serait bien de la mettre avec votre fichier, car il suffit peut-être de l'adapter ..... !

Bonjour,

Je vous joins les deux fichiers avec les éléments et les macros (petites têtes rouges).

Merci d'avance des infos et aides que vous pourriez m'apporter.


http://cjoint.com/?3BejGbcGHvm
http://cjoint.com/?3BejGSvuG7J

ps : ne pas mettre à jour les liaisons à l'ouverture du fichier destination
annule et remplace le fichier destination
http://cjoint.com/?3BeooY2A1HW
Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
Il n'y a aucune concordance entre les données des 2 classeurs, impossible de contrôler le cas 1 et 2 !
Pourquoi vous ne mettez pas les données qui correspondent aux 3 cas dans le fichier source ? Il devrait y avoir les données des cas 1 et 2 pour pouvoir adapter votre code de manière correct..... !
Et enfin celle du cas 3 qui correspondent au code qui n'existe pas dans le fichier de destination.
Ou bien je dois les inventer moi-même.... !


Salutations.
Le Pingou
http://cjoint.com/?3BfjU2vcaS8 (source)
http://cjoint.com/?3BeooY2A1HW
(destination)

Voilà pour les cas 1 et 2 : ça fonctionne bien mais il y a un nouveau problème => dans le cas où un code est présent sur plusieures lignes dans la source (ex ligne 106 et 107), il faudrait cumuler les montants en colonne 1 de destination. Là, j'avoue n'avoir trouvé aucune solution.

Pour le cas 3, il faut ramener les lignes, dont les n°comptes n'apparaissent pas dans destination, dans une nouvelle feuille =>je n'ai toujours pas trouvé comment procéder !!!

J'espère vous avoir, cette fois, apporté tous les éléments nécessaires...

Vous priant de m'en excuser et vous remerciant par avance de vos lumières,

A bientôt.
Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
Merci à première vue c'est bon cette fois.
Une précision pour le point 3, vous dites : il faut ramener les lignes, dont les n°comptes n'apparaissent pas dans destination, dans une nouvelle feuille

Est-ce que cela veut dire :
.- toutes les données d'une ligne dans les colonnes correspondante au titre ... ?
.- dans une nouvelle feuille identique à [TdB PROJETS VAD 2012] mais vide ?

Bonjour,

Les lignes (source) dont les n° de compte ne sont pas dans destination doivent être copier-coller dans un nouveau fichier telles que (présentation fichier source).

Par ailleurs, pensez-vous qu'il soit possible de cumuler les montant dans un même cellule (ex lignes 106 et 107) ???

D'avance merci de votre réponse.
Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
Merci, patience pour la suite.

Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
Pour information, j'ai eu un contre temps ce sera pour demain dans la journée.
Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
Je vous laisse découvrir ma proposition, il suffit de déclencher la procédure par clic sur le bouton de commande sur la feuille du classeur [Playa2_ccm_destination.xls].
Le 2 fichiers sont dans le ZIP: https://www.cjoint.com/?3BguyUv6n4c
J'espère que cela vous conviendra... !

Bonjour et merci beaucoup pour cette proposition.

Elle fonctionne très bien, sauf pour le cas 3 où la macro bloque =>
Erreur d'exe '1004' : la méthode 'SaveAs' de l'objet'_'Workbook' a échoué

La ligne suivante est surlignée dans la macro :
ActiveWorkbook.SaveAs Filename:=rep & "\Playa2_nouveau.xls", _
FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False


Pour les cas 1 et 2, c'est ok dans vos fichiers mais lorsque j'applique la même macro(copier-coller) dans mon fichier, j'ai le message d'erreur suivant :
Erreur d'exe "9" : L'indice n'appartient pas à la sélection

Et la ligne suivante est surlignée dans la macro :
Set wbdes=workbooks(desti)

J'ai bien tenté de modifier (desti) mais sans succès !!!

Si vous préférez ne pas passer trop de temps sur ce problème, pouvez-vous uniquement m'indiquer la commande permettant de cumuler les montants à ramener dans les cellules ainsi que la commande permettant de copier-coller les lignes ???

D'avance MERCI.
Messages postés
10362
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 septembre 2021
1 191
Bonjour,
Merci pour l'information.
C'est bizarre cet erreur, avez-vous bien enregistré les 2 classeurs dans le même répertoire, sur le bureau par exemple ... Oui / Non ?
Qu'elle est la version MS Office ... ?

Bonjour,

Je confirme l'enregistrement des 2 fichiers sur le bureau et je travaille sur excel 2002 c'est peut-être la raison ???

Sinon pour les lignes :
Set wbdes = Workbooks(desti)
Set wbsou = Workbooks(source)

Comment dois-je inscrire les noms de mes fichiers ? (résultats destination) et (source ep) ne fonctionnent pas...

D'avance merci.