Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

transformer intervalle en suite de chiffres

10 réponses
Avatar
jip
Bonjour
J'ai en colonne A et B des intervalles de nombres sous cette forme
A B
1 2
4 7
20 26
28=09
29 30
34 36
37 50
58 65
70 84
etc...
(parfois rien en B)

Je souhaite avoir en C ou C, D, E, etc les chiffres
1, 2
4, 5, 6, 7
20, 21, 22, 23, 24, 25, 26
etc
correspondant aux intervalles

(virgule ou autre comme s=E9parateur peu importe)

Comment ensuite remettre ces chiffres en colonne unique afin d'en v=E9rifie=
r la pr=E9sence sans rupture vu que les s=E9quences de chiffres sont =E9par=
pill=E9s dans le tableau ?
Merci d'avance.

10 réponses

Avatar
LSteph
Bonjour,

Si (si j'ai bien compris) le but est pour finir de répartir ces chiffres dans les colonnes voisines:

en C1:Cn ¡

en D1:Dn =SI(C1="";"";SI(C1+1>$B1;"";C1+1))
à recopier vers droite sur autant de colonnes que besoin.

Cordialement.

--
LSteph


Le mercredi 6 avril 2016 16:07:44 UTC+2, jip a écrit :
Bonjour
J'ai en colonne A et B des intervalles de nombres sous cette forme
A B
1 2
4 7
20 26
28
29 30
34 36
37 50
58 65
70 84
etc...
(parfois rien en B)

Je souhaite avoir en C ou C, D, E, etc les chiffres
1, 2
4, 5, 6, 7
20, 21, 22, 23, 24, 25, 26
etc
correspondant aux intervalles

(virgule ou autre comme séparateur peu importe)

Comment ensuite remettre ces chiffres en colonne unique afin d'en vérif ier la présence sans rupture vu que les séquences de chiffres sont ép arpillés dans le tableau ?
Merci d'avance.
Avatar
HB
Bonsoir,

Il faudrait quelques précisions sur le résultat souhaité.

Tu veux

a) des listes
éventuellement réduites à une valeur (cas de 28 dans ton exemple)
dans la colonne C (valeurs séparées par " ; " )

ou bien

b) les valeurs réparties dans autant de colonnes que nécessaire ?

ou bien

c) Mettre dans la colonne C
toutes les valeurs rangées l'ordre.
La longueur de cette dernière sera donc "variable" ;o)


Une fois le but visé clarifié on pourra
obtenir le résultat sans étape intermédiaire.

Pour b) la méthode proposée par LSteph
fonctionnera très bien.

dans les cas a) et c) une petite macro peut faire ça rapidement
Le a) est simple et le b) très simple ;o)

Le c) peut-être complété par des données en colonnes D
listant les éventuelles valeurs manquantes ....
En lisant le message, il m'a semblé
que le véritable but était là ...


Il y a tout de même une autre question :

Les données initiales seront-elles pré-rangées
(comme dans l'exemple fourni)
ou bien faudra-il aussi vérifier l'ordre final.

cordialement,

HB

Le 06/04/2016 17:31, LSteph a écrit :
Bonjour,

Si (si j'ai bien compris) le but est pour finir de répartir ces chiffres dans les colonnes voisines:

en C1:Cn ¡

en D1:Dn =SI(C1="";"";SI(C1+1>$B1;"";C1+1))
à recopier vers droite sur autant de colonnes que besoin.

Cordialement.

--
LSteph


Le mercredi 6 avril 2016 16:07:44 UTC+2, jip a écrit :
Bonjour
J'ai en colonne A et B des intervalles de nombres sous cette forme
A B
1 2
4 7
20 26
28
29 30
34 36
37 50
58 65
70 84
etc...
(parfois rien en B)

Je souhaite avoir en C ou C, D, E, etc les chiffres
1, 2
4, 5, 6, 7
20, 21, 22, 23, 24, 25, 26
etc
correspondant aux intervalles

(virgule ou autre comme séparateur peu importe)

Comment ensuite remettre ces chiffres en colonne unique afin d'en vérifier la présence sans rupture vu que les séquences de chiffres sont éparpillés dans le tableau ?
Merci d'avance.






---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
jipaih
HB a couché sur son écran :
Bonsoir,

Il faudrait quelques précisions sur le résultat souhaité.

Tu veux

a) des listes
éventuellement réduites à une valeur (cas de 28 dans ton exemple)
dans la colonne C (valeurs séparées par " ; " )

ou bien

b) les valeurs réparties dans autant de colonnes que nécessaire ?

ou bien

c) Mettre dans la colonne C
toutes les valeurs rangées l'ordre.
La longueur de cette dernière sera donc "variable" ;o)


Une fois le but visé clarifié on pourra
obtenir le résultat sans étape intermédiaire.

Pour b) la méthode proposée par LSteph
fonctionnera très bien.

dans les cas a) et c) une petite macro peut faire ça rapidement
Le a) est simple et le b) très simple ;o)

Le c) peut-être complété par des données en colonnes D
listant les éventuelles valeurs manquantes ....
En lisant le message, il m'a semblé
que le véritable but était là ...


Il y a tout de même une autre question :

Les données initiales seront-elles pré-rangées
(comme dans l'exemple fourni)
ou bien faudra-il aussi vérifier l'ordre final.

cordialement,



Bonjour
Le c) est idéal.
Oui le but est de vérifier si tout est présent
Avatar
isabelle
bonjour jipaih,

le résultat des chiffres présents et absents sont mits en colonne D et E

Sub Vérifier_Présent_Absent()
Dim x As Integer, y As Integer, a As Integer, b As Integer, LastRow As Integer
Dim c As Range

LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("D1") = "Présent"
Range("E1") = "Absent"
x = 1
y = 1

For Each c In Range("A1:A" & LastRow)

If c.Offset(0, 1) <> 0 Then
For a = c To c.Offset(0, 1)
x = x + 1
Range("D" & x) = a
Next
Else
x = x + 1
Range("D" & x) = c
End If

If c.Offset(0, 1) <> 0 Then
For b = c.Offset(0, 1) + 1 To c.Offset(1, 0) - 1
y = y + 1
Range("E" & y) = b
Next
End If

Next
End Sub

isabelle

Le 2016-04-09 07:39, jipaih a écrit :

Bonjour
Le c) est idéal.
Oui le but est de vérifier si tout est présent
Avatar
isabelle
pour gagner un peu de vitesse j'ai utilisé des variables tableaux,
aussi, si la quantités de données est très grande, il faudra peut-être déclarer
certaine variable As Long.

Sub Vérifier_Présent_Absent()
Dim x As Integer, y As Integer, a As Integer, b As Integer, LastRow As Integer
Dim c As Range
Dim Présent()
Dim Absent()
ReDim Preserve Présent(0)
Présent(0) = "Présent"
ReDim Preserve Absent(0)
Absent(0) = "Absent"

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

For Each c In Range("A1:A" & LastRow)

If c.Offset(0, 1) <> 0 Then
For a = c To c.Offset(0, 1)
x = x + 1
ReDim Preserve Présent(x)
Présent(x) = a
Next
Else
x = x + 1
ReDim Preserve Présent(x)
Présent(x) = c
End If

If c.Offset(0, 1) <> 0 Then
For b = c.Offset(0, 1) + 1 To c.Offset(1, 0) - 1
y = y + 1
ReDim Preserve Absent(y)
Absent(y) = b
Next
End If
Next
Range("D1").Resize(UBound(Présent) + 1) = Application.Transpose(Présent)
Range("E1").Resize(UBound(Absent) + 1) = Application.Transpose(Absent)
End Sub

isabelle
Avatar
jip

isabelle



Merci
Il y a à chaque fois une erreur "13" sur la ligne
For b = c.Offset(0, 1) + 1 To c.Offset(1, 0) - 1
Je n'ai pas précisé que les valeurs ne sont pas dans l'ordre.
Avatar
jip
Le jeudi 14 avril 2016 09:53:13 UTC+2, jip a écrit :
>
> isabelle

Merci
Il y a à chaque fois une erreur "13" sur la ligne
For b = c.Offset(0, 1) + 1 To c.Offset(1, 0) - 1
Je n'ai pas précisé que les valeurs ne sont pas dans l'ordre.



En fait j'ai trouvé, il y avait dans mon tableau quelques valeurs avec de s "bis" ou "/1", une fois supprimées plus d'erreur.
Merci
Avatar
jip

En fait j'ai trouvé, il y avait dans mon tableau quelques valeurs avec des "bis" ou "/1", une fois supprimées plus d'erreur.
Merci



Ben ça marche et ça marche pas, il manque des valeurs dans "Absent".
Exemple avec le début, pas de 33 alors qu'il n'est pas dans la liste.

1 2 Présent Absent
3 1 8
4 7 2 9
11 13 3 10
14 19 4 52
20 26 5 53
27 6 104
28 7 123
29 30 11 124
31 12 125
32 13 133
34 36 14 149
37 51 15 158
Avatar
isabelle
bonjour jipaih,

voici la correction,

Sub Vérifier_Présent_Absent()
Dim x As Integer, y As Integer, a As Integer, b As Integer, LastRow As Integer
Dim c As Range
Dim Présent()
Dim Absent()

ReDim Preserve Présent(0)
Présent(0) = "Présent"
ReDim Preserve Absent(0)
Absent(0) = "Absent"

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

For Each c In Range("A1:A" & LastRow)

If c.Offset(0, 1) <> 0 Then
For a = c To c.Offset(0, 1)
x = x + 1
ReDim Preserve Présent(x)
Présent(x) = a
Next
Else
x = x + 1
ReDim Preserve Présent(x)
Présent(x) = c
End If

If c.Offset(0, 1) <> 0 Then
For b = c.Offset(0, 1) + 1 To c.Offset(1, 0) - 1
y = y + 1
ReDim Preserve Absent(y)
Absent(y) = b
Next
Else
For b = c + 1 To c.Offset(1, 0) - 1
y = y + 1
ReDim Preserve Absent(y)
Absent(y) = b
Next
End If
Next

Range("D1").Resize(UBound(Présent) + 1) = Application.Transpose(Présent)
Range("E1").Resize(UBound(Absent) + 1) = Application.Transpose(Absent)
End Sub

isabelle

Le 2016-04-14 07:15, jip a écrit :


En fait j'ai trouvé, il y avait dans mon tableau quelques valeurs avec des "bis" ou "/1", une fois supprimées plus d'erreur.
Merci



Ben ça marche et ça marche pas, il manque des valeurs dans "Absent".
Exemple avec le début, pas de 33 alors qu'il n'est pas dans la liste.

1 2 Présent Absent
3 1 8
4 7 2 9
11 13 3 10
14 19 4 52
20 26 5 53
27 6 104
28 7 123
29 30 11 124
31 12 125
32 13 133
34 36 14 149
37 51 15 158

Avatar
jip
Le jeudi 14 avril 2016 14:48:44 UTC+2, isabelle a écrit :
bonjour jipaih,

voici la correction,


isabelle



Merci beaucoup, maintenant ça fonctionne, je continue à tester car cela va me servir souvent.
Merci encore