VBA Soucis avec les lignes vides
Tonio
-
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
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
A voir également:
- VBA Soucis avec les lignes vides
- Comment supprimer les pages vides sur word - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Supprimer lignes vides excel fin de tableau ✓ - Forum Excel
- L'indice n'appartient pas à la sélection vba - Forum VB / VBA
- Incompatibilité de type vba ✓ - Forum Programmation
29 réponses
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?
Par contre dernière demande est il possible de mettre le résultat dans une cellule plutôt qu'en msgbox?
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 ^^)
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 ^^)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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
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
Parfait merci beaucoup ! J'ai plus qu'à intégrer le tout dans ma macro globale et c'est gagné !
Bravo !
Bravo !