Supprimer colonnes si n'appartient pas à "Array"

Salut à tous,

Je bloque sur un problème tout bête et ca commence à me rendre fou... Je m'explique, j'ai des colonnes que j'ai identifié par des variables et j'aimerai uniquement garder celles-ci. J'ai compris qu'il fallait que j'indique toutes ses colonnes dans Array mais je n'arrive pas à faire le lien avec mes variables. J'ai quelque chose qui ne doit pas être très loin du correct mais mon argument "i" dans IsInArray n'est pas bon et je ne sais donc pas comment faire...

Sub array()

Dim Col_pa, Col_da, Col_dan, Col_ca, Col_ca2, Col_fm, Col_f As Variant
Dim i As Integer

'je vous passe l'identifcation de toutes les colonnes mais elles prennent bien leur valeurs

Last_col = Sheets(1).Cells(Columns.Count, Rows(1)).End(xlUp).Offset(0, 1).Column

MyArray = Array(Col_pa, Col_da, Col_dan, Col_ca, Col_ca2, Col_fm, Col_f)

For i = Col_f To Last_col

If IsInArray(i, MyArray) = False Then
Columns(i).Delete
End If

Next i

End Sub

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = UBound(Filter(arr, stringToBeFound)) > -1
End Function

Bonjour,

Un exemple qui supprime par exemple toutes les colonnes sauf la 1 et la 3. Après vous avez omis l'identification des variables donc difficile d'aller plus loin.

Sub TEST()
Dim Col_pa, Col_da, Col_dan, Col_ca, Col_ca2, Col_fm, Col_f As Variant
Dim i%, LAST_COL%
Dim MyArray()
Col_pa = 3
Col_f = 1
'je vous passe l'identifcation de toutes les colonnes mais elles prennent bien leur valeurs
LAST_COL = Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1).Column
MyArray = Array(Col_pa, Col_da, Col_dan, Col_ca, Col_ca2, Col_fm, Col_f)
For i = LAST_COL To Col_f Step -1
    If IsInArray(i, MyArray) = False Then Columns(i).Delete
Next i
End Sub

Function IsInArray(stringToBeFound, arr As Variant) As Boolean
IsInArray = UBound(Filter(arr, stringToBeFound)) > -1
End Function

Cdlt,

Magnifique, merci beaucoup pour votre réponse c'est exactement ce que je cherchais.

Seulement je ne comprend pas pourquoi mon code ne marchait pas du coup...

Bonjour,

Merci pour votre retour. En fait lorsque j'ai recopié votre code j'ai eu un message d'erreur d'incompatibilité de type 13 qui correspond à une erreur de dimensionnement de variable. En effet dans votre fonction IsInArray vous déclarez l'argument stringToBeFound comme une valeur de type textuelle String, or i, comme je l'utilise dans la sub TEST est une variable de type numérique Integer (1, 3, etc ...).

J'ai donc supprimé la déclaration de la variable stringToBeFound en la laissant vide ce qui a pour effet de la présupposer comme Variant, qui couvre tous mes cas possibles mais demande un peu plus de mémoire, ce qui ne me semble pas trop dérangeant au vu du faible nombre de données traitées.

J'espère que l'explication vous semble claire et vous aidera dans le futur sur le dimensionnement et typage des variables.

Cdlt,

Encore merci pour votre réponse très claire. Très bonne continuation.
cdlt

Rechercher des sujets similaires à "supprimer colonnes appartient pas array"