Bonjour,
Est-il possible dans une variable tableau de chaîner deux informations string dans un tableau à 1 dimension (avec un séparateur), de filtrer sur la première information pour sortir une variable string correspondant à la deuxième information, laquelle est ensuite entrée dans une cellule?(voircode ci-dessous)
OU faut-il entrer un tableau à 2 dimensions de taille fixe (mais beaucoup plus gros) pour filtrer ensuite sur la première dimension et récupérer l'info dans la deuxième?
J'ai un fichier hétérogène (extrait ci-joint) dans lequel des codes barres sont mélangés dans une seule colonne qu'il s'agisse de groupes ou d'individus. Les groupes sont ou non développés en autant de lignes qu'il y a d'individus. Mon problème est de supprimer les lignes groupe excédentaires, tout en mémorisant le code barre groupe qui doit être dupliqué sur chaque ligne individus.
Une autre possibilité serait de faire un find pour tester chaque ligne, mais çà me paraît lourd. Je ne suis malheureusement pas très à l'aise dans les manipulations de tableaux.
Merci pour votre aide, Serge
Pour les groupes développés, je stocke le couple groupe- individus dans un tableau, que je filtre avec le groupe de chaque individu, si ce tableau a une valeur >-1 , la ligne a déjà été développée et est supprimée.
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
26 'On rentre tous les plotid et le P barcode associé dans une variable tableau, on réinitialise i i = FirstRow For l = FirstRow To LastRow If (Trim(wsSpi.Cells(l, PltidCol)) <> "" And Trim(wsSpi.Cells(l, SubidCol)) = "") Then ReDim Preserve tblPBarcd(l - i) tblPBarcd(l - i) = wsSpi.Cells(l, PltidCol) & "-" & wsSpi.Cells(l, PBarcdCol) Else i = i + 1 End If Next l 'On teste chaque ligne pour détecter les lignes présentes alors qu'elles sont déjà détaillées en individus sur les autres lignes For l = LastRow To FirstRow Step -1 If (Trim(wsSpi.Cells(l, PltidCol)) <> "" And Trim(wsSpi.Cells(l, SubidCol)) <> "" And Trim(wsSpi.Cells(l, PsstpCol)) = "Plant") Then wsSpi.Cells(l, SBarcdCol) = wsSpi.Cells(l, PBarcdCol).Value 'wsSpi.Cells(l, PBarcdCol) = "" tblPBarcdFilter() = Filter(tblPBarcd(), wsSpi.Cells(l, PltidCol).Value, True, vbTextCompare) 'c'est là que çà ne fonctionne plus StrPB = tblPBarcdFilter() StrPB = Right(StrPB, Len(StrPB) - InStr(1, StrPB, "-")) wsSpi.Cells(l, PBarcdCol) = StrPB Else tblPlotidFilter() = Filter(tblPlotid(), Cells(l, PltidCol)) If UBound(tblPlotidFilter()) > -1 Then wsSpi.Rows(l).Delete End If End If
Partager