Problème colonne

Bonjour, j'aimerais sélectionner plusieurs colonne en fonction de valeurs se trouvant dans un array. Le problème c'est que à chaque itération, il sélectionne bien la colonne mais la précédente n'est plus sélectionnée. Cela est-il possible ? Merci

ActiveCell.Offset(0, i2).EntireColumn.Activate

Tiens, nouveau sujet en réplique... VBA t'aide puisque la sélection est une inutilité patente (au passage Select et Activate c'est un peu différent !), il suffit de désigner de regrouper l'ensemble des plages que l'on veut rassembler avec Union et de passer à l'action à réaliser sur l'ensemble (que tu caches soigneusement)...

MFerrand a écrit :

Tiens, nouveau sujet en réplique... VBA t'aide puisque la sélection est une inutilité patente (au passage Select et Activate c'est un peu différent !), il suffit de désigner de regrouper l'ensemble des plages que l'on veut rassembler avec Union et de passer à l'action à réaliser sur l'ensemble (que tu caches soigneusement)...

Désolé je n'ai pas compris. Je cherche à pouvoir sélectionner plusieurs colonnes et ne cherche pas à cacher quelque chose.

Merci

A moins d'un vice particulier qui pousse irrépressiblement à sélectionner, quand on sélectionne c'est dans le but de faire quelque chose d'autre que sélectionner.

Alors plutôt que faire : Je sélectionne l'objet, puis j'agis sur la sélection

en faisant : j'agis sur l'objet

j'ai le même résultat avec une opération en moins et autant de temps de gagné !

Donc la question principale est : qu'y a-t-il à faire sur cet objet Range ?

et la question subsidiaire : quels sont les critères permettant de délimiter l'objet sur lequel on doit agir ?

(car pas très loquace non plus sur ce point, juste évocation d'un tableau dans lequel ils seraient consignés !)

MFerrand a écrit :

A moins d'un vice particulier qui pousse irrépressiblement à sélectionner, quand on sélectionne c'est dans le but de faire quelque chose d'autre que sélectionner.

Alors plutôt que faire : Je sélectionne l'objet, puis j'agis sur la sélection

en faisant : j'agis sur l'objet

j'ai le même résultat avec une opération en moins et autant de temps de gagné !

Donc la question principale est : qu'y a-t-il à faire sur cet objet Range ?

et la question subsidiaire : quels sont les critères permettant de délimiter l'objet sur lequel on doit agir ?

(car pas très loquace non plus sur ce point, juste évocation d'un tableau dans lequel ils seraient consignés !)

J'ai joint un fichier en exemple. Si on va dans le code et que l'on fait pas à pas, on voit bien qu'il sélectionne 1 colonne ensuite il sélectionne la deuxième colonne et ainsi de suite or moi j'aurais aimé qu'il garde en sélection les précédente.

Merci

5test.xlsm (14.87 Ko)

C'était pas vraiment parti pour arriver au bout... problèmes de méthode, de syntaxe...

La question étant : définir une plage regroupant des colonnes dont la cellule-tête comporte l'un des noms listés dans un tableau.

Méthode, on parcourt les cellules susceptibles de contenir ces noms, autant de fois qu'il y a de noms à trouver pour chercher à chaque fois l'un des noms. A chaque nom trouvé on identifie la colonne qu'on cumule avec les précédentes trouvées dans une variable plage.

Sub mfc()
    Dim nom, col As Range, i%, j%, k%
    nom = Array("mon_mot1", "mon_mot2", "mon_mot3", "mon_mot4")
    With Worksheets("Feuil1")
        k = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For j = 0 To UBound(nom)
            For i = 1 To k
                If .Cells(1, i) = nom(j) Then
                    If Not col Is Nothing Then
                        Set col = Union(col, Columns(i))
                    Else
                        Set col = .Columns(i)
                    End If
                    Exit For
                End If
            Next i
        Next j
    End With

End Sub

A l'issue de l'exécution de ce bout de code on disposera d'une variable col à laquelle auront été affectées les colonnes cherchées, ce qui peut représenter une plage discontinue si les colonnes ne sont pas contiguës.

Vu sont intitulé, la procédure devrait se poursuivre par quelque chose comme :

    With col.FormatConditions
        .Delete
        With .Add(..........)
            ........
        End With
    End With

Je ne pense pas que traiter ainsi des colonnes entières soit une bonne chose, si l'on veut éviter d'alourdir inutilement son classeur, mais c'est un autre problème...

Merci je vais regarder ça. Il me semble avoir trouvé une autre solution plutôt simple.

Je suggère surtout : apprendre à programmer en VBA, pour au moins parvenir à ne plus penser "Select" !

Rechercher des sujets similaires à "probleme colonne"