VBA Soucis avec les lignes vides

Tonio -  
 Tonio -
Bonjour,

Cette macro va me rendre fou...

J'ai un pb avec mes deux "sumproduct" dès qu'il y a une ligne qui est vide il me met #VALEUR si je remplis toute les lignes vides le calcul est effectué et si ensuite j'efface les informations il ne bronche plus et se met à jour...
EX: J'ai 4000 lignes à le 213 il y a un trou dans la colonne M si je change ma formule et que je prends 212 il calcule. Si je prends 213 #Valeur. Si je mets une valeur dans 213 il met et que je l'intègre il met à jour et si j'efface cette valeur, il met à jour et ne bug pas....

Merci d'avance pour votre aide

Sub KPI()

djnwemp = Cells(4, 3).Value

Workbooks.OpenText Filename:="C:\Documents and Settings\troncan1\Desktop\KPI." & djnwemp & ".XLS", _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
TrailingMinusNumbers:=True

nbligne = Sheets(2).Range("A65536").End(xlUp).Row

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Documents and Settings\troncan1\Desktop\KPI.20100128.txt", Destination:=Range( _
"A" & nbligne & ""))
.Name = "Extraction SIGMA"
.TextFileSemicolonDelimiter = True
.Refresh
End With

derlig = Sheets(2).Range("A65536").End(xlUp).Row

Range("KPI!D17").Formula = "=Sumproduct(('Extraction SIGMA'!J2:J" & derlig & "<>1990)*('Extraction SIGMA'!M2:M" & derlig & "<>"""")*('Extraction SIGMA'!M2:M" & derlig & "-'Extraction SIGMA'!L2:L" & derlig & "))/Sumproduct(('Extraction SIGMA'!J2:J" & derlig & "<>1990)*('Extraction SIGMA'!M2:M" & derlig & "<>""""))"

Range("KPI!F6").Formula = "=SUMPRODUCT(('Extraction SIGMA'!O2:O" & derlig & "-'Extraction SIGMA'!L2:L" & derlig & ">2)*1)"

Range("B8").Select
Windows("KPI." & djnwemp & ".xls").Activate
Sheets("KPI").Select
Range("D34:E34").Select
ActiveCell.FormulaR1C1 = "=COUNTIF('Extraction SIGMA'!C[12],""OUI"")"
Range("F34:G34").Select
ActiveCell.FormulaR1C1 = "=COUNTIF('Extraction SIGMA'!C[10],""NON"")"
Range("H34").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4],RC[-2])"
Range("H35").Select

End Sub

29 réponses

Tonio
 
C'est parfait Merci !

Par contre dernière demande est il possible de mettre le résultat dans une cellule plutôt qu'en msgbox?
0
garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   406
 
tu remplace msgbox par .range("ta cellule genre A1").value=
et surtout tu met cette partie juste au dessus du end with pour qu'il n'y ai pas de plantage sur le .range (c'est le mode feignant pour éviter la répétition du nom de la feuille ^^)
0
Tonio
 
Parfait Merci pour tout ;)
0
garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   406
 
si tu as besoin d'autre chose n'hésite pas :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tonio
 
Je viens de faire mes test tout marche j'ai juste un pb. C'est assez lourd je dois te l'avouer mais dans la colonne statuts je peux avoir des statuts 1990 (pas 1950 je m'étais trompé dans mon fichier). Le soucis est que quand j'ai ces statuts j'ai aussi les dates pour 1100 et 1650. Dans mon calcul je dois ignorer les statuts 1990 même si j'ai les 2 dates. J'ai testé en remplaçant des 1650 par des 1990 et ça me prend toujours en compte.
0
garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   406
 
je vien de voir que j'avai encore fait une erreur d'inattention ^^' (le .range(xx).value<>"1650" est plutot un ="1650")
donc remplace
If (.Range("M" & i).Value <> "" or .range("J" & i).value<>"1650") Then
par
If (.Range("M" & i).Value <> "" And .Range("J" & i).Value = "1650") Then
le but de cette ligne c'est: si la deuxième colonne de date n'est pas vide ET que la premiere colonne de statut (en rouge) est égal a 1650 (et seulement 1650) alors on compte cette ligne

ce calcul est effectif dans le seul cas ou l'on veu compter les lignes avec 1650
après tu a juste a modifier le format de la cellule de destination pour afficher que 2 chiffre après la virgule
j'espère ne pas avoir fait d'autres erreurs xD
0
Tonio
 
Parfait merci beaucoup ! J'ai plus qu'à intégrer le tout dans ma macro globale et c'est gagné !

Bravo !
0
garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   406
 
si tu veu intégrer la différence de jours pour chaque ligne, c'est a faire dans le if de la boucle (ya juste a faire un .range("ta colonne" & i).value= la formule de différence 1650-1100)
0
Tonio
 
Ok parfait !
Merci !
0