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.ActivateTiens, nouveau sujet en réplique...
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,
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
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 SubA 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 WithJe 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" !