Microsoft 365 INDEX+EQUIV dont le resultat duplique les lignes par erreur

aeca

XLDnaute Nouveau
Bonjour,
Je m'excuse par avance si ce sujet fait doublon à un autre.
J'ai parcouru tout ce que j'ai pu trouver sur ce sujet mais rien qui ne parle d'une problématique similaire à la mienne.

Il y a une base de données qui est extraite automatiquement et quotidiennement par le système (édition du carnet de commandes).
Nous sommes plusieurs à travailler dessus donc je la télécharge et la duplique dans un tableau nommé "Order book_analyse"
j'ai plusieurs onglets à partir desquels je travaille :
- mon onglet d'analyse
- le second qui recherche et copie uniquement les données sur lesquelles j'ai ajouté un commentaire
- le troisième qui correspond à la feuille dupliquée de la base de données.
- il y en a d'autres après pour le suivi sur plusieurs semaines et les commentaires de l'équipe. Mais ils ne sont pas concernés par la problématique ici.

Je rencontre un problème pour extraire de l'onglet n°3 les commandes liées à la France (FR01 dans la colonne E de l'onglet n°3) et les copier dans l'onglet 1 à partir duquel je travaille.
Afin d'avoir la possibilité de sélectionner sur quel pays je souhaite travailler j'indique dans l'onglet 1, cellule B1, l'organisation sur laquelle je veux travailler.

Au final les lignes sont multipliées !

Voir le doc dans le lien ci-dessous pour une meilleure compréhension :

Je n'arrive pas à trouver ce qui cause ces doublons et ce qui ne va pas dans ma formule.
Pourriez vous m'aider svp?
Merci par avance

aeca
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @aeca ;) ,

Voici une tentative par VBA. Le code est dans le module mImport.

Il y a deux constantes importantes à définir :
La première est : Const Liste_Colonne_a_conserver = "A AA BS / / D E F AX AY G / H Y X"
  • Cela signifie qu'on va copier les colonnes énumérées depuis la feuille Source "O.BOOK..." vers la feuille Cible "Order book...". Le séparateur des colonnes est l'espace. L'ordre des colonnes copiées est celui de la constante depuis la gauche vers la droite (de A à X)
  • Un slash / signifie qu'on insère une colonne vide (dans l'exemple on insère deux colonnes vides après avoir copié la colonne BS et une autre après avoir copié la colonne G.
Le seconde constante est : Const Titre_Colonne_vide = "Titre Vide-1;Titre Vide-2;Titre Vide-3"
  • C'est la liste des titres pour les colonnes vides qu'on insère (ça correspond aux 3 "/" de l'exemple ci-dessus). Le séparateur entre les titres est le point-virgule. Il est possible de ne pas indiquer de titre pour une colonne. Exemple : Titre_Colonne_vide = "Titre Vide-1;;Titre Vide-3" => pas de titre pour la 2ème colonne vide insérée.

Sur la première feuille, choisir le pays dans la cellule B1. Ensuite cliquer sur le bouton bleu "Importer".

Le fichier est ICI. (cliquer sur le lien, le classeur s'ouvre en général dans le navigateur. Dans le menu "Fichier" choisir "Enregistrer sous" puis "Télécharger une copie". Le fichier se télécharge dans votre dossier de téléchargement par défaut.)


Nota 1 : en général, on joint un petit classeur représentatif anonymisé. Dans votre cas, il aurait suffit de laisser dans la base 4 à 5 lignes pour chaque pays, supprimer les feuilles inutiles au problème. Cela aurait suffit pour trouver et tester une solution. Ce n' est que parce que c'est votre première intervention sur XLD, que je me"fends" d'un fichier de 8 méga :p). Sinon pour ceux qui ne veulent que le code :
VB:
Sub Import_Obook_to_Analysis()

' Liste des colonnes de O.BOOK à conserver dans l'ordre
' Un / indique qu'on insère une colonne vide
Const Liste_Colonne_a_conserver = "A AA BS / / D E F AX AY G / H Y X"

' Liste des titre des colonnes vides insérées dans l'ordre (au moins un titre par "/"
Const Titre_Colonne_vide = "Titre Vide-1;Titre Vide-2;Titre Vide-3"

Dim Source As Worksheet, Cible As Worksheet, Pays$, derlig&, xrg As Range
Dim nbrLig&, TitreVide, colEcr&, colVide&, xcol, deb, i&

   deb = Timer
   Set Source = Sheets("O.BOOK - calc with DIVISION map")
   Set Cible = Sheets("Order book analysis")
   Pays = Cible.[b1]
 
   ' copie des lignes du pays désiré
   Application.ScreenUpdating = False
   With Source
      If .FilterMode Then .ShowAllData
      derlig = .UsedRange.Row + .UsedRange.Rows.Count - 1
      Set xrg = .Range("a3:cv" & derlig)
      xrg.Sort key1:=xrg(1, 5), order1:=xlAscending, MatchCase:=False, Header:=xlYes
      xrg.AutoFilter Field:=5, Criteria1:=Pays
      nbrLig = .Cells(Rows.Count, "e").End(xlUp).Row - 2
   End With
 
   With Cible
      .Rows("3:" & derlig).ClearContents
      ' suppression des colonnes non désirées de la source
      ' mettre les colonnes conservées selon l'ordre indiqué
      ' insérer les colonnes vides
      TitreVide = Split(Titre_Colonne_vide & ";;;;;;;;;;;;;;", ";")
      colEcr = 0: colVide = 0
      For Each xcol In Split(Liste_Colonne_a_conserver, " ")
         colEcr = colEcr + 1
         If xcol = "/" Then
            colVide = colVide + 1
            .Cells(3, colEcr) = TitreVide(colVide - 1)
            .Cells(3, colEcr).VerticalAlignment = xlTop
            .Cells(3, colEcr).HorizontalAlignment = xlCenter
            .Cells(3, colEcr).WrapText = True
         Else
            Source.Cells(3, xcol).Resize(nbrLig).Copy .Cells(3, colEcr)
         End If
      Next xcol
      i = .Cells(Rows.Count, "a").End(xlUp).Row
   End With
   If Source.FilterMode Then Source.ShowAllData
   MsgBox "Le filtrage pour <" & Pays & "> s'est exécuté en : " & Format(Timer - deb, "#,##0.0\ sec.") & vbLf & _
         "Nombre d'enregistrements : " & Format(i - 3, "#,##\."), vbInformation
End Sub

///
 
Dernière édition:

aeca

XLDnaute Nouveau
Re,

Voici un petit fichier représentatif qui suffit largement. Il contient des données et la macro.
Il ne pèse que 110 ko.
Bonjour
Merci beaucoup, je vais regarder tout ca.
En effet, je m'en excuse, j'ai envisagé réduire le tableau mais je ne l'ai pas fait car je me suis dit que le nombre de données était peut être à l'origine de l'erreur (ne sait-on jamais). A la place j'ai supprimé le contenu des colonnes confidentielles.

Juste pour savoir, la formule était incorrecte? qu'est-ce qui générait les doublons dans mon premier test?

Car j'aurais souhaité conserver le format original du premier onglet et notamment des deux colonnes masquées (L et M) qui me permettent d'automatiser le transfert des notes dans l'onglet n°2
 

Discussions similaires