Doublon après import de données

Résolu/Fermé
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016 - 24 avril 2016 à 10:00
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 - 31 mai 2016 à 04:10
bonjour,

actuellement en licence, je dois créer un fichier avec macros pour appuyer mon rapport de fin d'étude. mon fichier est quasi fini sauf que je rencontre un problème avec une commande macro.
le but est d'intégrer 2 balances (tableau regroupant tous les comptes d'une entreprise de 2 années différentes) et de confronter les informations
mon problème est que j'ai un doublon qui s'affiche quand je veux importer sur ma feuille 4 les données qui existent dans ma feuille 3 et inexistante dans ma feuille 4..je débute et l'erreur ne me saute pas aux yeux :/


voici ma macro:
'Recherche de la dernière ligne dans la balance n-1
DERN_LIGNE_BALANCE_N1 = Sheets(3).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row

'Reprise des nouveaux comptes présents en N-1 et plus présents en N à la suite
For LIGNE_BALANCE_N1 = 7 To DERN_LIGNE_BALANCE_N1
COMPTE_TROUVE = "NON"
COMPTE = Sheets(3).Cells(LIGNE_BALANCE_N1, 1).Value
For LIGNE_BALANCE_VARIATION = 7 To DERN_LIGNE_BALANCE_VARIATION
If Sheets(4).Cells(LIGNE_BALANCE_VARIATION, 1).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 1).Value Then
COMPTE_TROUVE = "OUI"
End If
Next
If COMPTE_TROUVE = "NON" Then
PREMIERE_LIGNE_VIDE = Sheets(4).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
If Sheets(4).Cells(LIGNE_BALANCE_VARIATION, 1).Value <> "COMPTE" Then
Sheets(4).Cells(PREMIERE_LIGNE_VIDE, 1).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 1).Value
Sheets(4).Cells(PREMIERE_LIGNE_VIDE, 2).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 2).Value
End If
End If
If Sheets(3).Cells(LIGNE_BALANCE_N1, 3).Value <> "" Then Sheets(4).Cells(PREMIERE_LIGNE_VIDE, 4).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 3).Value
ElseIf Sheets(3).Cells(LIGNE_BALANCE_N1, 4).Value <> "" Then
Sheets(4).Cells(PREMIERE_LIGNE_VIDE, 4).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 4).Value * -1
End If
Next

j'espère que vous pourrez trouver le hic dans cette macro..je pourrez peut-être envoyer mon ficher excel au courageux ou la courageuse qui voudra bien se lancer la dedans.. ça sera plus parlant!
merci d'avance ;)

12 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
24 avril 2016 à 10:38
Bonjour
Essayez ceci
    For LIGNE_BALANCE_N1 = 7 To DERN_LIGNE_BALANCE_N1
        COMPTE_TROUVE = "NON"
        COMPTE = Sheets(3).Cells(LIGNE_BALANCE_N1, 1).Value
        For LIGNE_BALANCE_VARIATION = 7 To DERN_LIGNE_BALANCE_VARIATION
            If Sheets(4).Cells(LIGNE_BALANCE_VARIATION, 1).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 1).Value Then COMPTE_TROUVE = "OUI"
        Next
        PREMIERE_LIGNE_VIDE = Sheets(4).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
        If COMPTE_TROUVE = "NON" Then
            If Sheets(4).Cells(LIGNE_BALANCE_VARIATION, 1).Value <> "COMPTE" Then
                Sheets(4).Cells(PREMIERE_LIGNE_VIDE, 1).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 1).Value
                Sheets(4).Cells(PREMIERE_LIGNE_VIDE, 2).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 2).Value
            End If
        End If
        If Sheets(3).Cells(LIGNE_BALANCE_N1, 3).Value <> "" Then
            Sheets(4).Cells(PREMIERE_LIGNE_VIDE, 4).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 3).Value
        ElseIf Sheets(3).Cells(LIGNE_BALANCE_N1, 4).Value <> "" Then
            Sheets(4).Cells(PREMIERE_LIGNE_VIDE, 4).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 4).Value * -1
        End If
    Next

Cdlt
0
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016
24 avril 2016 à 12:18
bonjour,
je viens d'essayer et cela me donne le même résultat. j'ai toujours un doublon. en fait il me reprend l'intégralité de ma feuille 3 . il n'exclut pas les données qui sont identiques à la feuille 4
cdt
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
24 avril 2016 à 12:33
Curieux
N'ayant pas votre fichier sous les yeux, j'en ai crée un avec les feuilles 3 et 4.
Dans la feuille 4 j''ai recopier quelques valeurs de la feuille 3, et j'ai lancé la macro, celles qui sont déjà présentes dans la feuille 4 ne sont pas recopiées. Le problème se situe ailleurs.
Allez sur la feuille 4 et cliquer sur le bouton.
https://www.cjoint.com/c/FDykGEIFbNw
Cdlt
0
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016
24 avril 2016 à 13:26
puis-je vous transmettre mon fichier?

https://www.cjoint.com/c/FDylymwG6wH

