Problème dans une macro devant faire un tri

Problème dans une macro devant faire un tri - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 03-08-2009 à 10:08:11   

Reply

Marsh Posté le 04-08-2009 à 15:04:36    

up please :(

Reply

Marsh Posté le 05-08-2009 à 15:47:15    

up pls :( :(
 

Code :
  1. Sub copier_sinistre()
  2.  
  3.  
  4. Dim i As Integer
  5. Dim last_line As Integer
  6. Dim star_line As Integer
  7.  
  8.  
  9. Workbooks.Open Filename:="D:\Documents and Settings\x7001\Bureau\2008Sinistres02062009.xls"
  10. Workbooks("2008Sinistres02062009.xls" ).Worksheets("PREVIsin2008" ).Activate
  11.  
  12.  
  13. Worksheets("PREVIsin2008" ).Select
  14.  
  15.  
  16. last_line = Cells(65536, 10).End(xlUp).Row
  17. start_line = 1
  18. Dim tab1
  19. Set tab1 = CreateObject("Scripting.Dictionary" )
  20. old_cle = ""
  21. For ligne = start_line To last_line
  22.    If Cells(ligne, 2) = "" Then
  23.        cle = old_cle
  24.    Else
  25.        cle = Cells(ligne, 2)
  26.        old_cle = cle
  27.    End If
  28.    
  29.    If Cells(ligne, 10) <> 0 Then
  30.        If tab1.exists(cle) Then
  31.            tmp = tab1(cle)
  32.            tmp(0) = tmp(0) + Cells(ligne, 10) ' cumul des sommes
  33.            tmp(1) = tmp(1) & " " & Cells(ligne, 6) ' cumul des noms
  34.            tab1(cle) = tmp
  35.        Else
  36.            tab1(cle) = Array(Cells(ligne, 10), Cells(ligne, 6))
  37.        End If
  38.    
  39.  MsgBox (Cells(ligne, 10))
  40.        End If
  41. Next
  42.  
  43. cle = "x"
  44. tmp = tab1(cle)
  45.  
  46. Cells(1, 1) = tmp(0)
  47.  
  48. Workbooks(1).Worksheets(1).Cells(1, 1) = tmp(0)
  49.  
  50. Workbooks(1).Activate
  51. Cells(1, 1).ClearComments
  52. Cells(1, 1).Select
  53. Cells(1, 1).AddComment
  54. Cells(1, 1).Comment.Text Text:=tmp(1)

Reply

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  :heink:

Reply

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

Reply

Marsh Posté le 05-08-2009 à 17:59:41    

:non: 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 :
  1. ' Defintion d'un dictionnaire bidon
  2. Set objExcel = CreateObject("Excel.Application" )
  3. objExcel.Workbooks.Open("chemin\monexcel.xls" )
  4. Set feuille = objExcel.Workbooks(1).Worksheets(2)
  5. ' Initialisation du dictionnaire
  6. set dicocoef=CreateObject("Scripting.Dictionary" )
  7. k=1
  8. Do While (StrComp(feuille.Cells(k, 1).Value,"" )<>0)
  9.     if StrComp(feuille.Cells(k, 5).Value,"" )<>0 then
  10.         dicocoef.add feuille.Cells(k, 1).Value , feuille.Cells(k, 5).Value
  11.     End if
  12.     k=k+1
  13. Loop


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 :
  1. k=1
  2. Do while (StrComp(feuille.Cells(k, 1).Value,"" )<>0)
  3.   s=0 ' le résultat de ta somme
  4.   if (StrComp(feuille.Cells(k, 2).Value,"la valeur que tu veux" )=0) then
  5.      s=s+feuille.Cells(k, 2).Value
  6.   End if
  7. loop


Ton vu que ça m'a l'air un peu trop simple, je pense ne pas avoir saisi ton soucis  :D

Reply

Marsh Posté le 07-08-2009 à 11:49:36    

Hello
 
foxley_gravity est une fille ? :p 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...


Message édité par SuppotDeSaTante le 07-08-2009 à 11:49:53

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 07-08-2009 à 14:45:40    

:lol: merde je suis démasqué  :pt1cable:  
en fait il se trouve que ces des bouts du code que je suis en train d'écrire  :whistle:

Reply

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

Reply

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.

Reply

Marsh Posté le 10-08-2009 à 14:46:17   

Reply

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 :p

Reply

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.

Reply

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 :
  1. Dim i As Integer
  2. Dim lastline As Integer
  3. Dim star_line As Integer
  4.  
  5. 'ouverture des fichiers
  6.  
  7. Workbooks.Open Filename:="F:\013_DirFinTech\042_DptEtudes\018_SrvSupFiabSI\SOP - Support Offres Produits\Inventaire emprunteurs\Laurent\fichier nécessaire2\2008Sinistres02062009.xls"
  8. Workbooks("2008Sinistres02062009.xls" ).Worksheets("PREVIsin2008" ).Activate
  9.  
  10.  
  11. With ActiveSheet
  12. last_line = Cells(65536, 10).End(xlUp).Row
  13. start_line = 5 ' ligne ou l'on commence le décompte
  14. Dim tab1
  15. Set tab1 = CreateObject("Scripting.Dictionary" )
  16. old_cle = ""
  17. For i = start_line To last_line
  18.    If Cells(i, 2) = "" Then
  19.        cle = old_cle
  20.    Else
  21.        cle = Cells(i, 2)
  22.        old_cle = cle
  23.    End If
  24.  
  25.    If Cells(i, 10) <> 0 Then
  26.        If tab1.exists(cle) Then
  27.            tmp = tab1(cle)
  28.            tmp(0) = tmp(0) + Cells(i, 10) ' cumul des sommes
  29.            tmp(1) = tmp(1) & " " & Cells(i, 6) ' cumul des noms
  30.      
  31.            tab1(cle) = tmp
  32.        Else
  33.            tab1(cle) = Array(Cells(i, 10), Cells(i, 6))
  34.        
  35.        End If
  36.        
  37.      
  38.    End If
  39.  
  40.  
  41. Next
  42.  
  43. cle = "PREVI AVENIR" ' à chaque fois qu'il a ce mot , la macro enregistre la valeur des sinistres correspondants
  44. tmp = tab1(cle)
  45.  
  46. End With
  47.  
  48.  
  49. Workbooks(1).Worksheets(1).Activate
  50. With ActiveSheet
  51. 'Insertion de la somme
  52.  
  53.  
  54. 'Insertion du commentaire
  55.  
  56. Cells(2, 5).ClearComments
  57. Cells(2, 5).Select
  58. Cells(2, 5).AddComment
  59. Cells(2, 5).Comment.Text Text:=tmp(1)
  60.  
  61.  
  62. End With
  63.  
  64.  
  65. End Sub

Reply

Marsh Posté le 10-08-2009 à 16:53:39    

Mais c'est où que tu vérifies que t'as croisé 2 lignes vides ?

Reply

Marsh Posté le 10-08-2009 à 17:01:33    

Je comprends pas ta question désolé...

Reply

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à ?

Reply

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

Reply

Marsh Posté le 11-08-2009 à 09:53:23    

foxley_gravity a écrit :

c'est instruction est correcte ?
if 2*Cells(i, 10) <> "" Then


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.


Message édité par Deamon le 11-08-2009 à 09:53:33
Reply

Marsh Posté le 11-08-2009 à 10:47:50    

ok , j'ai essayé de suivre tes instructions, cela te convient ?
 
 

Code :
  1. Sub l()
  2.  
  3. Dim j, i As Single
  4.  
  5.  
  6. For i = 0 To 2
  7.  
  8.  
  9. For j = 0 To 100
  10.  
  11.  
  12. If Cells(j, 10) <> "" Then
  13.  
  14. i = i + 1
  15.  
  16. Else
  17.  
  18. i = 0
  19.  
  20. Next j
  21.  
  22. Next i
  23.  
  24. End Sub

Reply

Marsh Posté le 11-08-2009 à 10:48:22    

ps : Cells(...).Text = "" ne marchait pas  
 

Reply

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 ?

Reply

Marsh Posté le 11-08-2009 à 11:09:26    

oula désolé je susi fatigé  
 

Code :
  1. Sub l()
  2. Dim i, j As Single
  3.  
  4. If Cells(i, 10) <> "" Then
  5.  
  6. j = j + 1
  7.  
  8. Else
  9. j = 0
  10.  
  11. If j > 2 Then Exit For
  12.  
  13. Next i
  14.  
  15. End Sub

Reply

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...

Reply

Marsh Posté le 11-08-2009 à 11:15:50    

Tiens Deamon à cracker avant moi :D
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  :whistle:  
 
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

Message cité 1 fois
Message édité par _xme_ le 11-08-2009 à 11:24:46
Reply

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.

Message cité 1 fois
Message édité par Deamon le 11-08-2009 à 11:28:44
Reply

Marsh Posté le 11-08-2009 à 11:28:58    

Code :
  1. Sub v()
  2.  
  3.  
  4. Dim i, j As Single
  5.  
  6. j = 0 ' initialsie le compteur
  7.  
  8. simpas ..et la ?
  9.  
  10. For i = 1 To 15
  11.  
  12. Do While Cells(i, 1) <> ""
  13. j = j + 1
  14.  
  15. Else
  16. j = 0
  17.  
  18. Loop
  19.  
  20. Next
  21.  
  22. End

Reply

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.


Message édité par Deamon le 11-08-2009 à 11:32:45
Reply

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.
 
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.


Pas d'accord  :pfff:  
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  :D  
 
 

Citation :

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.


ca veut aussi dire qu'il n'a même pas testé le code   :sweat:

Reply

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 :
  1. Sub v()
  2.  
  3. Dim i, j As Integer
  4. j = 0
  5. Do While j > 2
  6. For i = 1 To 15
  7. If Cells(i, 1) <> "" Then
  8. j = j + 1
  9. Else
  10. j = 0
  11.  
  12. Next i
  13. Loop
  14.  
  15. End Sub


 

Reply

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 :pfff:  
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
 
 :o  
la suite sans moi

Code :
  1. j=0
  2. Do While j>2


tu m'expliques quand est-ce que tu rentres dans la boucle?
t'as encore oublié le Enf if  :fou:  
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...


Message édité par _xme_ le 11-08-2009 à 13:13:52
Reply

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   :sweat:


Faudrait déjà que son code compile pour le tester.  :pt1cable:  
 
Et xme tu es aussi bon à écrire mon pseudo que foxley_gravity à écrire son code.  :whistle:  
 
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.

Reply

Marsh Posté le 11-08-2009 à 13:13:34    

Citation :


Et xme tu es aussi bon à écrire mon pseudo que foxley_gravity à écrire son code.  :whistle:  


Je suis profondément vexé  :fou:  
 
 :lol:  
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 :D


Message édité par _xme_ le 11-08-2009 à 13:50:54
Reply

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. :D

Reply

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 :
  1. Sub v()
  2.  
  3. Dim i, j As Integer
  4. j = 0
  5. i = 1
  6.  
  7.    While j < 2
  8.            If Cells(i, 1) = "" Then
  9.        j = j + 1
  10.        i = i + 1
  11.            Else
  12.        j = 0
  13.        i = i + 1
  14.             End If
  15.        
  16.    Wend
  17.      
  18.  
  19.  
  20.  
  21.  
  22. MsgBox (i - 1)
  23.  
  24. End Sub

Reply

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) = ""

Reply

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 ...

Reply

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 :
  1. Sub m()
  2.  
  3.  
  4. Dim i As Integer
  5. Dim lastline As Integer
  6. Dim star_line As Integer
  7.  
  8.  
  9. Workbooks.Open Filename:="F:\013_DirFinTech\042_DptEtudes\018_SrvSupFiabSI\SOP - Support Offres Produits\Inventaire emprunteurs\Laurent\fichier nécessaire2\2008Sinistres02062009.xls"
  10. Workbooks("2008Sinistres02062009.xls" ).Worksheets("PREVIsin2008" ).Activate
  11. 'MsgBox Workbooks(1).Name
  12. 'MsgBox Workbooks(2).Name
  13.  
  14.  
  15. With ActiveSheet
  16. last_line = Cells(65536, 10).End(xlUp).Row
  17. start_line = 5 ' ligne ou l'on commence le décompte
  18. Dim tab1
  19. Set tab1 = CreateObject("Scripting.Dictionary" )
  20. old_cle = ""
  21. For i = start_line To last_line
  22.    If Cells(i, 2) = "" Then
  23.        cle = old_cle
  24.    Else
  25.        cle = Cells(i, 2)
  26.        old_cle = cle
  27.    End If
  28.  
  29.      
  30.     If Cells(i, 10) = "" Then
  31.    
  32.      j = j + 1
  33.      
  34.                  
  35.    
  36.        If tab1.exists(cle) Then
  37.            tmp = tab1(cle)
  38.            tmp(0) = tmp(0) + Cells(i, 10) ' cumul des sommes
  39.            tmp(1) = tmp(1) & " " & Cells(i, 6) ' cumul des noms
  40.      
  41.            tab1(cle) = tmp
  42.        Else
  43.            tab1(cle) = Array(Cells(i, 10), Cells(i, 6))
  44.        
  45.        End If
  46.        
  47.      
  48.      Else
  49.      j = 0
  50.        
  51.        
  52.      'MsgBox (Cells(i, 10))
  53.        
  54.    End If
  55. i = i + 1
  56.  
  57. Next
  58.  
  59. cle = "PREVI AVENIR"
  60. tmp = tab1(cle)
  61.  
  62. End With
  63.  
  64. Workbooks(1).Worksheets(1).Activate
  65. With ActiveSheet
  66. 'Insertion de la somme
  67.  
  68. Cells(1, 1) = tmp(0)
  69.  
  70.  
  71. 'Insertion du commentaire
  72.  
  73. Cells(1, 1).ClearComments
  74. Cells(1, 1).Select
  75. Cells(1, 1).AddComment
  76. Cells(1, 1).Comment.Text Text:=tmp(1)
  77.  
  78.  
  79. End With
  80.  
  81. End Sub


Reply

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...

Reply

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 ?

Reply

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed