si tu ajoute un message pour voir le j !!!
qu'est ce que ça donneCode:
1
2
3 With Sheets("SUIVTRANS EN COURS") j = .Range("A" & Rows.Count).End(xlUp).Row msgbox j
Version imprimable
si tu ajoute un message pour voir le j !!!
qu'est ce que ça donneCode:
1
2
3 With Sheets("SUIVTRANS EN COURS") j = .Range("A" & Rows.Count).End(xlUp).Row msgbox j
Toujours rien en plus BENNASR, quand j'active la macro çà m’efface tous mes autre commentaire...8O8O
je crois que ta colonne A est vide !!!!
changer avec ça :
Code:j = .Range("J" & Rows.Count).End(xlUp).Row
Pourquoi?Citation:
Marcel ca ne marche pas ton code
Si message d'erreur, quelle ligne est soulignée?
As-tu réussi à activer la référence Microsoft Scripting.Runtime?
Merci de me confirmer si c'est bien ce code merci après les modifications que tu m'as dis.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Dim dernl As Integer Dim i As Integer Dim NUMSIN As String, CODECIE As String Dim C As Integer, D As Integer With Sheets("SUIVTRANS EN COURS") j = .Range("J" & .Rows.Count).End(xlUp).Row MsgBox j .Range("M2:M" & j).ClearContents For i = 2 To j NUMSIN = .Cells(i, 10).Value CODECIE = .Cells(i, 8).Value C = WorksheetFunction.CountIf(.Range("J2:J" & j), NUMSIN) D = WorksheetFunction.CountIf(.Range("H2:H" & j), CODECIE) If C > D Then .Cells(i, 13).Value = "REGULARISATION CIE-TEMPLATE" Next i End With End Sub
juste changez li integer par longCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Sub testtt() ''REGULARISATION ECART-TEMPLATE Dim Tablo Dim j As Long Dim C As Integer Application.ScreenUpdating = False With Sheets("SUIVTRANS EN COURS") j = .Range("J" & Rows.Count).End(xlUp).Row .Range("M2:M" & j).ClearContents For j = 2 To j NUMSIN = .Cells(j, "J") CODECIE = .Cells(j, "H") C = WorksheetFunction.CountIf(.Range("J2:J" & .Range("A" & Rows.Count).End(xlUp).Row), NUMSIN) D = WorksheetFunction.CountIf(.Range("H2:H" & .Range("A" & Rows.Count).End(xlUp).Row), CODECIE) If C > D Then .Cells(j, "M") = "REGULARISATION CIE-TEMPLATE" Next j Tablo = .Range("J2", "K" & .Range("K" & .Rows.Count).End(xlUp).Row) For j = 2 To j - 1 x = 0 For i = LBound(Tablo, 1) To UBound(Tablo, 1) If .Cells(j, "j") = Tablo(i, 1) Then x = x + CDbl(Tablo(i, 2)) End If Next i If x >= -10 And x <= 10 And x <> 0 Then .Cells(j, 13) = "REGULARISATION ECART-TEMPLATE" 'Cells(j, "AA") = x 'MsgBox x Next j End With Application.ScreenUpdating = True End Sub
Toujours la même chose il me donne juste les commentaire pour les ECARTS...
BENNSSAR, je te propose qu'on passe à un autre commentaire stp ;)
Si il faut que pour le même sinistre la sommes des montants en "K" soit <à 10 euro et si dans la colonne Type d'opération en colonne "L" = "REGL" alors je mets un commentaire en colonne M "REGL CIE - SOLDE-DEBITEUR"
Tu parcours ta liste comme précédemment. Pour chaque ligne tu recupère le type de sinistre, tu fait une somme.si pour avoir la somme des montants avec le même code sinistre, et si ta somme est inférieure à 10 euros et que en colonne l pour ta ligne tu as "REGL", tu colles ton commentaire.
Avec tous les exemples cités plus haut, tu as largement de quoi t'inspirer pour écrire du code qui marche et revenir vers nous une fois que ce sera fait :)
Merci de me confirmer si mon code est bon, si il manque as des "End if" ou autre :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Sub Macro4() With Sheets("SUIVTRANS EN COURS") j = .Range("A" & Rows.Count).End(xlUp).Row .Range("M2:M" & j).ClearContents For j = 2 To j NUMSIN = .Cells(j, "J") CODECIE = .Cells(j, "H") C = WorksheetFunction.CountIf(.Range("J2:J" & .Range("A" & Rows.Count).End(xlUp).Row), NUMSIN) D = WorksheetFunction.CountIf(.Range("H2:H" & .Range("A" & Rows.Count).End(xlUp).Row), CODECIE) If C > D Then .Cells(j, "M") = "REGULARISATION CIE-TEMPLATE" Next j Tablo = .Range("J2", "K" & .Range("K" & .Rows.Count).End(xlUp).Row) For j = 2 To j - 1 x = 0 For i = LBound(Tablo, 1) To UBound(Tablo, 1) If .Cells(j, "j") = Tablo(i, 1) Then x = x + CDbl(Tablo(i, 2)) End If 'SOLDE CREDITEUR - A REMBOURSER Next i If x < -10 Then .Cells(j, 13) = "SOLDE CREDITEUR - A REMBOURSER" 'Cells(j, "AA") = x 'MsgBox x Next j 'REGLT CIE-SOLDE-DEBITEUR If .Cells(j, "L") = "REGLT" And .Cells(j, "K") > 10 Then .Cells(j, "M") = "REGLT CIE-SOLDE-DEBITEUR" Next j End With Application.ScreenUpdating = True End Sub
Bonjour
Laisserait coi le plus tolérant. Il n'est pas possible de développer avec de telles lacunes et dans de telles conditions !Code:
1
2
3
4
5
6
7
8
9
10
11
12 For j = 2 To j - 1 For i = LBound(Tablo, 1) To UBound(Tablo, 1) .... Next i ...... Next j If .Cells(j, "L") = "REGLT" And .Cells(j, "K") > 10 Then .Cells(j, "M") = "REGLT CIE-SOLDE-DEBITEUR" ' !!!!!!!! Next j
Ce n'est pas sérieux et tenter de guider dans de telles conditions est quasi irresponsable.
Bonjour Unparia,
Oui je suis débutant pas facile de me faire comprendre en VBA et j'en suis désolé. J'espère qu'on va réussir à résoudre ma macro !
MarcelG sont code a l'air de fonctionner, Enfin ! Cependant, j'ai un soucis dans ton codage car la macro mets bien mets le commentaire "REGULARISATION CIE-TEMPLATE" lorsque pour un même Numéro de sinistre il y a la présence de 2 codes CIE différents en colonne H. En revanche, il ne doit pas mettre de commentaire lorsque pour un même Numéro de sinistre, les codes CIE sont les mêmes... Et c'est le cas quand je lance ta macro il me mets le commentaire alors que les codes CIE sont identiques.
Exemple :
Numéro de sinistre (colonne J) :
B1760521836
B1760521836
B1760521836
B1760521836
Code CIE (colonne H) :
118
200
200
200
Commentaire (colonne M) :
REGULARISATION CIE-TEMPLATE
REGULARISATION CIE-TEMPLATE
REGULARISATION CIE-TEMPLATE
REGULARISATION CIE-TEMPLATE
Dans ce cas ci-dessus, le commentaire doit être appliqué, MAIS si a la place du code CIE "118" ca aurait été "200" donc identique au 3 autres code CIE pour un même nuléro de sinistre; il ne doit pas y avoir de commentaire.
Désolé de vous embetter autant avec ça...
Cordialement,
1ere chose: Bien exprimer tes besoins. Nous sommes tous arrivé à la même conclusion (pas forcément en le codant de la même facon) parce que tu avais mal formulé.
Le problème qu'on a ici, c'est qu'on ne sait pas quel est le bon code sinistre.
Exemple:
CIE -- Code sinistre
1 -- A
1 -- A
1 -- B
1 -- B
Ici si on fait notre macro (celle qui met un commentaire si parmi toutes les lignes avec un même CIE on a un code sinistre différent), toutes les lignes se récupèrent un commentaire.
Si on fait ta nouvelle demande (ne mettre un commentaire que si on a pas le même code sinistre sur une des autres lignes) alors aucune n'aurait eu de commentaire....
Bref, ta demande est irréalisable si on ne sait pas quel est le bon code sinistre.
PS: On pourrais utiliser une méthode empirique:
Je déclare un tableau de correspondance CIE -- Code sinistre.
Dans ce tableau on va stocker le code sinistre le plus représenté pour le CIE.
La première étape est de parcourir ton fichier excel pour déterminer le code sinistre le plus représenté pour chaque code compagnie et de le stocker dans le tableau.
La 2eme, pour chaque ligne que tu traites, regarder si ton code sinistre est celui le plus représenté en recherchant la ligne correspond a ton CIE dans le tableau et dans le cas contraire, coller ton commentaire.
Bonne chance.
PS.PS: Avant de demander je t'invite à coder toi même. Tu auras bien plus de réponses si tu fait un bout de code et que viennes quand tu coinces que si tu postes directement une demande sans montrer que tu as essayé...
Bonjour à tous, Bonjour au Forum,
Pour répondre à Obadj.
C'est bien dans ce sens que j'ai développé.
Le code retourne un commentaire dans le cas où, et seulement dans ce cas, 2 codes Cie sont affectés à 1 même sinistre.
Le commentaire est mis sur toutes les lignes retournant le n° de sinistre.
Il suffit de regarder le code.
Testé.
Bonjour,
Oui MarcelG c'est ça, sauf que c'est 2( ou plus) codes CIE sont identique. Pas juste la présence des deux codes CIE.
Tu vois ce que je veux dire. J'ai déjà tester ton code ;)
A tous du coup la solution pour cahnger le code stp ?
Salut,
Je persiste et signe du fait queCitation:
sauf que c'est 2( ou plus)
Dans ton tout 1er fichier, en ce qui concerne le dernier sinistre (sur fond bleu)Code:If dico.Count > 1 Then .Cells(i, 10).Offset(0, 3).Value = "REGULARISATION CIE-TEMPLATE"
J'ai informé la colonne H des valeurs 118,200,300 et 200.
La ligne de code
reporte dans la fenêtre ExécutionCode:Debug.Print dico.Count
3
3
3
3
Je te laisse tester. (Je viens de le faire)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Option Explicit Public Sub essai_sin() Dim dernl As Integer Dim i As Integer, j As Integer Dim dico As Scripting.Dictionary Set dico = CreateObject("Scripting.Dictionary") With Sheets("SUIVTRANS EN COURS") dernl = .Range("A" & .Rows.Count).End(xlUp).Row For i = 2 To dernl For j = 2 To dernl If .Cells(j, 10).Value = .Cells(i, 10).Value And Not dico.Exists(Cells(j, 8).Value) Then dico.Add .Cells(j, 8).Value, .Cells(j, 8).Value Next j Debug.Print dico.Count If dico.Count > 1 Then .Cells(i, 10).Offset(0, 3).Value = "REGULARISATION CIE-TEMPLATE" dico.RemoveAll Next i End With Set dico = Nothing End Sub
Effectivement sur mon ancien fichier ça marche bien. Je te félicite Marcel G 8O:D !!!
Merci, Je suis très reconnaissant !!
Salut,
Pas de souci.
Le principal est que tu comprennes le code.
Dans le cas contraire, tu effectues les recherches adéquates puis tu reviens pour les questions éventuelles.
Le principal est dans toute discussion de:
Faire le maximum de recherches pour répondre à sa problématique.
La recherche, même en échec, amène à progresser.
En cas de difficulté
- Exposer clairement sa problématiques
- ... en retournant le code ébauché.
Tu peux regarder le post #20 de cette discussion
Je cite des espaces qui pourraient t'être utiles.
Pour le cas présent:
- Après l'avoir compris, tu appliques le code à ton classeur de travail
- Tu places cette discussion en mode "Résolue"
Bonne continuation et à bientôt.
C'est noté MarcelG, je te remercie ! J'aimerais avoir un dernier avis stp pour une autre macro je te laisse mon codage :
'REGULARISATION ECART-TEMPLATE fonctionne mais ensuite je veux qu'il rajoute d'autre commentaire donc j'ai "enchaîné" avec un "If" pour mettre une autre condition pour un autre commentaire. Merci de me corriger si nécessaire.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 With Sheets("SUIVTRANS EN COURS") j = .Range("A" & Rows.Count).End(xlUp).Row .Range("M2:M" & j).ClearContents For j = 2 To j NUMSIN = .Cells(j, "J") CODECIE = .Cells(j, "H") C = WorksheetFunction.CountIf(.Range("J2:J" & .Range("A" & Rows.Count).End(xlUp).Row), NUMSIN) D = WorksheetFunction.CountIf(.Range("H2:H" & .Range("A" & Rows.Count).End(xlUp).Row), CODECIE) If C > D Then .Cells(j, "M") = "REGULARISATION CIE-TEMPLATE" Next j Tablo = .Range("J2", "K" & .Range("K" & .Rows.Count).End(xlUp).Row) For j = 2 To j - 1 x = 0 For i = LBound(Tablo, 1) To UBound(Tablo, 1) If .Cells(j, "j") = Tablo(i, 1) Then x = x + CDbl(Tablo(i, 2)) End If 'REGULARISATION ECART-TEMPLATE Next i If x >= -10 And x <= 10 And x <> 0 Then .Cells(j, 13) = "REGULARISATION ECART-TEMPLATE" 'Cells(j, "AA") = x 'MsgBox x End With 'SOLDE CREDITEUR - A REMBOURSER If x < -10 Then .Cells(j, 13) = "SOLDE CREDITEUR - A REMBOURSER" 'Cells(j, "AA") = x 'MsgBox x 'REGLT CIE-SOLDE-DEBITEUR If .Cells(j, "L") = "REGLT" And .Cells(j, "K") > 10 Then .Cells(j, "M") = "REGLT CIE-SOLDE-DEBITEUR" Next j 'Cells(j, "AA") = x 'MsgBox x Application.ScreenUpdating = True End Sub
Bonjour Obadj,
As-tu testé?