Je fais de nouveau appel à votre expertise VBA. Ci-dessous une image pour illustrer mon propos :
Dans mon code, je recherche d'abord à l'aide de la fonction .Find le titre de la première ligne. Une fois trouvée, le code récupère la valeur de la colonne correspondante (ici 15 car colonne O).
Mon idée est donc d'initialiser une variable i à cette valeur puis de l'incrémenter de façon à mettre une condition sur toutes les colonnes fusionnées avec la cellule 15.
En français mon code donnerait :
recherche numéro colonne où valeur = Titre de la cellule fusionnée à la première ligne ' pas de pb pour cette ligne
i = ce numéro de colonne ' monrange.Column
j = i Tant que j = i ou que la colonne j est fusionnée avec la colonne i à la première ligne alors
action à réaliser sur chaque colonne j
Fin tant que
j = j + 1
Quelqu'un saurait-il traduire la ligne en rouge en vba ?
re
non c'est pas bon ,tu utilise un object range là ou il devrait y avoir le string address de l'object range
la seule ocasion de mette des objects range dans les parenthèses c'est si il y en a 2
range(cel1,cel2)--> bon
range(cel1)--> pas bon
donc dans le style de ton code c'est ceci MAIS!!!!!!c'est ce que l'on appelle du code spaghetti
VB:
Sub test()
colmode = 15
Set mafeuille = Sheets(1)
With mafeuille
MsgBox .Range(.Cells(1, colmode).MergeArea.Address).Columns(.Range(.Cells(1, colmode).MergeArea.Address).Columns.Count).Column
End With
End Sub
c'est imbitable
maintenant si tu étage correctement ça peut donner ceci
c'est un peu plus lisible
VB:
Sub test2()
colmode = 15
Set mafeuille = Sheets(1)
With mafeuille.Cells(1...
@jmfmarques, j'ai testé avec ta ligne mais un simple offset ne permet apparemment pas de sortir de la cellule fusionnée, il passe à la colonne suivante (16) que la cellule soit fusionnée ou pas avec la précédente colonne
@patricktoulon super c'est exactement ce que je cherchais
Pour mon cas, la valeur 15(colonne O) est stockée dans ma valeur integer colmode et ce bout de code concerne la ligne 1
J'ai donc voulu adapter ta ligne avec des range:
Range(Cells(1, colmode)).MergeArea.Cells(Range(Cells(1, colmode)).MergeArea.Cells.Count).column
Bien qu'à vu d’œil cette écriture me semblait farfelue, je l'ai quand même testée et sans surprise ça ne fonctionne pas
re Range(Cells(1, colmode) c'est la [O1] on est bien d'accords
ce qui correspond à ta capture
ta range de sous titre c'est donc msgbox [O1].mergearea.offset(1).address
re
non c'est pas bon ,tu utilise un object range là ou il devrait y avoir le string address de l'object range
la seule ocasion de mette des objects range dans les parenthèses c'est si il y en a 2
range(cel1,cel2)--> bon
range(cel1)--> pas bon
donc dans le style de ton code c'est ceci MAIS!!!!!!c'est ce que l'on appelle du code spaghetti
VB:
Sub test()
colmode = 15
Set mafeuille = Sheets(1)
With mafeuille
MsgBox .Range(.Cells(1, colmode).MergeArea.Address).Columns(.Range(.Cells(1, colmode).MergeArea.Address).Columns.Count).Column
End With
End Sub
c'est imbitable
maintenant si tu étage correctement ça peut donner ceci
c'est un peu plus lisible
VB:
Sub test2()
colmode = 15
Set mafeuille = Sheets(1)
With mafeuille.Cells(1, colmode).MergeArea
MsgBox .Cells(.Cells.Count).Column
End With
End Sub