|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : janvier 2012 Messages : 97 ![]() |
bonjour
me revoila; j'ai mis un peu de temps mais je suis parvenu à faire ce que je recherchais Ci joint le programme que j'ai réalisé. Il est un peu long si les données sont nombreuses. peut on simplifier et accelerer le mouvement? par ailleurs, ce n'est pas encore tout à fait au point. En effet, je voudrais que ces donnees mises en forme nourrissent une base de donnee (excel) c'est à dire se copient à la suite des précedentes sans les effacer. (Exemple: les n lignes de la feuille se mettent automatiquement à la suite des m lignes du fichier precedent.Pouvez vous m'aider? (deux colonnes sont à exclure lors de ce procede) Merci de votre aide Code :
|
||
|
|
00
|
|
|
#2 | |
|
Expert Confirmé Sénior
![]() Jérôme FONTAINEContrôleur de Gestion Inscription : juin 2006 Messages : 3 924 ![]() |
Bonjour,
Le code serait plus lisible s'il était positionné entre des balises Code (le # dans la barre d'outil). Je vais être direct, mais ton code est ce que l'on appel un "usine a gaz" ![]() Tu boucles sur toutes les lignes de l'onglet "IMPORT DU TERRAIN" , fais une action, et recommence une nouvelle boucle etc .... Pourquoi ne pas faire toutes les actions dans une seule boucle?
__________________
Jérôme Citation:
nous encouragera.Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
|
|
|
|
10
|
|
|
#3 | ||||
|
Membre habitué
![]() Benoit SchwobBusiness Analyst Inscription : juin 2009 Messages : 93 ![]() |
Bonsoir,
Une piste à explorer : éliminer autant de ".Select" que possible, c'est à dire à peu près tous. L'idée est de penser "objet", de comprendre les liens entre les objets, et de travailler avec. Un passage comme celui-ci ... Code :
Code :
Benoît |
||||
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2012 Messages : 97 ![]() |
Je suis débutant mais vais essayer de suivre vos conseils. pour moi, difficile de faire toutes les actions en meme temps puisque il y a des calculs....
Pouvez vous me donner des piste? De meme pour la copie automatique des resultats dans une BD sans effacer les valeurs precedentes (Numerotation des lignes je pense...) Merci encore pour tous vos conseils |
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
Bonjour,
A mon avis, le problème principal posé par ton code, c’est qu’il n’est pas conçu pour répondre directement à ce que tu cherches à faire, a savoir une fiche d’historisation de résultats. Si j’ai bien compris, la feuille IMPORT DU TERRAIN sert aux relevés et la feuille "Feuil1" est une feuille de calcul et de résultats. Les données de la feuille IMPORT DU TERRAIN sont "écrasées" à chaque relevé. Les résultats dans la feuille "Feuil1" doivent être « historisés ». C’est ce dernier point qui pose problème car les formules utilisent des références relatives. Exemple : Quand tu codes pour l’operation sur diametre : Worksheets("Feuil1").Cells(2, 8).FormulaR1C1 = "='IMPORT DU TERRAIN'!RC[-3]/100" La procédure inscrit dans la cellule H2 de Feuil1 la formule "='IMPORT DU TERRAIN'!E2/100" Lorsque tu voudras effectuer un deuxième traitement, la formule dans Feuil1 sera déplacée du nombre de lignes du relevé (100 lignes par exemple). La formule deviendra "='IMPORT DU TERRAIN'!E102/100" Le résultat sera erroné puisque la donnée dans IMPORT DU TERRAIN sera toujours en E2. Si tu souhaites conserver la conception avec des formules, tu peux créer une troisième feuille HISTORIQUE dans laquelle tu effectueras une copie des résultats obtenus dans Feuil1. Autre solution, tu modifies ton code afin que Feuil1 devienne une simple fiche de résultats. Dans ce cas, il n’y a plus de formules dans Feuil1. Les calculs sont effectués dans la procédure. Pour reprendre l’exemple précédent, tu écriras Worksheets("Feuil1").Cells(Ligne_copie, 8) = Worksheets("IMPORT DU TERRAIN").Cells(Ligne_lue, 5) Avec Ligne_copie = DerLig1 + Ligne_lue – 1 DerLig1 étant le numéro de la dernière ligne renseignée de la feuille "Feuil1". DerLig1 = Worksheets("Feuil1")..Range("A" & Worksheets("Feuil1").Rows.Count).End(xlUp).Row Tu trouveras ci-dessous le code qui correspond à cette solution. J’ai intégré les remarques de Jérôme et Benoit. Si cette solution t’intéresse, prends le temps d’effectuer des tests pour vérifier qu’il n’y a pas d’erreur dans les transcriptions de formules. Code :
Cordialement. |
||
|
|
20
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2012 Messages : 97 ![]() |
Merci beaucoup.Balaise!!!
je teste et te tiens informé. Cordialement Apres quelques bogues,le programme fonctionne. Est il possible plutot que de copier les donnes depuis une feuille en csv d'aller les chercher directement depuis la feuille de saisie(En clair, ne plus faire de copier coller vers la fauille "import terrain"?? Quelques pistes?? Encore mille merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com