1 pièce(s) jointe(s)
Find ou utilisation variable tableau ?
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
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
| '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 |
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.
Find ou utilisation variable tableau
Merci, je vais donc utiliser un tableau à deux dimensions!
ST