vba ou fonction concaténation sous condition

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
L
Le #4941451
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


FFO
Le #4941321
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



FFO
Le #4941291
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



FFO
Le #4941271
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



FFO
Le #4941241
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



L
Le #4941171
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





FFO
Le #4939741
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



Publicité
Poster une réponse
Anonyme