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

Macro pour Recherche et Déplacement de cellules (Création d'une BDD à partir de fiches)...

22 réponses
Avatar
gorwel2
Bonsoir les experts,

Je cherche =E0 rechercher/d=E9placer automatiquement de nombreuses cellules=
pour les avoir sous formes de donn=E9es en colonnes. Comme je l'ai vu =E0 =
cette adresse (http://boisgontierjacques.free.fr/pages_site/cellules.htm), =
=E0 la rubrique "Cr=E9ation d'une BD =E0 partir de fiches", j'ai vu que =E7=
a avait l'air faisable mais je n'arrive pas =E0 bien l'appliquer =E0 mon ta=
bleau (voir ci-dessous*).

La difficult=E9 vient du fait que les fiches ne sont pas forc=E9ment compl=
=E8tes (il peut manquer la ligne t=E9l ou le fax) et le champs activit=E9 p=
eut prendre 2 lignes ou + (voire absente)... En revanche, les fiches sont s=
yst=E9matiquement s=E9par=E9e par l'item "Plus d'informations [+]" (3 ligne=
s vierges avant et 1 apr=E8s). Aussi, le nom appara=EEt 2 fois.

A vos talents, cordialement, Go2.

PS : je joins un exemplaire du fichier =E0 cette adresse : https://drive.go=
ogle.com/file/d/0B3XGolv6S_fRellPRjVOME03Z1k/view?usp=3Dsharing

*EX :=20
Je voudrais les donn=E9es sous cette forme... :
A B C D=20
1 Nom Activit=E9 T=E9l Courriel
2 nom 1 Nautisme 01 01 01 01 01 A@GMAIL.COM
3 nom 2 Autres 02 02 02 02 02 B@gmail.com
etc.
=09
... et voici la longue liste telle qu'elle se pr=E9sente actuellement : =
=09

A B =09
6 nom 1 A =09
7 nom 1 A =09
8 T=E9l. 01 01 01 01 01 =09
9 Fax 01 01 01 01 02 =09
10 E.mail A@GMAIL.COM =09
11 =09
12 (Activit=E9 1 :)Nautisme =09
13 =09
14 =09
15 =09
16 Plus d'informations [+] =09
17 =09
18 nom 2 B =09
19 nom 2 B =09
20 T=E9l. 02 02 02 02 02 =09
21 Fax 02 02 02 02 03 =09
22 E.mail B@GMAIL.COM =09
23 =09
24 Activit=E9 2 =09
25 Activit=E9 2
...

10 réponses

1 2 3
Avatar
isabelle
bonjour,

est ce qu'il y a toujours la valeur "Plus d'informations [+] " qui sépare les
fiches ?

isabelle

Le 2015-06-25 17:22, a écrit :
Bonsoir les experts,

Je cherche à rechercher/déplacer automatiquement de nombreuses cellules pour les avoir sous formes de données en colonnes.
Comme je l'ai vu à cette adresse (http://boisgontierjacques.free.fr/pages_site/cellules.htm), à la rubrique "Création d'une BD à partir de fiches",
j'ai vu que ça avait l'air faisable mais je n'arrive pas à bien l'appliquer à mon tableau (voir ci-dessous*).

La difficulté vient du fait que les fiches ne sont pas forcément complètes (il peut manquer la ligne tél ou le fax) et le champs activité
peut prendre 2 lignes ou + (voire absente)... En revanche, les fiches sont systématiquement séparée >
par l'item "Plus d'informations [+]" (3 lignes vierges avant et 1 après). Aussi, le nom apparaît 2 fois.

A vos talents, cordialement, Go2.

PS : je joins un exemplaire du fichier à cette adresse : https://drive.google.com/file/d/0B3XGolv6S_fRellPRjVOME03Z1k/view?usp=sharing

*EX :
Je voudrais les données sous cette forme... :
A B C D
1 Nom Activité Tél Courriel
2 nom 1 Nautisme 01 01 01 01 01
3 nom 2 Autres 02 02 02 02 02
etc.

... et voici la longue liste telle qu'elle se présente actuellement :

A B
6 nom 1 A
7 nom 1 A
8 Tél. 01 01 01 01 01
9 Fax 01 01 01 01 02
10 E.mail
11
12 (Activité 1 :)Nautisme
13
14
15
16 Plus d'informations [+]
17
18 nom 2 B
19 nom 2 B
20 Tél. 02 02 02 02 02
21 Fax 02 02 02 02 03
22 E.mail
23
24 Activité 2
25 Activité 2
...

Avatar
isabelle
svp oublier ma précédente question au sujet de "Plus d'informations [+]"

Aussi, le nom apparaît 2 fois.



lequel des 2 nom doit on retenir ? ou doit on retenir les 2 noms dans la même
cellule ?

le champs activité peut prendre 2 lignes ou + (voire absente)



doit on mettre ces informations (activité) dans la même cellule ?

isabelle
Avatar
sivilt
Bonjour et merci de votre attention.

Pour répondre à la question sur les 2 noms, seul un des deux noms est à retenir, le premier par exemple.

Concernant les lignes d'activité l'idéal serait de les avoir concatén ées effectivement en une seule cellule, mais je peux m'en passer ce n'est pas une information primordiale : la première ligne peut suffire. (Pour info, il arrive que cette information s'étale sur trois ou quatre lignes parfois...)

Pour l'item "+ Plus d'information [+]", je confirme, il apparaît toujours à la fin de chaque fiche avec trois lignes vides au-dessus et une en des sous.

En espérant avoir été assez clair, cordialement, Go2.
Avatar
isabelle
bonjour Go2,

voici un début de piste, j'ai ajouté l'onglet "liste" pour mettre le résultat.
http://www.cjoint.com/c/EFAqBQGtWNa

Sub Macro1()
Dim LastRow As Long, n As Integer, i As Integer
Dim Nbrfiche As Integer, ficheDébut As Integer, ficheFin As Integer

With Sheets("liste")
.Range("A2:D" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
End With

LastRow = Sheets("test").Cells(Sheets("test").Rows.Count, 1).End(xlUp).Row
Nbrfiche = Application.CountA("Plus d'informations [+]",
Sheets("test").Range("A:A"))
ficheDébut = 2
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A:A"), 0)

For n = 2 To Nbrfiche + 1
For i = ficheDébut To ficheFin
Select Case Sheets("test").Cells(i, 1)
Case "Nom":
Sheets("liste").Cells(n, 1) = Sheets("liste").Cells(n, 1) & " " &
Sheets("test").Cells(i, 2)
Case "Activité":
Sheets("liste").Cells(n, 2) = Sheets("liste").Cells(n, 2) & " " &
Sheets("test").Cells(i, 2)
Case "Tél.":
Sheets("liste").Cells(n, 3) = Sheets("liste").Cells(n, 3) & " " &
Sheets("test").Cells(i, 2)
Case "E.mail":
Sheets("liste").Cells(n, 4) = Sheets("liste").Cells(n, 4) & " " &
Sheets("test").Cells(i, 2)
End Select
Next
ficheDébut = ficheFin + 1
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A" & ficheDébut & ":A" & LastRow), 0) + ficheDébut - 2
Next
End Sub

isabelle
Avatar
gorwel2
Merci beaucoup, Isabelle. Je pars tester ta solution et revient te dire si ça fonctionne.

Cordialement, Go2.


Le vendredi 26 juin 2015 18:28:21 UTC+2, isabelle a écrit :
bonjour Go2,

voici un début de piste, j'ai ajouté l'onglet "liste" pour mettre le résultat.
http://www.cjoint.com/c/EFAqBQGtWNa

Sub Macro1()
Dim LastRow As Long, n As Integer, i As Integer
Dim Nbrfiche As Integer, ficheDébut As Integer, ficheFin As Integer

With Sheets("liste")
.Range("A2:D" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
End With

LastRow = Sheets("test").Cells(Sheets("test").Rows.Count, 1).End(xlUp). Row
Nbrfiche = Application.CountA("Plus d'informations [+]",
Sheets("test").Range("A:A"))
ficheDébut = 2
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A:A"), 0)

For n = 2 To Nbrfiche + 1
For i = ficheDébut To ficheFin
Select Case Sheets("test").Cells(i, 1)
Case "Nom":
Sheets("liste").Cells(n, 1) = Sheets("liste").Cells(n, 1) & " " &
Sheets("test").Cells(i, 2)
Case "Activité":
Sheets("liste").Cells(n, 2) = Sheets("liste").Cells(n, 2) & " " &
Sheets("test").Cells(i, 2)
Case "Tél.":
Sheets("liste").Cells(n, 3) = Sheets("liste").Cells(n, 3) & " " &
Sheets("test").Cells(i, 2)
Case "E.mail":
Sheets("liste").Cells(n, 4) = Sheets("liste").Cells(n, 4) & " " &
Sheets("test").Cells(i, 2)
End Select
Next
ficheDébut = ficheFin + 1
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A" & ficheDébut & ":A" & LastRow), 0) + ficheDé but - 2
Next
End Sub

isabelle
Avatar
sivilt
Le vendredi 26 juin 2015 18:28:21 UTC+2, isabelle a écrit :
bonjour Go2,

voici un début de piste, j'ai ajouté l'onglet "liste" pour mettre le résultat.
http://www.cjoint.com/c/EFAqBQGtWNa

Sub Macro1()
Dim LastRow As Long, n As Integer, i As Integer
Dim Nbrfiche As Integer, ficheDébut As Integer, ficheFin As Integer

With Sheets("liste")
.Range("A2:D" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
End With

LastRow = Sheets("test").Cells(Sheets("test").Rows.Count, 1).End(xlUp). Row
Nbrfiche = Application.CountA("Plus d'informations [+]",
Sheets("test").Range("A:A"))
ficheDébut = 2
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A:A"), 0)

For n = 2 To Nbrfiche + 1
For i = ficheDébut To ficheFin
Select Case Sheets("test").Cells(i, 1)
Case "Nom":
Sheets("liste").Cells(n, 1) = Sheets("liste").Cells(n, 1) & " " &
Sheets("test").Cells(i, 2)
Case "Activité":
Sheets("liste").Cells(n, 2) = Sheets("liste").Cells(n, 2) & " " &
Sheets("test").Cells(i, 2)
Case "Tél.":
Sheets("liste").Cells(n, 3) = Sheets("liste").Cells(n, 3) & " " &
Sheets("test").Cells(i, 2)
Case "E.mail":
Sheets("liste").Cells(n, 4) = Sheets("liste").Cells(n, 4) & " " &
Sheets("test").Cells(i, 2)
End Select
Next
ficheDébut = ficheFin + 1
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A" & ficheDébut & ":A" & LastRow), 0) + ficheDé but - 2
Next
End Sub

isabelle



AAAAargh ! J'avais mal formaté mes fiches : le champs "Nom" en fait n'exi ste pas, les noms apparaissent directement en colonne A (rien dans la colon ne B).
Sinon, sur le principe de la macro avec l'onglet liste, ça m'a l'air tout bon. Je remets une version corrigée ici (je n'arrive pas à modifier la macro pour faire apparaître les noms) : https://drive.google.com/file/d/ 0B3XGolv6S_fRWlZHZVdZamNHM3M/view?usp=sharing
Si tu pouvais y jeter un dernier oeil...

Cdlt, Go2.
Avatar
isabelle
si j'ai bien compris, les informations sont:
Activité
Liste :
Tél.
Fax
E.mail
Plus d'informations [+]

les autres sont les noms

est ce bien cela ?
isabelle

Le 2015-06-26 18:44, a écrit :

AAAAargh ! J'avais mal formaté mes fiches : le champs "Nom" en fait n'existe pas,
les noms apparaissent directement en colonne A (rien dans la colonne B).
Sinon, sur le principe de la macro avec l'onglet liste, ça m'a l'air tout bon.
Je remets une version corrigée ici (je n'arrive pas à modifier la macro pour faire apparaître les noms) :
https://drive.google.com/file/d/0B3XGolv6S_fRWlZHZVdZamNHM3M/view?usp=sharing
Si tu pouvais y jeter un dernier oeil...

Cdlt, Go2.

Avatar
gorwel2
Euh... Pas sûr de m'être bien expliqué. L'item "Liste :" que tu cites n'apparaît pas par exemple (je l'avais juste rajouté pour séparer du haut (ligne 1 et 2 où j'avais commencé un embryon de tableau formaté à mon goût, mais je préfère bien sûr ta solution dans l'autre on glet "Liste")... Si tu préfères, on peut supprimer les lignes 1 à 5).
Les informations commencent donc à partir de la ligne 6 (de l'onglet "Tes t" donc) comme une longue suite de fiches constituées comme ça :

1 Nom1
2 Nom1
3 Tél. 01 01 01 01 01
4 Fax 01 01 01 01 02
5 E.mail
6
7 Activité
8 Activité (suite)
9 Activité (suite)
10
11
12
13 Plus d'informations [+]
14
15 Nom2
16 Nom2
etc.

Et le but est bien de les avoir sous cette forme (dans un autre onglet "Lis te" ok) :

A B C D
1 Nom Activité Tél Courriel
2 Nom 1 Nautisme 01 01 01 01 01
3 Nom 2 Kayak... 02 02 02 02 02
etc.

C'est plus clair ?

Cdlt, Go2.



Le samedi 27 juin 2015 04:02:32 UTC+2, isabelle a écrit :
si j'ai bien compris, les informations sont:
Activité
Liste :
Tél.
Fax
E.mail
Plus d'informations [+]

les autres sont les noms

est ce bien cela ?
isabelle

Le 2015-06-26 18:44, a écrit :

> AAAAargh ! J'avais mal formaté mes fiches : le champs "Nom" en fait n 'existe pas,
> les noms apparaissent directement en colonne A (rien dans la colonne B ).
> Sinon, sur le principe de la macro avec l'onglet liste, ça m'a l'air tout bon.
> Je remets une version corrigée ici (je n'arrive pas à modifier la m acro pour faire apparaître les noms) :
> https://drive.google.com/file/d/0B3XGolv6S_fRWlZHZVdZamNHM3M/view?usp =sharing
> Si tu pouvais y jeter un dernier oeil...
>
> Cdlt, Go2.
>
Avatar
isabelle
dit moi si c'est mieux ?

Sub Macro1()
Dim LastRow As Long, n As Integer, i As Integer
Dim Nbrfiche As Integer, ficheDébut As Integer, ficheFin As Integer

With Sheets("liste")
.Range("A2:D" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
End With

LastRow = Sheets("test").Cells(Sheets("test").Rows.Count, 1).End(xlUp).Row
Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'informations
[+]")
ficheDébut = 1
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A:A"), 0)

For n = 2 To Nbrfiche + 1
For i = ficheDébut To ficheFin
Select Case Sheets("test").Cells(i, 1)
Case "Activité"
Sheets("liste").Cells(n, 2) = Sheets("liste").Cells(n, 2) & " " &
Sheets("test").Cells(i, 2)
Case "Tél."
Sheets("liste").Cells(n, 3) = Sheets("liste").Cells(n, 3) & " " &
Sheets("test").Cells(i, 2)
Case "E.mail"
Sheets("liste").Cells(n, 4) = Sheets("liste").Cells(n, 4) & " " &
Sheets("test").Cells(i, 2)
Case "Fax"
Case "Plus d'informations [+]"
Case Else
Sheets("liste").Cells(n, 1) = Sheets("liste").Cells(n, 1) & " " &
Sheets("test").Cells(i, 1)
End Select
Next
ficheDébut = ficheFin + 1
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A" & ficheDébut & ":A" & LastRow), 0) + ficheDébut - 1
Next
End Sub

isabelle
Avatar
gorwel2
Bonjour,

Je vais tester ça ta nouvelle macro et reviens te dire. Encore merci.

Cdlt, Go2.

Le samedi 27 juin 2015 14:38:17 UTC+2, isabelle a écrit :
dit moi si c'est mieux ?

Sub Macro1()
Dim LastRow As Long, n As Integer, i As Integer
Dim Nbrfiche As Integer, ficheDébut As Integer, ficheFin As Integer

With Sheets("liste")
.Range("A2:D" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
End With

LastRow = Sheets("test").Cells(Sheets("test").Rows.Count, 1).End(xlUp). Row
Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'inf ormations
[+]")
ficheDébut = 1
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A:A"), 0)

For n = 2 To Nbrfiche + 1
For i = ficheDébut To ficheFin
Select Case Sheets("test").Cells(i, 1)
Case "Activité"
Sheets("liste").Cells(n, 2) = Sheets("liste").Cells(n, 2) & " " &
Sheets("test").Cells(i, 2)
Case "Tél."
Sheets("liste").Cells(n, 3) = Sheets("liste").Cells(n, 3) & " " &
Sheets("test").Cells(i, 2)
Case "E.mail"
Sheets("liste").Cells(n, 4) = Sheets("liste").Cells(n, 4) & " " &
Sheets("test").Cells(i, 2)
Case "Fax"
Case "Plus d'informations [+]"
Case Else
Sheets("liste").Cells(n, 1) = Sheets("liste").Cells(n, 1) & " " &
Sheets("test").Cells(i, 1)
End Select
Next
ficheDébut = ficheFin + 1
ficheFin = Application.Match("Plus d'informations [+]",
Sheets("test").Range("A" & ficheDébut & ":A" & LastRow), 0) + ficheDé but - 1
Next
End Sub

isabelle
1 2 3