|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Nouveau membre du Club
![]() Date d'inscription: mai 2008
Âge: 24
Messages: 68
|
Bonjour,
J'ai un tableau qui contient plusieurs informations. Quatres colonnes m'intéressent particulièrement: Nom, Secteur, Quantité, Trimestre. Ce tableau est sur une Feuil x, je veux prendre les informations et les mettres sur une feuille y qui n'est pas faites celon le même modèle. Le petit plus, le Nom est un tableau. Cela me permet d'avoir une liste modifiable a souhait sur une feuille z et mon programme s'adaptera. Voila la logique que j'ai utilisée pour mon programme: Je crée mon tableau avec les données de la feuille z (je suis obligé d'avoir cette liste car elle me sert dans un autre programme). Je vais sur la feuille x et je regarde quelle est la dernière ligne occupée (j'ai utilisé un compteur car il n'y a pas de cases vides entre deux). Si je suis dans le trimestre1 et Si mon secteur est .... et Si mon nom est (utilisation de la liste) alors je copie la quantité dans une variable Sinon si mon secteur est .... et Si mon nom est ..... Bref voila un peut la logique(?) lol Voila le programme incomplet: Code :
Dim Cel As Range Dim MaListe(100) As String Dim Compteur As Integer Dim i As Integer Dim Counter As Integer Dim Vue_Cel As Range Dim j As Integer Dim k As Integer Dim CdtValeur As Integer Dim EstValeur As Integer Dim Tonnage1 As Range 'Je crée ma liste à partir de la feuille Liste Set Cel = Worksheets("Liste").Range("G1") Compteur = 1 While Cel.Offset(Compteur) <> "" Compteur = Compteur + 1 Wend For i = 1 To Compteur MaListe(i) = Cel.Offset(i - 1) Next i 'Ma liste est créée 'Je vais rechercher les infos dans la feuille Vue_generale Set Vue_Cel = Worksheets("Vue_generale").Range("K1") Counter = 1 While Vue_Cel.Offset(Counter) <> "" Counter = Counter + 1 Wend ' je prends les quantités et je les mets dans des variables For j = 1 To 100 For k = 1 To Counter If Vue_Cel.Offset(k) = "1" Then If Vue_Cel.Offset(k, -8) = "conditionnement" Then If Vue_Cel.Offset(k, -10) = MaListe(j) Then CdtValeur(j) = CdtValeur + Vue_Cel.Offset(k, -2) ElseIf Vue_Cel.Offset(k, -8) = "estérification" Then If Vue_Cel.Offset(k, -10) = MaListe(j) Then EstValeur(j) = EstValeur + Vue_Cel.Offset(k, -8) End If End If End If Next Next J'imagine que c'est a cause de CdtValeur(j) et EstValeur(j). Le problème c'est que si ma liste venait à contenir 100 noms, je vais pas m'amuser à écrire 100 variables moi même... CdtValeur1 => CdtValeur100.... ![]() Le programme n'est pas complet. ensuite je mets ma liste dans ma feuille y et je place les quantités qui seront dans mes différentes variables (CdtValeur1...) à l'endroit approprié. Mais si écrire CdtValeur(j) (avec j de 1 a 100, ne fonctionne pas, je suis un peu dans la M.... )
|
|
|
|
|
|
#2 | |
|
Expert Confirmé
![]() Date d'inscription: juillet 2007
Localisation: Loire Atlantique (44)
Âge: 54
Messages: 1 861
|
Salut BOU59000 et le forum
Citation:
Ton code, juste regardé Code :
Dim Cel As Range Dim MaListe(100) As String Dim Compteur As Integer Dim i As Integer Dim Counter As Integer Dim Vue_Cel As Range Dim j As Integer Dim k As Integer Dim CdtValeur As Integer Dim EstValeur As Integer Dim Tonnage1 As Range 'Je crée ma liste à partir de la feuille Liste With Worksheets("Liste") For Each Cel In .Range(.[G1], .[G1].End(xlDown)) MaListe(Compteur) = Cel Compteur = Compteur + 1 Next Cel End With With Worksheets("Vue_generale") For j = 1 To 100 For k = 1 To .Range("K1").End(xlDown).Row If .Range("K" & k) = "1" Then If .Range("C" & k) = "conditionnement" Then If .Range("A" & k) = MaListe(j) Then _ CdtValeur(j) = CdtValeur + .Range("I" & k) ElseIf .Range("C" & k) = "estérification" Then If .Range("A" & k) = MaListe(j) Then _ EstValeur = EstValeur+ .Range("C" & k) '???? End If End If Next k Next j End With tu testes la valeur de C et si elle est égale à "estérification" tu l'additionnes à EstValeur ???? M'est avis qu'il y a un p'tit problème Mais comme je ne connais pas réellement le but de la macro... Les identations sont là pour aider à s'y retrouver, dans les boucles, les tests, pas pour faire beau!!! Te manque des End If dans ton code initial. Des questions comme ça : - pourquoi tester 100 noms, puisqu'on teste le dernier ? Autant s'arrêter au dernier inscrit. - Il y a moins de 100 lignes en K (ou moins que de noms) ? Sinon, il serait plus rapide d'inverser les deux boucles. Construire un algo au fur et à mesure est loin d'être la solution la meilleure et/ou la plus rapide. Même si ça semble neuneu de l'écrire, il vaut mieux passer pour un clown en l'écrivant et savoir ce qu'on va coder que perdre du temps à dépanner et tout refaire. Mais c'est l'avis d'un clown. A+
__________________
La qualité et la précision de la réponse sont proportionnelles à celles de la question. |
|
|
|
|
|
|
#3 |
|
Nouveau membre du Club
![]() Date d'inscription: mai 2008
Âge: 24
Messages: 68
|
Bonjour,
Désolé pour le temps de réponse j'ai été un peu occupé. Tout d'abord merci pour ta réponse. Oui pour les identations je commence à m'en servir car j'avais plusieurs autres programmes qui clochaient à cause du manque de balise de fin ou autre... Oui j'imagine que contruire l'algo au fur et à mesure n'est pas la solution la plus efficace et qu'il vaut mieux avoir une vision d'ensemble avant de commencer. Mais cette vision d'ensemble ne vient elle pas avec l'expérience, la pratique? J'en suis encore au stade ou je réfléchis aux balises, codes.. que je vais utiliser pour telle ou telle action.. et me rendre compte en cours de programme qui finalement je n'aurai pas du utiliser telle ou telle chose. Je me laisse du temps et un long fleuve de programmes Bref! lol en tout cas encore grand merci pour ta réponse
|
|
|
|
|
|
#4 | |
|
Expert Confirmé
![]() Date d'inscription: juillet 2008
Localisation: Elsass
Âge: 24
Messages: 1 887
|
Citation:
Je dirais que non elle doit venir de la réflexion, la pratique rendra juste la chose plus facile. Tu doit commencer par réfléchir a ce que tu veux faire, les cas particulier que tu vas rencontrer, etc. Ensuite tu prend un papier et tu écrit les différentes étape les teste que tu va réaliser, etc (en francais ou pseudo francais, on appelle souvent ca le pseudo code) Une fois que tu as ton algorithme la seulement tu codes. Du coup tu découple complètement les problèmes, d'un coté tu pense au principe de fonctionnement pas de problème de langage de balise de fonction utilisé c'est juste de la réflexion logique (de l'algorithmique) Et ensuite seulement tu as besoin de réfléchir au problème du langage comme écrir tel boucle tel instruction,... La moitié des problème sur ce forum vienne du fait que la personne n'a pas pris le temps de réfléchir correctement a son programme et a décidé de codé tout de suite du coup il cumule des problème de codage et des problème dans la méthode de fonctionnement. L'expérience permet de sauter la première étape et de directement écrire en VBA puisque tu fini par l'utiliser aussi bien que le francais Bon c'était ma petite morale de fin de semaine désolé pour le hors sujet J'éspère quand même que ca te sera profitable a toi ou quelqu'un d'autre
__________________
« Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir » |
|
|
|
|
|
|
#5 |
|
Expert Confirmé
![]() Date d'inscription: juillet 2007
Localisation: Loire Atlantique (44)
Âge: 54
Messages: 1 861
|
Salut à tous
Farpaitement d'accord avec Krovax Il ne sert à rien de coder si tu ne sais pas ce que tu veux faire. Même en faisant un algorythme aussi complet que possible, il arrive qu'on oublie des détails et que la macro ne fasse pas ce que l'on veut.. Construire ton algorythme sur le code que tu tapes t'expose à tout refaire parce que ça ne peut pas fonctionner. Un algo n'est pas quelque chose de compliqué : c'est comment atteindre ton but en utilisant les données à ta disposition. Ça te permet de coder, mais aussi de tester : tu ne testes jamais sur l'ensemble des données. Mais comment trouver les quelques valeurs importantes à tester si tu ne sais pas ce que tu veux faire ? A+
__________________
La qualité et la précision de la réponse sont proportionnelles à celles de la question. |
|
|
|
|
|
![]() |
||
Copier des données selon conditions
|
||
| Outils de la discussion | |
|
|