Macro pour ramener éléments d'un fichier selon conditions
RésoluLe Pingou Messages postés 12364 Date d'inscription Statut Contributeur Dernière intervention -
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...
- Macro pour ramener éléments d'un fichier selon conditions
- Fichier bin - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
56 réponses
Le besoin est d’automatiser le transfert d’éléments d’un fichier source mis à jour quotidiennement vers un fichier destination selon des conditions : compte existant avec GN = Matière ou autres charges externes ramène le résultat cumulé en colonne 1, compte existant avec GN = tous les autres ramène le résultat cumulé en colonne 2, et si le compte de TAB n’existe pas dans le source, insérer une ligne et reporter le compte et le résultat cumulé dans la colonne correspondante. Une macro a été proposée qui ouvre les quatre classeurs et déclenche la procédure pour copier les données colonne par colonne. Des difficultés apparaissent, notamment une erreur d’exécution 9 liée à des indices hors sélection et des questions sur le nommage des classeurs lorsque des espaces sont présents. Des échanges évoquent des ajustements pratiques comme remplacer les espaces par [_] dans les noms, tester Application.Version et CInt pour la compatibilité Excel, et envisager une approche plus simple que la RechercheV.
Merci.
J'aimerais pour commencer régler le problème de l'enregistrement du cas 3.
Pouvez-vous réaliser ceci :
Ouvrir le fichier source [Playa2_ccm_source_ep_05022013.xls] / Activer l'enregistreur de macro (icône en bas à gauche) / clic droit sur la feuille [Feuil1] et choisir [Déplacer ou copier...] / dans classeur choisir (nouveau classeur) et cocher la case [Créer une copie) puis sur OK / vous avez un nouveau classeur vous faite [enregistrer sous] par exemple sur le bureau et vous donnez un nom / clic enregistrer. Pour terminer vous fermer l'enregistreur de macro.
Vous mettez le classeur [Playa2_ccm_source_ep_05022013.xls] sur https://www.cjoint.com/ et poster le lien.
Note : je vous expliquerez l'autre problème après .... !
je suis désolée mais je ne trouve pas l'enregistreur de macro (icône en bas à gauche) !!!
J'ai tenté dans la barre d'outil visual basic mais sans succès...
HELP HELP
J'ai pensé que sous Excel 2002 il y avait aussi l'icône, alors vous procédez comme pour la : Macro enregistrée le 04/02/2013 par RATP .... !
D'après ce que je comprends, vous attendez votre fichier sourcePlaya2_ccm_source_ep_05022013.xls sous le nom que je compte utiliser.
Est-ce bien cela ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionDans le but d'obtenir le code généré par votre version Excel 2002 , j'aimerais que vous enregistrer une nouvelle macro avec l'enregistreur selon les opérations que j'ai mentionné.
Le procéder est le même que pour la macro que pour celle que vous avez dans le poste : https://forums.commentcamarche.net/forum/affich-27033919-macro-pour-ramener-elements-d-un-fichier-selon-conditions#3
Ensuite vous mettez le classeur [Playa2_ccm_source_ep_05022013.xls] sur https://www.cjoint.com/ et poster le lien.
Non ce n'est pas cela, de ce fait je me demande d'où sort la macro que vous avez présenté là : https://forums.commentcamarche.net/forum/affich-27033919-macro-pour-ramener-elements-d-un-fichier-selon-conditions#3
Eh bien je vous propose d'essayer avec la version suivante : https://www.cjoint.com/?3BioVhQF46H
If CInt(Application.Version) < 12 Then
Par ailleurs, je vous joins le fichier avec ma macro modifiée entre-temps sans le cumul des matières et autres charges bien entendu (clic sur rectangle jaune).
http://cjoint.com/?3BipJGYuP00
http://cjoint.com/?3BipQFlfZoX
De plus la demande a changée, les lignes à copier-coller dans un nouveau fichier sont celles du fichier destination pour lesquelles les colonnes 1 et 2 (surlignées jaune) sont vides...
Désolée, je viens juste d'avoir l'info,
Encore un grand merci pour votre aide
Maintenant je veux savoir exactement la valeur qui se trouve dans le code [Application.Version], pour se faire, vous lancer la procédure et dès l'apparition du message vous cliquez sur débogage, sélectionner (Application.Version) et il devrait apparaitre une valeur.... Que vous me transmettez... j'attends... !
Je veux aussi la réponse à ceci : Non ce n'est pas cela, de ce fait je me demande d'où sort la macro que vous avez présenté là : https://forums.commentcamarche.net/forum/affich-27033919-macro-pour-ramener-elements-d-un-fichier-selon-conditions#3
Salutations.
Le Pingou
La macro postée plus haut dont vous parlez a été remplacée par celle que je vous est postée à l'instant. Elle n'existe donc plus.
Cordialement.
j'ai le message suivant : Cint(ApplicationVersion) = <Incompatibilité de type> mais pas de valeur.
Quant-à la macro, c'est bien moi qui l'est créee en allant dans outil,macro, nouvelle macro...
Quand je clic sur[CInt(Application.Version)] :
j'ai le message suivant : Cint(ApplicationVersion) = <Incompatibilité de type> mais pas de valeur.
Je pense que c'est dû à la version 2002 qui ne prend pas en charge la fonction [CInt], comme je veux que cela fonctionne je vais chercher l'équivalent.
Merci d'essayer en remplacant le [CInt(Application.Version)] par [Val(Application.Version)]
Salutations.
Le Pingou
Je suppose que la procédure fonctionne avec le remplacement de [CInt] par [Val] en conséquence ma proposition selon votre modification pour le cas 3.
Les 2 classeurs en ZIP : https://www.cjoint.com/?3Biw1ndcxaO
Cette fois la macro fonctionne très bien jusqu'au point 3; merci beaucoup !!!
Cependant, lorsque je l'applique à mon fichier, j'ai toujours le même problème sur le point 1 : erreur d'exe "9" : l'indice n'appartient pas à la sélection.
Et surligne : Set wbdes = Workbooks(desti)
Savez-vous comment je dois écrire "résultats destination" et "source ep" ???
D'avance merci.
Par contre je recontre le nouveau problème suivant sur le point 3 : erreur d'exe "1004" : l'indice portant ce nom est introuvable et la ligne surlignéé : ActiveSheet.Shapes.Range(Array("CmdeTrait")).Delete
Avez-vous la soluttion ???
D'avance merci.
J'ai copier-coller votre macro que j'ai renommée Macro4. J'ai créer un nouveau bouton auquel j'ai affecté "Macro4" ai modifié la macro de cette façon : ActiveSheet.Shapes.Range(Array("macro4")).Delete et ai cliqué sur mon bouton.
Malheureusment, j'obtiens toujours le message d'erreur erreur d'exe "1004" : l'indice portant ce nom est introuvable et la ligne surlignéé : ActiveSheet.Shapes.Range(Array("Macro4")).Delete
Ai-je bien compris votre précédent message ???
Par ailleurs, le nouveau fichier créer pour ramener les lignes comporte toutes les lignes du fichier destination et non pas uniquement celles vides en colonne 1 et 2 comme recherché !!! Comment puis-je modifier cela ???
D'avance merci.
Eh bien, le nom de votre bouton n'est pas celui de la macro, ce sont 2 objets différents. Chercher le nom attribué à votre bouton ....... Vous sélectionnez le bouton et le nom devrait se trouver dans la fenêtre à gauche de la barre des tâches ...!
Pour le nouveau fichier créé : je viens de contrôler et il y a uniquement les lignes dont les valeurs sont vides pour les colonnes 1 et2.
ActiveSheet.Shapes.Range(Array("Groupe 24")).Delete
Cependant, je reçois toujours le même message d'erreur !!!
Par ailleurs, j'ai vérifié et pour le cas 3 c'est ok, désolée !!!
Tous est donc parfait à part le petit soucis dit plus haut...
Si je ne fais pas d'erreur, le [Groupe 24] est un ensemble de plusieurs objets que vous avez groupé, donc dans ce cas il faut traiter l'ensemble et la ligne d'instruction ne convient pas, il faut là modifier selon vos objets.
Vous pouvez aussi supprimer la ligne [ActiveSheet.Shapes.Range(Array("CmdeTrait")).Delete] ce qui aura pour effet de garder le bouton de commande dans le nouveau classeur avec une liaison vers la procédure qui se trouve dans un autre classeur.... !
Note: J'ai vu votre dernier message et si vous modifier le code je n'ai aucune chance de vous aider sans avoir la procédure compolète.
Salutations.
Le Pingou