XL 2016 VBA - condition tant que la colonne est fusionnée avec x

Remteyss

XLDnaute Junior
Bonjour le forum,

Je fais de nouveau appel à votre expertise VBA. Ci-dessous une image pour illustrer mon propos :
1587040850614.png

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 ? :confused:

Merci par avance !
 
Solution
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...

patricktoulon

XLDnaute Barbatruc
bonjour le fil
te donnera l'index par rapport au sheet actif de la dernière colonne de la fusion en toute circonstance
VB:
MsgBox [O15].MergeArea.Cells([O15].MergeArea.Cells.Count).Column
de la meme maniere que ceci d'ailleurs
VB:
MsgBox [O15].MergeArea.Columns([O15].MergeArea.Columns.Count).Column
 
Dernière édition:

Remteyss

XLDnaute Junior
Bonjour et merci pour vos retours,

@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 :oops:
 

Remteyss

XLDnaute Junior
Ok super merci !
Peux-tu simplement me confirmer que cette syntaxe est ducoup exacte :

with mafeuille
.Range(.Cells(1, colmode) .MergeArea.Columns(.Range(.Cells(1, colmode).MergeArea.Columns.Count).Column
end with

Car j'utilise le "With mafeuille" à plusieurs reprises mais sans message d'erreur
 

patricktoulon

XLDnaute Barbatruc
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
 

Discussions similaires

Réponses
22
Affichages
757

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16