le problème ce situe dans la feuille variation, la deuxième ligne "55555 - capital" (où il y a juste un solde inscrit) ne devrait pas apparaître étant donné que je lui ai demandé au préalablement :
- importer les COMPTE, INTITULE et SOLDES de la feuille 2 sur la feuille 4
- de me comparer les soldes des comptes identiques des feuilles 2 et 3 et d'importer dans la feuille 4

maintenant je cherche à importer sur la feuille 4, les COMPTE, INTITULE et SOLDE qui sont présent en feuille 3 et qu'il manque en feuille 4

cdt
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
24 avril 2016 à 14:40
Le problème se situe ailleurs et apparemment, c'est par ici
    'Recherche de la dernière ligne dans la balance n-1
 '   DERN_LIGNE_BALANCE_N1 = Sheets(3).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    
    'Recherche de la dernière ligne dans la balance n-1
   DERN_LIGNE_BALANCE_VARIATION = Sheets(4).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    
'Reprise des nouveaux comptes présents en N-1 et plus présents en N à la suite
      For LIGNE_BALANCE_N1 = 7 To DERN_LIGNE_BALANCE_N1
        COMPTE_TROUVE = "NON"
        COMPTE = Sheets(3).Cells(LIGNE_BALANCE_N1, 1).Value
        For LIGNE_BALANCE_VARIATION = 7 To DERN_LIGNE_BALANCE_VARIATION


la ligne suivante est en remarque "
DERN_LIGNE_BALANCE_N1 = Sheets(3).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
"Enlevez la quote(apostrophe) en début de phrase.
Cdlt
0
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016
24 avril 2016 à 15:01
ça fonctionne !! merci beaucoup :)
je vais finir la rédaction de mon mémoire je vous posterai ma note après mon oral (le 20 mai) ! :))

bonne continuation

cdt
0
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016
14 mai 2016 à 15:08
bonjour,

je reviens sur ce même post. je me suis replongé dans cette macro pour préparer mon oral et j'ai deux petits problèmes .

1er problème: la macro vu précédemment fonctionne sur l'étude de quelques chiffres "test" (sur 5 -6 lignes) comme on l'a déjà vu ci -dessus mais dès que je souhaite utiliser la macro pour un cas concret (sur une plus grande liste de chiffre = a peu près 500 lignes) je me retrouve de nouveau avec le problème de doublon!

2ème problème : idem dès que je veux vérifier si la somme des nombres des colonnes c et d (dans les onglets 2 et aussi 3) est identique et m'afficher un message d'erreur si ce n'est pas le cas ,ça fonctionne sur une série de chiffres " test" mais pas sur une longue série de chiffre. j'ai bien vérifié les 2 colonnes sont identiques mais il m'affiche le message d'erreur comme si ça n'était pas le cas.

je vous transmet le fichier excel et vous trouverez dans le dernier onglet les tableaux a recopier sur les onglets 2 et 3 pour la démonstration (balances n et n-1)
https://www.cjoint.com/c/FEonhlv4pcH

merci d'avance,

jennifer
0

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

Posez votre question
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
14 mai 2016 à 16:11
Bonjour
Pour la question2, appliquez l'arrondi avec 2chiffres après la virgule, comme ceci
'vérifier si la balance N est équilibrée
     Sheets(2).Select
     If Round(Application.Sum(Range("C7").EntireColumn), 2) <> Round(Application.Sum(Range("D7").EntireColumn), 2) Then
     MsgBox "La balance N n'est pas équilibrée", vbInformation, "Avertissement"
     End If    
'vérifier si la balance N-1 est équilibrée
     Sheets(3).Select
     If Round(Application.Sum(Range("C7").EntireColumn), 2) <> Round(Application.Sum(Range("D7").EntireColumn), 2) Then
     MsgBox "La balance N-1 n'est pas équilibrée", vbInformation, "Avertissement"
     End If

Pour la question 1, donnez moi des précisions, où y- a t-il des doublons? Où dois -je regarder? quelle colonne? Aidez-moi un peu car je ne peux reprendre toute votre application pour essayer de comprendre ce que vous avez voulu faire et on gagnera du temps.
cdlt
0
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016
14 mai 2016 à 17:26
-le problème n°1 est réglé merci!

-pour le problème n°2 : j'ai des doublons dans l'onglet 4 (variation) dans la colonne D où il y a l'intitulé "SOLDE N-1" à partir de la ligne 222 . en fait il a recopier 2 fois les données de n-1
je cherche à importer sur la feuille 4, les COMPTE, INTITULE et SOLDE qui sont présent en feuille 3 et qu'il manque en feuille 4
le problème ce situe sur la même macro que la dernière fois
la ligne de commande dans vba est intitulé "Reprise des nouveaux comptes présents en N-1 et plus présents en N à la suite" en vert . je pense que le problème vient d'ici

