IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème de codage sur VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 121
    Par défaut Problème de codage sur VBA
    Bonjour à tous,

    Je vous explique "le but du jeux" :

    C'est de prendre les mêmes numéros de sinistres en colonne "J" (parmis plus de 6000 lignes de mon fichier excel) et pour ces mêmes numéros de sinistre trouvé par la macro, si en colonne "H", il y a la présence de 2 codes CIE différents alors on mets un commentaire en colonne "M" : " REGULARISATION CIE TEMPLATE".

    Je vous ai mis en pièce jointe un extrait de mon fichier excel pour que avoir un aperçu : En couleur jaune sur la feuil1 : on voit bien que pour le même sinistre on a pas de code CIE (colonne H) diffétents donc on ne mettra pas de commentaire en colonne M. En revanche, pour la couleur orange on voit bien qu'il a repérer 2 mêmes sinistres mais que leur code CIE en colonne H est différents donc dans ce cas là il faudra mettre un commentaire en colonne "M" : " REGULARISATION CIE TEMPLATE" et idem en couleur bleu (sur le feuille 1 de mon fichier excel en pièce jointe), il s'agit du même cas il a bien trouvé les 4 même sinistres parmis toutes mes lignes sauf que en colonne "H", il y a 2 codes CIE différents donc ici aussi on devra mettre un commentaire en colonne "M" : " REGULARISATION CIE TEMPLATE".

    SINISTRE.xlsx

    Sachant que dans ma colonne M, je vais devoir mettre d'autre commentaire avec d'autres conditions différents. J'espère j'ai étais clair et je compte sur vous les experts je suis débutant, pas facile pour moi

    Je pense que c'est sur cette dernier ligne de mon code où c'est n'est pas logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C > 1 And D < 1 Then .Cells(i, "M") = "REGULARISATION CIE-TEMPLATE"
    Si tu peux me donner ton avis sur le code entier suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    ' Régularisation CIE-TEMPLATE
     
    Dim Tablo
    Dim i As Long
    Dim C As Integer
    With Sheets("SUIVTRANS EN COURS")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To i
    NUMSIN = .Cells(i, "J")
    CODECIE = .Cells(i, "H")
    C = WorksheetFunction.CountIf(.Range("J2:J" & .Range("J" & Rows.Count).End(xlUp).Row), NUMSIN)
    D = WorksheetFunction.CountIf(.Range("H2:H" & .Range("H" & Rows.Count).End(xlUp).Row), CODECIE)
    If C > 1 And D < 1 Then .Cells(i, "M") = "REGULARISATION CIE-TEMPLATE"
    Next i
    End With
    End Sub
    Merci de votre aide ça fait 1 semaine que je galère !

    Cordialement,

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    ton H est renseigné comment:

    et ton H et ton D sont déclaré Où ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D = WorksheetFunction.CountIf(.Range("H2:H" & .Range("H" & Rows.Count).End(xlUp).Row), CODECIE)
    De plus la costruction de ton range me parait bizarre

    tu dis

    A+

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 121
    Par défaut
    Le H est en guillement pour dire que ca correspond à la colonne H non ?
    Peut tu m'aider à corriger le code stp !

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Les arguments de la méthode Cells sont numériques.

    Cette discussion est bizarrement redondante.
    Il aurait mieux valu continuer la précédente.

    Maintenant, je te laisse comparer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Option Explicit
     
    Public Sub essai_sin()
    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")
            dernl = .Range("A" & .Rows.Count).End(xlUp).Row
            For i = 2 To dernl
                    NUMSIN = .Cells(i, 10).Value
                    CODECIE = .Cells(i, 8).Value
                    C = WorksheetFunction.CountIf(.Range("J2:J" & dernl), NUMSIN)
                    D = WorksheetFunction.CountIf(.Range("H2:H" & dernl), CODECIE)
                    If C > 1 And D > 1 Then .Cells(i, 13).Value = "REGULARISATION CIE-TEMPLATE"
            Next i
    End With
     
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 121
    Par défaut
    Merci MarcelG, oui c'est numérique ! ça fonctionne mieux. En revanche sur la fin du code ça fonctionne totalement, car moi ces mêmes numéros de sinistre trouvé par la macro, si en colonne "H", il y a la présence de 2 codes CIE différents alors on mets un commentaire en colonne "M" : " REGULARISATION CIE TEMPLATE".

    Du coup comment dire dans la ligne suivant que si ya 2 code CIE différents avec un même numéro de sinsitre je mets le commentaire en colonne M :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C > 1 And D < 1 Then .Cells(i, "M") = "REGULARISATION CIE-TEMPLATE"

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    re bonjour mon ami

    sur la meme ligne il y a un numéro de sinistre en J et un sous code en H
    si le numéro en H se répète 5 fois et son équivalent en H se répète 5 fois alors il s' agit du même code donc rien ne se passe
    Si le numéro de sinistre se répète 5 fois et le sous numéro en H est de 4 sa veux dire qu'il y a un autre sous numéro en H pour le même numéro de sinistre
    c'est pourquoi j'ai écris : If C > D Then .Cells(i, "M") = "REGULARISATION CIE-TEMPLATE"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub testtt()
     
    Dim Tablo
    Dim i As Long
    Dim C As Integer
    With Sheets("Feuil1")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To i
    NUMSIN = .Cells(i, "J")
    CODECIE = .Cells(i, "H")
    C = WorksheetFunction.CountIf(.Range("J2:J" & .Range("J" & Rows.Count).End(xlUp).Row), NUMSIN)
    D = WorksheetFunction.CountIf(.Range("H2:H" & .Range("H" & Rows.Count).End(xlUp).Row), CODECIE)
    MsgBox C
    If C > D Then .Cells(i, "M") = "REGULARISATION CIE-TEMPLATE"
    Next i
    End With
    End Sub

  7. #7
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    Ca fonctionne ca en excel?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To i
    En tout cas, c'est pas beau d'utiliser la même variable en tant que compteur du for et borne du for...

    l'init de CODECIE, le H devrait etre entre guillemets peut être.

    sinon, je pense que ton test n'est pas bon.

    Dans C tu comptes le nombre de codes companies égal à celui de ta ligne en cours de traitement.
    Dans D tu comptes le nombre de numéro de sinistres égaux à celui de ta ligne en cours de traitement.
    si C = D alors on voit que pour la même entreprise, on a toujours le meme code sinistre.
    Si C<>D alors on a probablement des codes sinistres différents pour une même entreprise


    par contre pas la peine d'ouvrir 15 fois le meme topic

  8. #8
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 121
    Par défaut
    Ecoutez ce que je souhaite et ensuite essayons de refaire le code svp :

    Dans la colonne "J" je veux qu'il me compte parmis toutes les lignes de mon fichier les mêmes N° de sinsitre, par la suite quand il trouve les mêmes numéro de sinistre je souhaite mettre un commentaire en colonne M "REGULARISATION CIE TEMPLATE" si et seulement si en colonne H il y a deux code CIE différents, je dis bien en colonne H !

    Donc il ne faut pas que D = C moi je veux si pour un même numéro de Sinistre et que en colonne H il y a 2 code CIE différents alors je mets le commentaire regardé la pièce jointe dans mon premier message

  9. #9
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    Citation Envoyé par OBADJ Voir le message
    Ecoutez ce que je souhaite et ensuite essayons de refaire le code svp :

    Dans la colonne "J" je veux qu'il me compte parmis toutes les lignes de mon fichier les mêmes N° de sinsitre, par la suite quand il trouve les mêmes numéro de sinistre je souhaite mettre un commentaire en colonne M "REGULARISATION CIE TEMPLATE" si et seulement si en colonne H il y a deux code CIE différents, je dis bien en colonne H !

    Donc il ne faut pas que D = C moi je veux si pour un même numéro de Sinistre et que en colonne H il y a 2 code CIE différents alors je mets le commentaire regardé la pièce jointe dans mon premier message
    Une situation normale dans ton fichier c'est bien:
    pour chaque ligne avec un CIE on doit avoir le même code sinistre?
    Un même code sinistre n'est pas utilisé pour 2 CIE différents

    Donc tu comptes le nombre de codes CIE egaux à celui de ta ligne en cours, tu comptes le nombres de code sinistres egaux à celui de ta ligne en cours, et ensuite tu test qu'ils sont bien égaux. si tu as moins de codes sinistres que de code entreprise, alors c'est qu'il y a 2 sinistres différents pour ton CIE et la ligne en cours auras ton commentaire.

    Citation Envoyé par OBADJ Voir le message
    Non ça ne fonctionne toujours pas...
    ce serait plutôt si C < D le bon test (cf mon message au dessus)

  10. #10
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Ca fonctionne ca en excel?:
    i = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To i
    t'as raison ça fonctionne mais un risque de bug

    Si C<>D alors on a probablement des codes sinistres différents pour une même entreprise
    je crois que C est toujours égal ou supérieur D c'est pourquoi j'ai recommandé if C > D
    code modifié selon ta remarque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub testtt()
    Dim Tablo
    Dim i As Long
    Dim C As Integer
    Dim L As Integer
    With Sheets("Feuil1") ' à adapter
    i = .Range("A" & Rows.Count).End(xlUp).Row
    For L = 2 To i
    NUMSIN = .Cells(L, "J")
    CODECIE = .Cells(L, "H")
    C = WorksheetFunction.CountIf(.Range("J2:J" & .Range("J" & Rows.Count).End(xlUp).Row), NUMSIN)
    D = WorksheetFunction.CountIf(.Range("H2:H" & .Range("H" & Rows.Count).End(xlUp).Row), CODECIE)
    If C > D Then .Cells(L, "M") = "REGULARISATION CIE-TEMPLATE"
    Next L
    End With
    End Sub

  11. #11
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 121
    Par défaut
    Non ça ne fonctionne toujours pas...

  12. #12
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 121
    Par défaut
    Je pense qu'il serait mieux qu'on ce base sur ce code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim dernl As Integer
    Dim i As Integer
    Dim NUMSIN As String, CODECIE As String
    Dim C As Integer, D As Integer
     
    With Sheets("Feuil1")
            dernl = .Range("A" & .Rows.Count).End(xlUp).Row
            For i = 2 To dernl
                    NUMSIN = .Cells(i, 10).Value
                    CODECIE = .Cells(i, 8).Value
                    C = WorksheetFunction.CountIf(.Range("J2:J" & dernl), NUMSIN)
                    D = WorksheetFunction.CountIf(.Range("H2:H" & dernl), CODECIE)
                    If C > 1 And D > 1 Then .Cells(i, 13).Value = "REGULARISATION CIE-TEMPLATE"
            Next i
    End With
     
    End Sub
    En revanche, c'est cette ligne qui me dérange moi car moi je veux pas que D soit > 1, je veux qui repère que si la première ligne en H est différente de la deuxieme ligne alors on met commentaire, toujours sur un même numéro de sinistre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C > 1 And D > 1 Then .Cells(i, 13).Value = "REGULARISATION CIE-TEMPLATE"

  13. #13
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    remplacer dans cette partie de code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C > D Then .Cells(L, "M") = "REGULARISATION CIE-TEMPLATE"
    et donner un seul exemple qui donne un faux résultat

  14. #14
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    Citation Envoyé par OBADJ Voir le message
    Je pense qu'il serait mieux qu'on ce base sur ce code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim dernl As Integer
    Dim i As Integer
    Dim NUMSIN As String, CODECIE As String
    Dim C As Integer, D As Integer
     
    With Sheets("Feuil1")
            dernl = .Range("A" & .Rows.Count).End(xlUp).Row
            For i = 2 To dernl
                    NUMSIN = .Cells(i, 10).Value
                    CODECIE = .Cells(i, 8).Value
                    C = WorksheetFunction.CountIf(.Range("J2:J" & dernl), NUMSIN)
                    D = WorksheetFunction.CountIf(.Range("H2:H" & dernl), CODECIE)
                    If C > 1 And D > 1 Then .Cells(i, 13).Value = "REGULARISATION CIE-TEMPLATE"
            Next i
    End With
     
    End Sub
    En revanche, c'est cette ligne qui me dérange moi car moi je veux pas que D soit > 1, je veux qui repère que si la première ligne en H est différente de la deuxieme ligne alors on met commentaire, toujours sur un même numéro de sinistre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C > 1 And D > 1 Then .Cells(i, 13).Value = "REGULARISATION CIE-TEMPLATE"
    Le countif, il me semble que cela compte toutes les lignes dans le range indiqué egal au 2eme parametre....
    donc si tu as plus d'une ligne et toujours le même code sinistre ou compagnie, ton C et ton D seront toujours supérieurs à 1, donc ton code ne marche pas (a mon avis)
    Sans se concerter, BENNASR et moi arrivons à la même conclusion....

  15. #15
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 121
    Par défaut
    Tylert non tu n'as pas compris C et D sont à part je veux pas que C soit > à D, je veux que C soit bien égale au même sinistre et après D c'est autre chose (autre condition) qui dit que si dans dans la colonne H il y a 2 codes CIE différents. Donc C et D n'ont rien à voir ensemble dans le sens je pense que ça ne devrait pas être C>D

    Avez vous faits le test sur mon fichier excel en pièce jointe svp ?

    Merci de testé pour voir si vous avez raison car moi ça fonctionne pas.

  16. #16
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    Citation Envoyé par OBADJ Voir le message
    Tylert non tu n'as pas compris C et D sont à part je veux pas que C soit > à D, je veux que C soit bien égale au même sinistre et après D c'est autre chose (autre condition) qui dit que si dans dans la colonne H il y a 2 codes CIE différents. Donc C et D n'ont rien à voir ensemble dans le sens je pense que sa devrait être pas être C>D
    le probleme n'est pas ce que tu veux, le probleme c'est ce que tu codes.
    On te dit que le C comptes toutes les lignes avec un code sinistre égal au code sinistre de ta ligne en cours.
    D comptes toutes les lignes avec un code compagnie egal au code compagnie de ta ligne en cours.

    Donc pour savoir si il y a plusieurs code sinistre différents pour un même code compagnie, il faut comparer C et D, et si C est inférieur à D, alors c'est qu'on a plus de 2 codes sinistres différents pour un même code companie.

    Citation Envoyé par OBADJ Voir le message
    Avez vous faits le test sur mon fichier excel en pièce jointe svp ?

    Merci de testé pour voir si vous avez raison car moi ça fonctionne pas.
    tu as testé avec C<D?
    C>D c'est pas bon selon moi.

  17. #17
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Il te faut dès lors passer par un dictionnaire des compagnies attaché à chaque sinistre.
    Si le compte de dictionnaire est > 1 alors la mention est portée.

    Il doit y avoir plus sophistiqué. Mais l'esprit est là.

    Ne pas oublier d'activer la référence "Microsoft Scripting Runtime" afin de bien déclarer le dictionnaire ee en faciliter la saisie des méthodes et propriétés.

    A comprendre d'abord. Pas de copier/coller. Volontairement, je n'ai pas mis de commentaire.
    A adapter ensuite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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
                    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

  18. #18
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2018
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 121
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Salut,

    Il te faut dès lors passer par un dictionnaire des compagnies attaché à chaque sinistre.
    Si le compte de dictionnaire est > 1 alors la mention est portée.

    Il doit y avoir plus sophistiqué. Mais l'esprit est là.

    Ne pas oublier d'activer la référence "Microsoft Scripting Runtime" afin de bien déclarer le dictionnaire ee en faciliter la saisie des méthodes et propriétés.

    A comprendre d'abord. Pas de copier/coller. Volontairement, je n'ai pas mis de commentaire.
    A adapter ensuite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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
                    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
    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,

  19. #19
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    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é...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de réservation sur vba
    Par Pierreschu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/01/2018, 13h06
  2. [XL-2007] problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2010, 17h01
  3. Problème au niveau codage sur unreal.
    Par FloR3nT dans le forum IRC / mIRC
    Réponses: 0
    Dernier message: 07/04/2009, 13h50
  4. Problème de requêtage sur Interbase 6.0 via ODBC en VBA-E
    Par GriFfith_ dans le forum InterBase
    Réponses: 3
    Dernier message: 01/09/2008, 09h47
  5. Réponses: 4
    Dernier message: 16/06/2005, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo