Problème dans une macro devant faire un tri - VB/VBA/VBS - Programmation
Marsh Posté le 05-08-2009 à 15:47:15
up pls
Code :
|
Marsh Posté le 05-08-2009 à 16:11:11
bonne idée de mettre de la couleur, ca donnait pas vraiment envie de lire ton premier post
aurais tu un fichier exemple simplifié pour expliquer ton soucis?
peux-tu également précisé ton erreur?
au fait je te signale que tu fais des calculs avant d'avoir finit de compléter ton dictionnaire, je ne sais pas si c'est voulu mais à première vue c'est bizarre
Marsh Posté le 05-08-2009 à 16:39:33
oui , peut tu me donner ton mail ...
Je suis un débutant alors introduire des clé dans le dico , je suis un perdu , perso , j'ai compris que l'on cré , un tableau , dont on allé selectionner des mot clé .... merci de bien vouloir m'aider
Marsh Posté le 05-08-2009 à 17:59:41
je mets pas mon mail sur des sites publique désolé
tien voila un script adapté rapidement, d'un de mes anciens script
voila comment j'initialise un dico bidon
Code :
|
là en gros je parcours la première colonne, tant qu'elle est non vide je continue
Si la 5 eme colonne à une valeur je la rentre dans mon dico
Et c'est ensuite que j'utiliserais mon dico.
Mais j'ai peut être aussi pas suivi comment toi tu as besoin de t'en servir.
C'est pour ça qu'une explication un peu plus claire serai bien sur ton besoin .
Ce que j'ai compris:
nombre de colonne fixe, nombre de ligne qui varie.
Une ligne=une entrée
une entrée= plusieur champs (qui sont les différentes colonnes)
Ton besoin additionné selon un critère sur un champs.
Si une application de ta macro= une somme alors inutil d'utiliser un dictionnaire
une simple bloucle
Code :
|
Ton vu que ça m'a l'air un peu trop simple, je pense ne pas avoir saisi ton soucis
Marsh Posté le 07-08-2009 à 11:49:36
Hello
foxley_gravity est une fille ? Non parceque la tu donnes les reponses direct !!
Si tu veux foxley_gravity, mon mail est dans mon profil. Il me semble qu'on a deja travaillé ensemble non ?
Envoie le fichier et je le partagerai ici...
Marsh Posté le 07-08-2009 à 14:45:40
merde je suis démasqué
en fait il se trouve que ces des bouts du code que je suis en train d'écrire
Marsh Posté le 10-08-2009 à 13:49:09
Bonjour
désolé d'embéter tout le monde à la plage lol!
Je vous remercie d'avance
mais J'ai toujours mon petit probème avec une macro ...
Je ne comprend pas car elle marche sur des exemples simples maisi l y a doit y avoir une erreur de logique ... car sur le vrai exemple beucoup plus long , la macro ne s'arrete pas apres avoir sélectionné le bon titre , elle continue
+je n'arrive pas à imposer a ma macro de commencer a sommer 5 lignes apres avoir sélectionner le titre sélectionné ( ici x ) et surtout ma macro ne s'arrete pas apres , elle continue a sommer les valeurs des titres suivants
info suplémentaire : entre chaque montant il y a 1 blanc
entre le dernier montant d'un titre , et le premier du suivant il y a 2 blanc ... donc j'aimerais des qu'il y a 2 blanc qu'elle s'arrête ...
Voici la macro (qui ouvre le fichiercible avec les titres ,les montant.. pour copier la somme dans le fichier ouvert) deja écrite
Marsh Posté le 10-08-2009 à 14:46:17
foxley_gravity a écrit : donc j'aimerais des qu'il y a 2 blanc qu'elle s'arrête ... |
Sans avoir lu le début mais juste pour ça tu fais une boucle avec un compteur. Si tu trouves un blanc t'incrémentes sinon tu remets à 0. Si le compteur =2 alors t'arrêtes.
Marsh Posté le 10-08-2009 à 16:02:36
tu pourais pas lire le début parce franchement , je suis allez au delas de met limite ^^ , ps des que j'ai réussir à résoudre ces 3 probleme , je vous embete plus jamais de la vie entiere
Marsh Posté le 10-08-2009 à 16:17:48
foxley_gravity a écrit : je suis allez au delas de met limite ^^ |
Les limites de l'orthographe par contre sont largement dépassées là... Si tu codes aussi bien que t'écris je comprends que rien ne marche.
J'ai pas trop compris ton code, en même temps vu le peu de commentaires ça n'aide pas.
Marsh Posté le 10-08-2009 à 16:31:36
nom ligne 6 ,sinistre ligne 10 , titre ligne 2
On créer un dictionnaire ( outil complexe ) qui va venir lire toutes les lignes de la 2eme colonne et sélectionner la clé qui nous interesse ( correspondant au titre des partenaires)
Code :
|
Marsh Posté le 10-08-2009 à 16:53:39
Mais c'est où que tu vérifies que t'as croisé 2 lignes vides ?
Marsh Posté le 10-08-2009 à 19:03:26
T'as dit que tu voulais arreter ta routine dès que t'avais 2 lignes vides de suite. Où est la portion du code pour ce point là ?
Marsh Posté le 11-08-2009 à 09:24:38
exact , dans mon programme c'était juste une différent de 0
c'est instruction est correcte ?
if 2*Cells(i, 10) <> "" Then
Marsh Posté le 11-08-2009 à 09:53:23
foxley_gravity a écrit : c'est instruction est correcte ? |
Après avoir réfléchi à la signification de ta ligne, à ton avis ?
Sinon je t'ai expliqué comment faire :
Citation : Sans avoir lu le début mais juste pour ça tu fais une boucle avec un compteur. Si tu trouves un blanc t'incrémentes sinon tu remets à 0. Si le compteur =2 alors t'arrêtes. |
Et pour tester si une cellule est vide il me semble que c'est Cells(...).Text = ""
Avec ça tu as tout pour adapter ça à ton programme normalement.
Marsh Posté le 11-08-2009 à 10:47:50
ok , j'ai essayé de suivre tes instructions, cela te convient ?
Code :
|
Marsh Posté le 11-08-2009 à 11:00:04
En tout cas ça m'étonnerait que Cells(j, 10) <> "" fonctionne étant donné que Cells est un objet et pas un string.
Il sert à quoi ton For i ? Il est où ton test qui vérifie si i=2 ?
Marsh Posté le 11-08-2009 à 11:09:26
oula désolé je susi fatigé
Code :
|
Marsh Posté le 11-08-2009 à 11:12:33
non mais va dormir 2-3 mois quoi et réviens après...
Tu écris n'importe quoi, n'importe comment, tu te relis pas, tu n'essayes pas de comprendre ce que tu fais...
Marsh Posté le 11-08-2009 à 11:15:50
Tiens Deamon à cracker avant moi
Bon pour info il me semble qu'il manque entre autre des Enf If
Ensuite je ne sais pas d'ou sort le next mais bon j'ai laché ce sujet depuis un petit trop de temps, sorry
folex_gravity, puis-je te demander si tu as ouvert une documentation?
Non car on veut bien aider, mais si tu connais même pas les base, c'est pas la peine
Demande directement si y a pas une bonne ame pour faire ton boulot à ta place ...
Donc le minimum ftp://ftp-developpez.com/tahe/fic [...] script.pdf,
C'est du VBS ok, mais je ne connais pas de doc équivalente en VBA et les bases sont communes
Marsh Posté le 11-08-2009 à 11:28:06
Je suis pas sur que ça convienne la doc VBS. Déjà un cours d'algorithme ça serait mieux pour la base de la base. Après c'est que de la syntaxe.
Et oui il manque un end if, on a un next sans for, i et j sont des single (nombres flottants) il serait plus adapté d'avoir Integer (voire Long si besoin), j n'est pas initialisé (avec un peu de chance par défaut c'est 0 mais bon...)... Et il faudrait vérifié que Cells(i, 10) <> "" fonctionne.
Bref c'est pas demain que foxley_gravity va nous coder le prochain Windows.
Marsh Posté le 11-08-2009 à 11:28:58
Code :
|
Marsh Posté le 11-08-2009 à 11:30:51
T'es conscient que dans ton : Do While Cells(i, 1) <> ""
est une boucle infinie ? i n'est pas modifié dedans donc si tu rentres peu de chance que tu en sortes avant que ton pc plante.
Non mais avant de coder écris l'algo en français ! Car j'ai pas l'impression que ce soit clair pour toi ce que tu veux faire.
Marsh Posté le 11-08-2009 à 11:34:06
Deamon a écrit : Je suis pas sur que ça convienne la doc VBS. Déjà un cours d'algorithme ça serait mieux pour la base de la base. Après c'est que de la syntaxe. |
Pas d'accord
C'est avec des gens comme lui, plein de bonne volonté qu'est né windows, y a qu'a voir le produit à l'arrivée
Citation : T'es conscient que dans ton : Do While Cells(i, 1) <> "" |
ca veut aussi dire qu'il n'a même pas testé le code
Marsh Posté le 11-08-2009 à 11:52:18
merci pour le compliment c'est si rare ^^
et maitenant je pense à mno pc avant de tester lol ,je prefere vous en faire part avant , la pauvre bête...
mais franchement , il y a un minimun de logique
Code :
|
Marsh Posté le 11-08-2009 à 12:14:26
Citation : et maitenant je pense à mno pc avant de tester lol ,je prefere vous en faire part avant , la pauvre bête... |
ouai ben non
1 tu réfléchis
2 tu codes
3 tu testes
4 tu debug
5 tu reflechis
6 tu codes
...
et ça autant de fois que possible
et tu viens que lorsque que ca fait au moins une heure que tu réflechis sur la même question
la suite sans moi
Code :
|
tu m'expliques quand est-ce que tu rentres dans la boucle?
t'as encore oublié le Enf if
et puis je t'en laisse
Commence par apprendre le vbs comme je te l'ai dit
Et puis le conseil de deamon sur l'algorithmique est pas faux...
Marsh Posté le 11-08-2009 à 12:23:42
_xme_ a écrit : ca veut aussi dire qu'il n'a même pas testé le code |
Faudrait déjà que son code compile pour le tester.
Et xme tu es aussi bon à écrire mon pseudo que foxley_gravity à écrire son code.
foxley_gravity > sans déconner écris le fonctionnement de ton algo en français avant de le coder (ex: on regarde si la cellule est vide si oui alors... si non... etc.), en l'écrivant tu verras bien que quelque chose ne va pas.
Marsh Posté le 11-08-2009 à 13:13:34
Citation : |
Je suis profondément vexé
c'est corrigé
(au fait j'ai peut être mal compris, c'était peut être un encouragement à foxley_gravity, il ne manquait qu'un "a" dans ton pseudo ^^)
Edit :et merde
Marsh Posté le 11-08-2009 à 13:29:24
Il me semble qu'ailleurs tu avais aussi écrit "demaon" ou "daemon" enfin bref pas grave j'ai l'habitude.
C'est comme ton quote foiré personne ne dira rien.
Marsh Posté le 11-08-2009 à 14:14:04
bon je crois que c'est bon , alors les petits joueur de vba attention à vos yeux ( ou pas ) ( humour + dérision )
Code :
|
Marsh Posté le 11-08-2009 à 14:24:33
Bien. On s'approche d'un truc correct.
Pour chipoter tu peux mettre le i = i + 1 après le end if pour éviter de le répéter 2 fois.
Il ne reste plus qu'à tester le If Cells(i, 1) = ""
Marsh Posté le 11-08-2009 à 14:27:59
ben c'est fait et il marche ... maitenant ca je l'introduit à quelque ligne dans ma macro lol , allez j'ai fait le plus gros du travail mdr , tu peux me dire au moins ca !! à mon avis faut faire quelques modifications ...
Marsh Posté le 11-08-2009 à 15:19:38
bon j'ai éssaye d'inserer le code , j'aimerais vous me dites si je l'est bien inserer .....et pourqoui il plante à un endroit avec incompatibilité de type pour
Cells(1, 1) = tmp(0)
Code :
|
Marsh Posté le 11-08-2009 à 15:49:46
Parce que Cells est un objet Cell et tmp on ne sait même pas ce que c'est vu que tu ne l'as pas déclaré.
Mais il faut écrire dans un champ de Cell style value, text, formula...
Marsh Posté le 11-08-2009 à 16:10:12
c'est bysarre parce qu'avant la modif , tout marchait bien .. tu es sur alors que le probleme vient de la ?
"Mais il faut écrire dans un champ de Cell style value, text, formula..."
J'ai éssayais en rajoutant .value , mais même résultat , quelles modifs je peux faire d'autre ?
Marsh Posté le 11-08-2009 à 16:31:39
J'ai jamais vu dans ton code avant "Cells(1, 1) = tmp(0)" donc faudra m'expliquer pourquoi tu dis que ça a déjà marché ?
Regarde la doc de Cell pour voir ce qu'il y a dedans comme champ intéressant.
Et déclares ton tmp je t'ai dit aussi.
Marsh Posté le 03-08-2009 à 10:08:11
Bonjour
Je suis débutant en vba et je dois faire un petit programme
J'ai un petit probème avec une macro ...
J'ai un fichier dont le nombre de données varient ( et donc le nombre de lignes) mais les colonnes restent les mêmes ... j'ai 3 colonnes : les titres ( col 2) , les montants (col 10 ) , et les noms ( col 6 )
J'aimerai un programme qui vienne lire tous les titres ... ( ici le seul titre démandé est x) et qui viennent sommer les montants correspondant.
Mon probleme est que :
je n'arrive pas à imposer a ma macro de commencer a sommer 5 lignes apres avoir sélectionner le titre sélectionné ( ici x ) et surtout ma macro ne s'arrete pas apres , elle continue a sommer les valeurs des titres suivants
info suplémentaire : entre chaque montant il y a 1 blanc
entre le dernier montant d'un titre , et le premier du suivant il y a 2 blanc ... donc j'aimerais des qu'il y a 2 blanc qu'elle s'arrête ...
Voici la macro (qui ouvre le fichiercible avec les titres ,les montant.. pour copier la somme dans le fichier ouvert)
Sub copier_sinistre()
Dim i As Integer
Dim last_line As Integer
Dim star_line As Integer
Workbooks.Open Filename:="D:\Documents and Settings\x7001\Bureau\2008Sinistres02062009.xls"
Workbooks("2008Sinistres02062009.xls" ).Worksheets("PREVIsin2008" ).Activate
Worksheets("PREVIsin2008" ).Select
last_line = Cells(65536, 10).End(xlUp).Row
start_line = 1
Dim tab1
Set tab1 = CreateObject("Scripting.Dictionary" )
old_cle = ""
For ligne = start_line To last_line
If Cells(ligne, 2) = "" Then
cle = old_cle
Else
cle = Cells(ligne, 2)
old_cle = cle
End If
If Cells(ligne, 10) <> 0 Then
If tab1.exists(cle) Then
tmp = tab1(cle)
tmp(0) = tmp(0) + Cells(ligne, 10) ' cumul des sommes
tmp(1) = tmp(1) & " " & Cells(ligne, 6) ' cumul des noms
tab1(cle) = tmp
Else
tab1(cle) = Array(Cells(ligne, 10), Cells(ligne, 6))
End If
MsgBox (Cells(ligne, 10))
End If
Next
cle = "x"
tmp = tab1(cle)
Cells(1, 1) = tmp(0)
'Workbooks(1).Worksheets(1).Cells(1, 1) = tmp(0)
'Workbooks(1).Activate
'Cells(1, 1).ClearComments
'Cells(1, 1).Select
'Cells(1, 1).AddComment
'Cells(1, 1).Comment.Text Text:=tmp(1)
End Sub
merci de m'aider ...
cordialement