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

vba ou fonction concaténation sous condition

7 réponses
Avatar
L
Bonjour à tous,
voilà, je cherche à partir d'un feuille excel dispo en ligne ici,
http://lola2k.free.fr/pub/categories_excel.xls
pour info.
Dans ma colonne A j'ai le temps en minutes/secondes ; dans ma colonne B
j'ai plusieurs catégories d'actions en chaîne de caractères qui
correspondent à un découpage d'activité :
- rotate
- translation
- cut
- filter
- transition
- zoom
- zoom/i
- affichage
- annotation
une catégorie à la fois pour une cellule temps = 1 seconde. De telle
sorte que j'ai mon temps et un découpage de l'activité.

Je cherche à
balayer ma colonne A (temps) et lorsqu'il trouve une action en B
(activité) enregistrer en C(cellule=début d'activité) et donner le
<début de l'activité> et concaténer les actions qui suivent jusqu'au
moment ou il trouve une cellule vide (activité) dans une plage de 10
secondes (soit 10 cellules). Lorsqu'il ne trouve pas de cellule activité
dans cette plage de 10 secondes alors il arrête et <indique le temps de
fin> puis continue à balayer et recommence
-> résultat:
mon doc excel
A; B; C;
25:43;
25:44;
25:45;
25:46;
25:47;
25:48;
25:49; zoom; <25:49>zoom;translation;zoom;translation;zoom/i<26:00>;
25:50; zoom;
25:51; zoom;
25:52; zoom;
25:53; translation;
25:54; translation;
25:55; zoom;
25:56; zoom;
25:57; translation;
25:58; zoom/i;
25:59; zoom/i;
26:00; zoom/i;
26:01;
26:02;
26:03;
ce que je veux :
<25:49>zoom;translation;zoom;translation;zoom/i<26:00> en C
etc.

d'avance merci,
Lionel

7 réponses

Avatar
L
Je m'aperçois que je n'ai pas été très clair dans mes explications :

Je cherche à
balayer ma colonne A (temps) et lorsqu'il trouve une action en B
(activité) enregistrer en C
dans la rangée correspondant au début de l'action et écrire le temps

(cellule A)
<début de l'activité> et concaténer les actions
cellules de la colonne B qui se suivent jusqu'au moment ou il trouve une

cellule vide (<>"") en B. A ce moment il faut vérifier que les 10
cellule en B suivantes sont vides pour écrire
<le temps de fin> et continuer
sinon continuer à concaténer jusqu'au moment ou il y a 10 cellules vides

qui soient continues

-> résultat:
mon doc excel
A; B; C;
25:43;
25:44;
25:45;
25:46;
25:47;
25:48;
25:49; zoom; <25:49>zoom;translation;zoom;translation;zoom/i<26:00>;
25:50; zoom;
25:51; zoom;
25:52; zoom;
25:53; translation;
25:54; translation;
25:55; zoom;
25:56; zoom;
25:57; translation;
25:58; zoom/i;
25:59; zoom/i;
26:00; zoom/i;
26:01;
26:02;
26:03;
ce que je veux :
<25:49>zoom;translation;zoom;translation;zoom/i<26:00> en C
etc.

d'avance merci,
Lionel
Lionel


Avatar
FFO
Salut à toi

Je te propose ce code :

Fin = Range("B65535").End(xlUp).Offset(1, 0).Address
Range("B1").Select
Do While ActiveCell.Address <> Fin
If ActiveCell <> "" Then
n = "<" & Mid(ActiveCell.Offset(0, -1), 1, Len(ActiveCell.Offset(0, -1)) -
1) & ">" & ActiveCell
Activité = ActiveCell
Do While ActiveCell <> ""
If ActiveCell <> Activité Then
n = n & ActiveCell
Activité = ActiveCell
End If
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(-1, 0).Select
If ActiveCell <> Activité Then
n = n & ActiveCell
End If
ActiveCell.Offset(0, 1) = n & "<" & Mid(ActiveCell.Offset(0, -1), 1,
Len(ActiveCell.Offset(0, -1)) - 1) & ">"
End If
ActiveCell.Offset(1, 0).Select
Loop

Celà te convient-il ???
Dis moi !!!


Bonjour à tous,
voilà, je cherche à partir d'un feuille excel dispo en ligne ici,
http://lola2k.free.fr/pub/categories_excel.xls
pour info.
Dans ma colonne A j'ai le temps en minutes/secondes ; dans ma colonne B
j'ai plusieurs catégories d'actions en chaîne de caractères qui
correspondent à un découpage d'activité :
- rotate
- translation
- cut
- filter
- transition
- zoom
- zoom/i
- affichage
- annotation
une catégorie à la fois pour une cellule temps = 1 seconde. De telle
sorte que j'ai mon temps et un découpage de l'activité.

Je cherche à
balayer ma colonne A (temps) et lorsqu'il trouve une action en B
(activité) enregistrer en C(cellule=début d'activité) et donner le
<début de l'activité> et concaténer les actions qui suivent jusqu'au
moment ou il trouve une cellule vide (activité) dans une plage de 10
secondes (soit 10 cellules). Lorsqu'il ne trouve pas de cellule activité
dans cette plage de 10 secondes alors il arrête et <indique le temps de
fin> puis continue à balayer et recommence
-> résultat:
mon doc excel
A; B; C;
25:43;
25:44;
25:45;
25:46;
25:47;
25:48;
25:49; zoom; <25:49>zoom;translation;zoom;translation;zoom/i<26:00>;
25:50; zoom;
25:51; zoom;
25:52; zoom;
25:53; translation;
25:54; translation;
25:55; zoom;
25:56; zoom;
25:57; translation;
25:58; zoom/i;
25:59; zoom/i;
26:00; zoom/i;
26:01;
26:02;
26:03;
ce que je veux :
<25:49>zoom;translation;zoom;translation;zoom/i<26:00> en C
etc.

d'avance merci,
Lionel



Avatar
FFO
Rebonjours à toi
Aprés consultation de ton fichier joint
Le test de mon code révèle quelques petites imperfections
Je te propose en lieu et place de mon précédent code celui-ci corrigé :

Fin = Range("B65535").End(xlUp).Offset(1, 0).Address
Range("B1").Select
Do While ActiveCell.Address <> Fin
If ActiveCell <> "" Then
n = "<" & Mid(CDate(ActiveCell.Offset(0, -1)), 1, Len(ActiveCell.Offset(0,
-1)) - 1) & ">" & ActiveCell
Activité = ActiveCell
Do While ActiveCell <> ""
If ActiveCell <> Activité Then
n = n & ";" & ActiveCell
Activité = ActiveCell
End If
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(-1, 0).Select
If ActiveCell <> Activité Then
n = n & ActiveCell
End If
ActiveCell.Offset(0, 1) = n & "<" & Mid(CDate(ActiveCell.Offset(0, -1)),
1, Len(ActiveCell.Offset(0, -1)) - 1) & ">"
End If
ActiveCell.Offset(1, 0).Select
Loop

Il devrait mieux convenir

Dis moi !!!



Bonjour à tous,
voilà, je cherche à partir d'un feuille excel dispo en ligne ici,
http://lola2k.free.fr/pub/categories_excel.xls
pour info.
Dans ma colonne A j'ai le temps en minutes/secondes ; dans ma colonne B
j'ai plusieurs catégories d'actions en chaîne de caractères qui
correspondent à un découpage d'activité :
- rotate
- translation
- cut
- filter
- transition
- zoom
- zoom/i
- affichage
- annotation
une catégorie à la fois pour une cellule temps = 1 seconde. De telle
sorte que j'ai mon temps et un découpage de l'activité.

Je cherche à
balayer ma colonne A (temps) et lorsqu'il trouve une action en B
(activité) enregistrer en C(cellule=début d'activité) et donner le
<début de l'activité> et concaténer les actions qui suivent jusqu'au
moment ou il trouve une cellule vide (activité) dans une plage de 10
secondes (soit 10 cellules). Lorsqu'il ne trouve pas de cellule activité
dans cette plage de 10 secondes alors il arrête et <indique le temps de
fin> puis continue à balayer et recommence
-> résultat:
mon doc excel
A; B; C;
25:43;
25:44;
25:45;
25:46;
25:47;
25:48;
25:49; zoom; <25:49>zoom;translation;zoom;translation;zoom/i<26:00>;
25:50; zoom;
25:51; zoom;
25:52; zoom;
25:53; translation;
25:54; translation;
25:55; zoom;
25:56; zoom;
25:57; translation;
25:58; zoom/i;
25:59; zoom/i;
26:00; zoom/i;
26:01;
26:02;
26:03;
ce que je veux :
<25:49>zoom;translation;zoom;translation;zoom/i<26:00> en C
etc.

d'avance merci,
Lionel



Avatar
FFO
Rebonjours à toi
Aprés consultation de ton fichier joint
Le test de mon code révèle quelques petites imperfections
Je te propose en lieu et place de mon précédent code celui-ci corrigé :

Fin = Range("B65535").End(xlUp).Offset(1, 0).Address
Range("B1").Select
Do While ActiveCell.Address <> Fin
If ActiveCell <> "" Then
n = "<" & Mid(CDate(ActiveCell.Offset(0, -1)), 1, Len(ActiveCell.Offset(0,
-1)) - 1) & ">" & ActiveCell
Activité = ActiveCell
Do While ActiveCell <> ""
If ActiveCell <> Activité Then
n = n & ";" & ActiveCell
Activité = ActiveCell
End If
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(-1, 0).Select
If ActiveCell <> Activité Then
n = n & ActiveCell
End If
ActiveCell.Offset(0, 1) = n & "<" & Mid(CDate(ActiveCell.Offset(0, -1)),
1, Len(ActiveCell.Offset(0, -1)) - 1) & ">"
End If
ActiveCell.Offset(1, 0).Select
Loop

Il devrait mieux convenir

Dis moi !!!



Bonjour à tous,
voilà, je cherche à partir d'un feuille excel dispo en ligne ici,
http://lola2k.free.fr/pub/categories_excel.xls
pour info.
Dans ma colonne A j'ai le temps en minutes/secondes ; dans ma colonne B
j'ai plusieurs catégories d'actions en chaîne de caractères qui
correspondent à un découpage d'activité :
- rotate
- translation
- cut
- filter
- transition
- zoom
- zoom/i
- affichage
- annotation
une catégorie à la fois pour une cellule temps = 1 seconde. De telle
sorte que j'ai mon temps et un découpage de l'activité.

Je cherche à
balayer ma colonne A (temps) et lorsqu'il trouve une action en B
(activité) enregistrer en C(cellule=début d'activité) et donner le
<début de l'activité> et concaténer les actions qui suivent jusqu'au
moment ou il trouve une cellule vide (activité) dans une plage de 10
secondes (soit 10 cellules). Lorsqu'il ne trouve pas de cellule activité
dans cette plage de 10 secondes alors il arrête et <indique le temps de
fin> puis continue à balayer et recommence
-> résultat:
mon doc excel
A; B; C;
25:43;
25:44;
25:45;
25:46;
25:47;
25:48;
25:49; zoom; <25:49>zoom;translation;zoom;translation;zoom/i<26:00>;
25:50; zoom;
25:51; zoom;
25:52; zoom;
25:53; translation;
25:54; translation;
25:55; zoom;
25:56; zoom;
25:57; translation;
25:58; zoom/i;
25:59; zoom/i;
26:00; zoom/i;
26:01;
26:02;
26:03;
ce que je veux :
<25:49>zoom;translation;zoom;translation;zoom/i<26:00> en C
etc.

d'avance merci,
Lionel



Avatar
FFO
Rebonjours à toi
Aprés consultation de ton fichier joint
Le test de mon code révèle quelques petites imperfections
Je te propose en lieu et place de mon précédent code celui-ci corrigé :

Fin = Range("B65535").End(xlUp).Offset(1, 0).Address
Range("B1").Select
Do While ActiveCell.Address <> Fin
If ActiveCell <> "" Then
n = "<" & Mid(CDate(ActiveCell.Offset(0, -1)), 1, Len(ActiveCell.Offset(0,
-1)) - 1) & ">" & ActiveCell
Activité = ActiveCell
Do While ActiveCell <> ""
If ActiveCell <> Activité Then
n = n & ";" & ActiveCell
Activité = ActiveCell
End If
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(-1, 0).Select
If ActiveCell <> Activité Then
n = n & ActiveCell
End If
ActiveCell.Offset(0, 1) = n & "<" & Mid(CDate(ActiveCell.Offset(0, -1)),
1, Len(ActiveCell.Offset(0, -1)) - 1) & ">"
End If
ActiveCell.Offset(1, 0).Select
Loop

Il devrait mieux convenir

Dis moi !!!



Bonjour à tous,
voilà, je cherche à partir d'un feuille excel dispo en ligne ici,
http://lola2k.free.fr/pub/categories_excel.xls
pour info.
Dans ma colonne A j'ai le temps en minutes/secondes ; dans ma colonne B
j'ai plusieurs catégories d'actions en chaîne de caractères qui
correspondent à un découpage d'activité :
- rotate
- translation
- cut
- filter
- transition
- zoom
- zoom/i
- affichage
- annotation
une catégorie à la fois pour une cellule temps = 1 seconde. De telle
sorte que j'ai mon temps et un découpage de l'activité.

Je cherche à
balayer ma colonne A (temps) et lorsqu'il trouve une action en B
(activité) enregistrer en C(cellule=début d'activité) et donner le
<début de l'activité> et concaténer les actions qui suivent jusqu'au
moment ou il trouve une cellule vide (activité) dans une plage de 10
secondes (soit 10 cellules). Lorsqu'il ne trouve pas de cellule activité
dans cette plage de 10 secondes alors il arrête et <indique le temps de
fin> puis continue à balayer et recommence
-> résultat:
mon doc excel
A; B; C;
25:43;
25:44;
25:45;
25:46;
25:47;
25:48;
25:49; zoom; <25:49>zoom;translation;zoom;translation;zoom/i<26:00>;
25:50; zoom;
25:51; zoom;
25:52; zoom;
25:53; translation;
25:54; translation;
25:55; zoom;
25:56; zoom;
25:57; translation;
25:58; zoom/i;
25:59; zoom/i;
26:00; zoom/i;
26:01;
26:02;
26:03;
ce que je veux :
<25:49>zoom;translation;zoom;translation;zoom/i<26:00> en C
etc.

d'avance merci,
Lionel



Avatar
L
Rebonjours à toi
Aprés consultation de ton fichier joint
Le test de mon code révèle quelques petites imperfections
Je te propose en lieu et place de mon précédent code celui-ci corrigé :

Fin = Range("B65535").End(xlUp).Offset(1, 0).Address
Range("B1").Select
Do While ActiveCell.Address <> Fin
If ActiveCell <> "" Then
n = "<" & Mid(CDate(ActiveCell.Offset(0, -1)), 1, Len(ActiveCell.Offset(0,
-1)) - 1) & ">" & ActiveCell
Activité = ActiveCell
Do While ActiveCell <> ""
If ActiveCell <> Activité Then
n = n & ";" & ActiveCell
Activité = ActiveCell
End If
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(-1, 0).Select
If ActiveCell <> Activité Then
n = n & ActiveCell
End If
ActiveCell.Offset(0, 1) = n & "<" & Mid(CDate(ActiveCell.Offset(0, -1)),
1, Len(ActiveCell.Offset(0, -1)) - 1) & ">"
End If
ActiveCell.Offset(1, 0).Select
Loop

Il devrait mieux convenir
ça marche au poil,


Dis moi !!!
mais je voudrai dans cet exemple :


29:33 zoom
29:34 zoom
29:35 zoom <00:29:33>zoom<00:29:35>
29:36
29:37
29:38
29:39 translation
29:40 translation <00:29:39>translation<00:29:40>
29:41
29:42
29:43
29:44
29:45
29:46 zoom/i <00:29:46>zoom/i<00:29:46>
29:47
29:48
29:49
29:50 translation
29:51 translation
29:52 translation <00:29:50>translation<00:29:52>

vérifier que dix cellule en B sont bien vides. Par exemple, entre 29:35
et 29:39 il y a 3 cellule vides, idem entre 29:40 et 29:46 où il y a 5
cellules vides et 3 entre 29:46 et 29:50 : le résultat serait par
conséquent ici
<00:29:33>zoom;translation;zoom/i translation<00:29:52>

Merci FFO

Lionel




Bonjour à tous,
voilà, je cherche à partir d'un feuille excel dispo en ligne ici,
http://lola2k.free.fr/pub/categories_excel.xls
pour info.
Dans ma colonne A j'ai le temps en minutes/secondes ; dans ma colonne B
j'ai plusieurs catégories d'actions en chaîne de caractères qui
correspondent à un découpage d'activité :
- rotate
- translation
- cut
- filter
- transition
- zoom
- zoom/i
- affichage
- annotation
une catégorie à la fois pour une cellule temps = 1 seconde. De telle
sorte que j'ai mon temps et un découpage de l'activité.

Je cherche à
balayer ma colonne A (temps) et lorsqu'il trouve une action en B
(activité) enregistrer en C(cellule=début d'activité) et donner le
<début de l'activité> et concaténer les actions qui suivent jusqu'au
moment ou il trouve une cellule vide (activité) dans une plage de 10
secondes (soit 10 cellules). Lorsqu'il ne trouve pas de cellule activité
dans cette plage de 10 secondes alors il arrête et <indique le temps de
fin> puis continue à balayer et recommence
-> résultat:
mon doc excel
A; B; C;
25:43;
25:44;
25:45;
25:46;
25:47;
25:48;
25:49; zoom; <25:49>zoom;translation;zoom;translation;zoom/i<26:00>;
25:50; zoom;
25:51; zoom;
25:52; zoom;
25:53; translation;
25:54; translation;
25:55; zoom;
25:56; zoom;
25:57; translation;
25:58; zoom/i;
25:59; zoom/i;
26:00; zoom/i;
26:01;
26:02;
26:03;
ce que je veux :
<25:49>zoom;translation;zoom;translation;zoom/i<26:00> en C
etc.

d'avance merci,
Lionel





Avatar
FFO
Content que ma dernière proposition te convienne !!!!
Pour ta nouvelle demande tu souhaites un code uniquement pour l'exemple cité
ou qui puisse s'intégrer dans celui que je t'ai fourni afin de traiter tous
les exemples d'une manière générale ????

Dis moi !!!



Bonjour à tous,
voilà, je cherche à partir d'un feuille excel dispo en ligne ici,
http://lola2k.free.fr/pub/categories_excel.xls
pour info.
Dans ma colonne A j'ai le temps en minutes/secondes ; dans ma colonne B
j'ai plusieurs catégories d'actions en chaîne de caractères qui
correspondent à un découpage d'activité :
- rotate
- translation
- cut
- filter
- transition
- zoom
- zoom/i
- affichage
- annotation
une catégorie à la fois pour une cellule temps = 1 seconde. De telle
sorte que j'ai mon temps et un découpage de l'activité.

Je cherche à
balayer ma colonne A (temps) et lorsqu'il trouve une action en B
(activité) enregistrer en C(cellule=début d'activité) et donner le
<début de l'activité> et concaténer les actions qui suivent jusqu'au
moment ou il trouve une cellule vide (activité) dans une plage de 10
secondes (soit 10 cellules). Lorsqu'il ne trouve pas de cellule activité
dans cette plage de 10 secondes alors il arrête et <indique le temps de
fin> puis continue à balayer et recommence
-> résultat:
mon doc excel
A; B; C;
25:43;
25:44;
25:45;
25:46;
25:47;
25:48;
25:49; zoom; <25:49>zoom;translation;zoom;translation;zoom/i<26:00>;
25:50; zoom;
25:51; zoom;
25:52; zoom;
25:53; translation;
25:54; translation;
25:55; zoom;
25:56; zoom;
25:57; translation;
25:58; zoom/i;
25:59; zoom/i;
26:00; zoom/i;
26:01;
26:02;
26:03;
ce que je veux :
<25:49>zoom;translation;zoom;translation;zoom/i<26:00> en C
etc.

d'avance merci,
Lionel