Fonction Find avec critere de recherche variable

Bonjour,

Je reçois périodiquement des fichiers dont les colonnes ne sont pas toujours à la même place.

Avant de traiter ces fichiers, je commence donc pas ré agencer les colonnes.

Je bute sur le code suivant, qui bugue (Variable non définie)

Sub Déplact_Colonnes()

    Dim Registre As Worksheet
    Set Registre = ThisWorkbook.Worksheets("ENVOI_Juin")                         '--- DONNEE A SAISIR
    Registre.Select

    Const Col1 As String = "Lieu"
    .....
    Const Col21 As String = "Nom"

    Dim i As Integer
    For i = 1 To 21
    Rows(1).Find(What:=Col & i, LookAt:=xlWhole).Activate
    ActiveCell.EntireColumn.Select
    Selection.Cut
    Columns("A:A").Select
    Next i

End Sub

Je précise que toutes les colonnes existent bel et bien avec les libellés précisés en variable Col i.

J'ai manifestement un problème avec la syntaxe du Find (What; Variable ...)

Merci infiniment pour vos conseils éclairés.

Bonjour,

Un essai ...

Dans le array "arrCol", place les noms de feuilles de la dernière à la première.

Un array commence à 0 ... d'où "For i = 0 to 20 (pour 21 items)

Sub Déplact_Colonnes()
Dim arrCol() As String
Dim i As Integer
Dim Registre As Worksheet

Set Registre = ThisWorkbook.Worksheets("ENVOI_Juin")
    Registre.Activate

    arrCol = Split("Nom, .... ,Lieu", ",")

    For i = 0 To 20
        Rows.Find(What:=arrCol(i), LookAt:=xlWhole).EntireColumn.Cut
        Columns("A:A").Insert Shift:=xlToRight
    Next i
End Sub

ric

Bonjour Ric,

Merci pour cette proposition.

Ton code est bien plus séduisant que le mien.

Sur le déplacement de 6 colonnes comme indiqué sur le code ci-dessous, erreur de compilation (Nombre d'arguments incorrect ou affectation de propriété incorrecte).

Je bloque

Dim arrCol() As String
    Dim i As Integer

    arrCol = Split("Adresse", "Code Postal", "Ville", "Pays", "Fonction", "Prénom", "Nom")

    For i = 0 To 6
        Rows(1).Find(What:=arrCol(i), LookAt:=xlWhole).EntireColumn.Cut
        Columns("A:A").Insert Shift:=xlToRight
    Next i

Il doit y avoir quelque chose d'évident, mais je bloque.

Merci pour ton éclairage.

Bonjour,

On place des guillemets (") seulement au début et à la fin de la liste > pas d'espace entre la virgule (,) et le prochain nom ... et enfin, l'utilisation de "Split" (séparer) nécessite de mentionner le critère de "splitatage" (si je peux me permettre ce nouveau mot ) > ","

Dim arrCol() As String
    Dim i As Integer

    arrCol = Split("Adresse,Code Postal,Ville,Pays,Fonction,Prénom,Nom", ",")

    For i = 0 To 6
        Rows(1).Find(What:=arrCol(i), LookAt:=xlWhole).EntireColumn.Cut
        Columns("A:A").Insert Shift:=xlToRight
    Next i

ric

Tout fonctionne à présent.

Tu m'apprends un truc qui va me permettre d'améliorer sensiblement pas mal de mes codes (esthétique et performance).

Merci infiniment Ric.

ric

Rechercher des sujets similaires à "fonction find critere recherche variable"