cdt
jennifer
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
14 mai 2016 à 17:42
Avez vous penser en premier lieu à effacer les précédentes données dans la feuille "VARIATION" avant toutes recopies. car les valeurs de la feuille "BALANCE N-1" s'arrête à la ligne 221, donc dans la feuille "VARIATION", tout ce qui est après la ligne 221 et qui existait auparavant est toujours maintenu. Effacez le contenu des feuilles C, D et E de la feuille "VARIATION" et relancez la macro, tout est correct.
0
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016
15 mai 2016 à 00:53
j'ai effacer le contenu des colonnes mais ça me fait les doublons quand même!
je vous ai mis en jaune dans la feuille variation tout ce qui ne devrait pas apparaître.
pour vérifier plus facilement vous pouvez vous baser sur les numéro de comptes en colonne A sur variation. ils sont triés dans l'ordre croissant et ils commencent pas le chiffre 1 à 7 .après la ligne 221 les numéros de comptes repassent à 1
la balance N-1 est recopiée en double.

https://www.cjoint.com/c/FEowZMLnT0H

dans la macro je dois avoir 3 commandes "principales":
1-importer la balance N en entier en feuille variation
2-importer uniquement les soldes de la balance n-1 en feuille variation dont les comptes sont déjà existant en feuille variation et les mettre sur la même ligne que les soldes N déjà inscrits
3-importer les comptes, les intitulés et les soldes de la balance n-1 en feuille variation qui sont manquant dans la feuille variation et les mettre sur la première ligne vide à la suite
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
15 mai 2016 à 05:22
Bonjour
Merci, avec l'exemple je comprends mieux.
Votre problème vient du fait que vous comparez 2 valeurs qui en apparence sont égales mais différentes pour excel. En effet lors du test d'égalité entre les N° de compte dans la boucle suivante:
  For LIGNE_BALANCE_VARIATION = 7 To DERN_LIGNE_BALANCE_VARIATION
            If Sheets(4).Cells(LIGNE_BALANCE_VARIATION, 1).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 1).Value Then COMPTE_TROUVE = "OUI"
        Next
Sur la feuille "BALANCE N" et "BALANCE N-1" les n° de compte sont au format texte, alors que dans la feuille "VARIATION" ils sont au format standard. Ce qui fait que lors de la comparaison il n'y a jamais d'égalité, donc il recopie tout. Pour corriger le problème, soit vous mettez tout au même format soit vous modifier votre test en multipliant par 1 la deuxième condition, ce qui donne:
        For LIGNE_BALANCE_VARIATION = 7 To DERN_LIGNE_BALANCE_VARIATION
            If Sheets(4).Cells(LIGNE_BALANCE_VARIATION, 1).Value = Sheets(3).Cells(LIGNE_BALANCE_N1, 1).Value * 1 Then COMPTE_TROUVE = "OUI"
        Next

N'oubliez pas de rajouter au début de code la ligne qui efface les anciennes données de la feuille "VARIATION":
  Sheets("VARIATION").Range("A7:E" & [A10000].End(xlUp).Row).ClearContents
.
Un conseil, évitez d'appeler les feuilles par leur numéro "sheets(2)", mettez plutôt leur nom "Sheets("BALANCE")", c'est plus simple pour l'analyse du code. Et pour éviter tout problème lié au majuscules et minuscules (car la aussi, VBA fait la distinction), saisissez en première ligne du module (au-dessus du titre de la première macro) la ligne suivante "Option compare text".
Voilà, bonne journée
Cdlt
0
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016
15 mai 2016 à 09:41
bonjour,

effectivement j'ai changé le format ça fonctionne beaucoup mieux.
il ne m'a pas repris en double la balance N-1 c'est bon .

par contre il ne me recopie pas en intégralité la dernière ligne de la BALANCE N-1 (ligne 205 surligné en jaune) sur la feuille VARIATION (ligne 245 surligné en jaune) . il fait un blocage sur la dernière ligne de la BALANCE N-1 il ne me récupère que le solde et pas le COMPTE et INTITULE

https://www.cjoint.com/c/FEphNjhnGFH

cdt
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
15 mai 2016 à 10:57
il ne me recopie pas en intégralité la dernière ligne de la BALANCE N-1 (ligne 205 surligné en jaune) FAUX, c'est en ligne 221.

Pour le reste, vous recopier systématiquement la valeur (Solde N ou Solde N-1) à la suite, si le compte n'est pas trouvé il conserve la ligne avec le compte et le libellé, sinon il continu la boucle, donc en fin de programme vous avez toujours 1 ligne d'avance sans compte ni libellé, il faut donc effacer cette ligne si le compte et le libellé sont vides.
https://www.cjoint.com/c/FEpiZfzY8Qw
Cdlt
0
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016
15 mai 2016 à 11:26
oui !! merci pour les explications . tout fonctionne !!

merci beaucoup ! :)

bonne journée,
jennifer
0
jenny57_65 Messages postés 10 Date d'inscription samedi 23 avril 2016 Statut Membre Dernière intervention 30 mai 2016
30 mai 2016 à 21:38
bonjour,

j'ai eu 17/20 à mon oral et mon mémoire! du coup j'ai obtenu ma licence avec mention

encore merci pour votre aide!

bonne continuation

cdt
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
31 mai 2016 à 04:10
Bonjour
EXCELlent! Félicitations et bonne chance pour la suite de vos projets.
Cordialement
0