Boucle FOR EACH

Jeff7087

XLDnaute Nouveau
Bonjour
Dans une feuille, je sélectionne plusieurs cellules n'importe où, dont certaines sont fusionnées (2 cellules). A l'aide d'une boucle For Each cellule In Selection, je passe sur toutes les cellules de la sélection. Lorsque j'arrive sur une cellule fusionnée, j'aimarais analyser que la première cellule de la fusion et sauter la deuxième. (Je ne sais pas comment sont identifiées les cellules dans une sélection).
Si vous avez une idée.
Merci et bonne journée.
 

mromain

XLDnaute Barbatruc
Re : Boucle FOR EACH

Bonjour Jeff7087,

voici un essai :
Code:
Sub test()
Dim cellule As Range, memCellule() As String, i As Integer, test As Boolean, cpt As Integer
ReDim memCellule(1 To 1)
For Each cellule In Selection.Cells
    test = False
    For i = LBound(memCellule) To UBound(memCellule)
        If cellule.MergeArea(1, 1).Address = memCellule(i) Then test = True
    Next i
    If Not test Then
        cpt = cpt + 1
        ReDim Preserve memCellule(1 To cpt)
        memCellule(cpt) = cellule.MergeArea(1, 1).Address
        
        'coder ici
        MsgBox cellule.Text
        
    End If
Next cellule
End Sub

a+
 

pierrejean

XLDnaute Barbatruc
Re : Boucle FOR EACH

bonjour Jeff

Salut mromain

une solution pour 2 cellules fusionnées

Code:
Sub test()
asauter = ""
For Each cel In Selection
 If cel.MergeCells Then
   If asauter = "" Then asauter = cel.Row + 1
 Else
   asauter = ""
 End If
  If asauter = "" Or asauter <> cel.Row Then
    'traitement de cel'
  End If
Next
End Sub
 

Jeff7087

XLDnaute Nouveau
Re : Boucle FOR EACH

Bonsoir Mutzik.
Malheureusement non, dans une boucle for each toutes les cellules sont traitées, y compris celles qui sont fusionnées. C'était mon problème.
Si tu veux vérifier, voici un bout de code qui permet d'afficher l'adresse dans la colonne A des cellules que tu auras sélectionné. Si tu fusionne 2 cellules, tu verras que les 2 adresses apparaissent.

Cdlt

Sub test()
'
'Routine affichant dans la colonne A les cellules traitées avec la boucle For Each
'
Dim cellule As Range, j as integer
Range("B1") = Selection.Count ' affiche le nombre de cellules sélectionnées
j = 3
Range("A3", Range("B3").End(xlDown)).ClearContents
For Each cellule In Selection.Cells
Range("A" & j) = cellule.Address
j = j + 1
Next
End Sub
 
Dernière édition:

mutzik

XLDnaute Barbatruc
Re : Boucle FOR EACH

re,
en passant par cette méthode, c'est évident
dans le classeur joint, il y a moyen de faire autrement et cela ne tient pas compte des cellules fusionnées
C'est aussi une des raisons pourquoi je les évite toujours dans un tableau de données, car il y a très certainement le moyen de faire autrement
 

Pièces jointes

  • cellulesFusionnées.xls
    33.5 KB · Affichages: 42
  • cellulesFusionnées.xls
    33.5 KB · Affichages: 43
  • cellulesFusionnées.xls
    33.5 KB · Affichages: 42

Statistiques des forums

Discussions
312 492
Messages
2 088 942
Membres
103 989
dernier inscrit
jralonso