XL 2016 Conserver colonnes en fonctions de leurs valeurs

xamenod

XLDnaute Junior
Bonjour,
voici une macro, qui ne fait pas tout a fait son travail. Le but est de conserver les colonnes suivant la valeur de la cellule en ligne 1 et de supprimer toutes les autres.
Cela se passe bien au début, puis cela bloque et il me faut relancer la macro pour continuer l'opération colonne après colonne.
Sub GARDERCOLONNES()
Application.ScreenUpdating = False

Dim lign As Integer, Der As Integer
Der = Range("A" & Rows.Count).End(xlUp).Row

Dim col As Integer, Dern As Integer
col = col - 1
Dern = Cells(1, Cells.Columns.Count).End(xlToLeft).Column

'efface les colonnes non désirées
For col = 1 To Dern
If Cells(1, col).Value = "Nom" Or Cells(1, col).Value = "Numéro Emplacemt" Or Cells(1, col).Value = "Numéro VdP 1" Or Cells(1, col).Value = "Numéro VdP 2" _
Or Cells(1, col).Value = "1 Recto" Or Cells(1, col).Value = "1 Verso" Or Cells(1, col).Value = "2 Recto" Or Cells(1, col).Value = "2 Verso" Then

Else
Cells(1, col).EntireColumn.Delete

End If

Next col
End Sub


Je vous joint le fichier test.
Je vous remercie, par avance pour votre aide.

Bonne journée
Henry
 

Pièces jointes

  • TEST GARDER COLONNES.xlsm
    13.4 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans le fichier joint je me suis contenté de la suppression des colonnes non désirées.
La fusions des cellules des colonnes A et B n'a pas été gardée.
Pourquoi, puisque vous avez excel 2016 ne pas utiliser les tableaux structurés : Tutoriel tableaux structurés ?

S'il s'agit d'une importation de données, powerquery (inclus dans votre version) pourrait facilement faire le travail, sans macro.

P.S. : la fusion de colonnes dans un tableau de données est toujours une mauvaise idée (surtout s'il doit être traité par vba)

Cordialement
 

Pièces jointes

  • TEST GARDER COLONNES.xlsm
    22.3 KB · Affichages: 2
Dernière édition:

xamenod

XLDnaute Junior
Bonjour Roblochon,
La feuille MEF, ne sert "qu'a" mettre en forme des données qui sont récoltées brutes. Ensuite viens l'exportation de celles-ci dans un fichier formaté avec des cellules fusionnées. Excel n'aime pas ce genre de fusion si les données n'ont pas le même format et comme je peux avoir des milliers de lignes, le faire dans la macro me paraissait le pus simple.
j'ai testé votre macro, dans le fichier que vous avez renvoyé, elle bloque sur l'instruction:

If IsError(Application.Match(Trim(.Cells(1, i)), Noms, 0)) Then

merci pour votre investissement.
Henry
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

j'ai testé votre macro, dans le fichier que vous avez renvoyé, elle bloque sur l'instruction:

If IsError(Application.Match(Trim(.Cells(1, i)), Noms, 0)) Then


Petite correction effectuée ci-dessous
VB:
Option Explicit

Sub GARDERCOLONNES()
    Application.ScreenUpdating = False

    Dim Noms As Variant
    Dim lgCol As Long
    Dim rngCols As Range
    Noms = Array("Nom", "Numéro Emplacement", "Numéro VdP 1", "Numéro VdP 2", "1 Recto", "1 Verso", "2 Recto", "2 Verso")
  
    With ThisWorkbook.Sheets("MEF")
        With .Range("A1").CurrentRegion
            For lgCol = 1 To .Columns.Count
                '
                ' Si le texte de la cellule n'est pas dans le tableau des noms
                ' de colonnes à conserver
                If IsError(Application.Match(Trim(.Cells(1, lgCol)), Noms, 0)) Then
                    '
                    ' Commenter la ligne ci-dessous après test
                    Debug.Print .Cells(1, lgCol)
                    '
                    ' Créer la plage des colonnes à supprimer
                    ' ou ajouter la colonne à la plage créée précédemment
                    If rngCols Is Nothing Then
                        Set rngCols = .Cells(1, lgCol)
                    Else
                        Set rngCols = Union(rngCols, .Cells(1, lgCol))
                    End If
                End If
            Next
        End With
        '
        ' si la plage des rngCols est initialisée
        ' supprimer les colonnes entières
        If Not rngCols Is Nothing Then rngCols.EntireColumn.Delete
    End With
    Application.ScreenUpdating = True
End Sub

La feuille MEF, ne sert "qu'a" mettre en forme des données qui sont récoltées brutes.

Alors powerquery serait tout à fait indiqué.

cordialement
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

J'ai réédité mon précédent message, après avoir corrigé une petite erreur de nom de variable.

Lorsque vous avez une erreur dans une macro qui vous est donnée, essayez d'être le plus précis possible sur le message de l'erreur. Nous ne pouvons pas tout deviner.

cordialement
 

Discussions similaires

Réponses
6
Affichages
228

Membres actuellement en ligne

Statistiques des forums

Discussions
312 106
Messages
2 085 352
Membres
102 871
dernier inscrit
Maïmanko