Condensation des valeurs séquentielles en une seule ligne (Microsoft Excel)
Rusty a une liste de codes postaux dans une colonne d’une feuille de calcul. Il aimerait un moyen de « compresser » les codes de sorte que les plages séquentielles de valeurs soient sur une seule ligne. Ainsi, par exemple, au lieu de 35013, 35014 et 35015 occupant trois lignes, ils apparaissent sur une seule ligne sous la forme 35013-35015.
Il existe plusieurs façons de procéder, avec ou sans macros. Du côté «sans macros» de la clôture, il existe un certain nombre d’approches différentes, et toutes impliquent l’utilisation de colonnes supplémentaires pour contenir des résultats intermédiaires.
Par exemple, supposons que vous avez vos données dans la colonne A, à partir de la cellule A2, et que la cellule A1 est vide (elle ne contient même pas de texte d’en-tête). Dans ce cas, vous pouvez saisir la formule suivante dans la cellule B2:
=IF(NOT(A2-A1=1),A2,IF(A3-A2=1,B1,A2))
Ensuite, dans la cellule C2, entrez la formule longue suivante:
=IF(NOT(A3-A2=1),IF(A2-A1=1,TEXT(B1,"00000") &" - "&TEXT(B2,"00000"),TEXT(A2,"00000")),"")
Vous pouvez maintenant copier les formules des cellules B2: C2 dans leurs colonnes respectives. Ce que vous obtenez dans la colonne C est la série condensée de codes postaux. Vous pouvez copier ces valeurs – en utilisant Collage spécial pour ignorer les cellules vides – à tout autre endroit de votre choix.
Si vous souhaitez utiliser une approche macro, aucune colonne intermédiaire n’est nécessaire. Une macro peut être écrite qui réduit essentiellement la liste des codes postaux en place. La macro suivante parcourt la plage de cellules que vous avez sélectionnée et crée la liste condensée:
Sub CombineValues() Dim rng As Range Dim rCell As Range Dim sNewArray() As String Dim x As Long Dim y As Long Dim sStart As String Dim sEnd As String Set rng = Selection sStart = rng.Cells(1) sEnd = sStart y = 1 For x = 1 To rng.Count - 1 If rng.Cells(x + 1) - _ rng.Cells(x) > 1 Then 'End ReDim Preserve sNewArray(1 To y) If sStart = sEnd Then sNewArray(y) = sStart Else sNewArray(y) = sStart & "-" & sEnd End If sStart = rng.Cells(x + 1) y = y + 1 End If sEnd = rng.Cells(x + 1) ReDim Preserve sNewArray(1 To y) If sStart = sEnd Then sNewArray(y) = sStart Else sNewArray(y) = sStart & "-" & sEnd End If Next rng.ClearContents For x = 1 To y rng.Cells(x) = "'" & sNewArray(x) Next Set rng = Nothing Set rCell = Nothing End Sub
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (11977) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.
Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:
link: / excel-Condensing_Sequential_Values_to_a_Single_Row [Condensation des valeurs séquentielles en une seule ligne]
.