Magic_Doctor
XLDnaute Barbatruc
Bonjour,
Pour mieux saisir le sens de la macro que j'expose ici, je décris dabord le problème.
Je veux "traiter" 6 cellules qui se trouvent toutes sur la même ligne.
Pour ce faire, je décide de passer par une boucle.
Problème : les cellules en question ne sont pas toutes équidistantes : AE50, AO50, AY50, AZ50, BJ50, BK50.
Certaines cellules sont même contiguës.
J'ai 6 cellules, la boucle fera donc 6 tours : i = 1 To 6
Je connais le Nº de colonne de chacune de ces cellules :
i........col
1........31
2........41
3........49
4........55
5........59
6........63
Au moyen de la fonction "DROITEREG", j'essaie de trouver une fonction : f(i) = col
Malheureusement, la fonction ne marche pas à tous les coups et dans certains cas je dois réajuster.
Cette histoire-là, un tantinet rocambolesque, est uniquement pour le fun, mais ça peut toujours donner des idées...
La macro :
Signalons au passage que s'il n'y avait pas de réajustements, ce serait magnifique pour régler bien des problèmes.
Pourquoi donc ça ne marche pas avec "Switch" (que je viens de connaître grâce à Staple1600) ?
J'en profite pour poser aussi cette question. Quand au moyen d'une macro on fait un copier-coller, la cellule qui est copiée est entourée de "traits d'union" qui scintillent. Je ne me souviens jamais de la sentence pour arrêter ce truc-là.
Merci d'avance pour tout commentaire.
Pour mieux saisir le sens de la macro que j'expose ici, je décris dabord le problème.
Je veux "traiter" 6 cellules qui se trouvent toutes sur la même ligne.
Pour ce faire, je décide de passer par une boucle.
Problème : les cellules en question ne sont pas toutes équidistantes : AE50, AO50, AY50, AZ50, BJ50, BK50.
Certaines cellules sont même contiguës.
J'ai 6 cellules, la boucle fera donc 6 tours : i = 1 To 6
Je connais le Nº de colonne de chacune de ces cellules :
i........col
1........31
2........41
3........49
4........55
5........59
6........63
Au moyen de la fonction "DROITEREG", j'essaie de trouver une fonction : f(i) = col
Malheureusement, la fonction ne marche pas à tous les coups et dans certains cas je dois réajuster.
Cette histoire-là, un tantinet rocambolesque, est uniquement pour le fun, mais ça peut toujours donner des idées...
La macro :
VB:
Sub SchizoBoucle()
Dim i As Byte, col As Variant, celda As Range, cellule As Range
'J'ai dû déclarer col comme Variant et non comme Integer à cause de Switch, sinon ça bloquait d'emblée à "Conditions par Switch"
Set celda = [AE50] 'une des cellules en question (servira uniquement à connaîre la ligne)
For i = 1 To 6
col = Int(0.0833333333 * i ^ 3 - 1.6785714286 * i ^ 2 + 14.6666666667 * i + 18) 'fonction qui permet de calculer approximativement le N° de colonne des cellules
'Conditions par IF :
If i = 3 Then col = col + 2 'réajustement
If i = 4 Then col = col - 3 'réajustement
If i = 5 Then col = col + 3 'réajustement
'Conditions par Switch :
'col = Switch(i = 3, col + 2, i = 4, col - 3, i = 5, col + 3) 'réajustements
Set cellule = Range(Split(Columns(col).Address(ColumnAbsolute:=False), ":")(1) & celda.Row) 'ne marche pas si l'on passe par "Switch"
cellule = cellule.Formula '"traitement" de chaque cellule
Next
End Sub
Pourquoi donc ça ne marche pas avec "Switch" (que je viens de connaître grâce à Staple1600) ?
J'en profite pour poser aussi cette question. Quand au moyen d'une macro on fait un copier-coller, la cellule qui est copiée est entourée de "traits d'union" qui scintillent. Je ne me souviens jamais de la sentence pour arrêter ce truc-là.
Merci d'avance pour tout commentaire.
Dernière édition: