Macro pour Recherche et Déplacement de cellules (Création d'une BDD à partir de fiches)...
22 réponses
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
...
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
Non désolé, ça marche pas : il me signale une erreur de syntaxe en me surlignant cette ligne : Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'infor mations
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
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
Non désolé, ça marche pas : il me signale une erreur de syntaxe en me surlignant cette ligne :
Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'infor mations
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
Non désolé, ça marche pas : il me signale une erreur de syntaxe en me surlignant cette ligne : Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'infor mations
Cdlt, Go2
isabelle
il s'est créé un retour à la ligne intempestif lors du copier/coller de la macro dans le message
http://www.cjoint.com/c/EFCpwawU4xa
isabelle
Le 2015-06-28 09:30, a écrit :
Non désolé, ça marche pas : il me signale une erreur de syntaxe en me surlignant cette ligne : Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'informations
Cdlt, Go2
il s'est créé un retour à la ligne intempestif lors du copier/coller de la macro
dans le message
http://www.cjoint.com/c/EFCpwawU4xa
isabelle
Le 2015-06-28 09:30, gorwel2@gmal.com a écrit :
Non désolé, ça marche pas : il me signale une erreur de syntaxe en me surlignant cette ligne :
Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'informations
il s'est créé un retour à la ligne intempestif lors du copier/coller de la macro dans le message
http://www.cjoint.com/c/EFCpwawU4xa
isabelle
Le 2015-06-28 09:30, a écrit :
Non désolé, ça marche pas : il me signale une erreur de syntaxe en me surlignant cette ligne : Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'informations
Cdlt, Go2
gorwel2
On se rapproche... mais il y a deux petits hic dans la présentation des r ésultats de l'onglet liste :
1) le nom du contact apparaît 2 fois (au lieu d'une) en colonne A. 2) l'activité apparaît elle aussi en colonne A (au lieu de B).
Cela vient peut-être de ma 1ère version du fichier qui était mal form atée. Je remets ici la bonne version : https://drive.google.com/file/d/0B 3XGolv6S_fRTTVEdVZ2NEU4S2c/view?usp=sharing
Une petite blague en remerciement : "Avec quoi on ramasse la papaye ?...
...
... Avec une foufourche ! ;-)) Bon courage et encore merci, cdlt, Go2.
Le dimanche 28 juin 2015 17:23:19 UTC+2, isabelle a écrit :
il s'est créé un retour à la ligne intempestif lors du copier/colle r de la macro dans le message
http://www.cjoint.com/c/EFCpwawU4xa
isabelle
Le 2015-06-28 09:30, a écrit :
> Non désolé, ça marche pas : il me signale une erreur de syntaxe e n me surlignant cette ligne : > Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'i nformations > > Cdlt, Go2 >
On se rapproche... mais il y a deux petits hic dans la présentation des r ésultats de l'onglet liste :
1) le nom du contact apparaît 2 fois (au lieu d'une) en colonne A.
2) l'activité apparaît elle aussi en colonne A (au lieu de B).
Cela vient peut-être de ma 1ère version du fichier qui était mal form atée. Je remets ici la bonne version : https://drive.google.com/file/d/0B 3XGolv6S_fRTTVEdVZ2NEU4S2c/view?usp=sharing
Une petite blague en remerciement : "Avec quoi on ramasse la papaye ?...
...
... Avec une foufourche ! ;-)) Bon courage et encore merci, cdlt, Go2.
Le dimanche 28 juin 2015 17:23:19 UTC+2, isabelle a écrit :
il s'est créé un retour à la ligne intempestif lors du copier/colle r de la macro
dans le message
http://www.cjoint.com/c/EFCpwawU4xa
isabelle
Le 2015-06-28 09:30, gorwel2@gmail.com a écrit :
> Non désolé, ça marche pas : il me signale une erreur de syntaxe e n me surlignant cette ligne :
> Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'i nformations
>
> Cdlt, Go2
>
On se rapproche... mais il y a deux petits hic dans la présentation des r ésultats de l'onglet liste :
1) le nom du contact apparaît 2 fois (au lieu d'une) en colonne A. 2) l'activité apparaît elle aussi en colonne A (au lieu de B).
Cela vient peut-être de ma 1ère version du fichier qui était mal form atée. Je remets ici la bonne version : https://drive.google.com/file/d/0B 3XGolv6S_fRTTVEdVZ2NEU4S2c/view?usp=sharing
Une petite blague en remerciement : "Avec quoi on ramasse la papaye ?...
...
... Avec une foufourche ! ;-)) Bon courage et encore merci, cdlt, Go2.
Le dimanche 28 juin 2015 17:23:19 UTC+2, isabelle a écrit :
il s'est créé un retour à la ligne intempestif lors du copier/colle r de la macro dans le message
http://www.cjoint.com/c/EFCpwawU4xa
isabelle
Le 2015-06-28 09:30, a écrit :
> Non désolé, ça marche pas : il me signale une erreur de syntaxe e n me surlignant cette ligne : > Nbrfiche = Application.CountIf(Sheets("test").Range("A:A"), "Plus d'i nformations > > Cdlt, Go2 >
isabelle
Salut Go2,
j’espère que tu pourras comprendre ce code pour l’adapter si la source est modifier, ps/ Attention au retour à la ligne intempestif lors du copier/coller
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
Une petite blague en remerciement : "Avec quoi on ramasse la papaye ?...
Salut Go2,
j’espère que tu pourras comprendre ce code pour l’adapter si la source est modifier,
ps/ Attention au retour à la ligne intempestif lors du copier/coller
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
j’espère que tu pourras comprendre ce code pour l’adapter si la source est modifier, ps/ Attention au retour à la ligne intempestif lors du copier/coller
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
Ok, merci. Je testé ce soir ou demain, et te dis. Cdlt, Go2.
gorwel2
Bonjour,
J'ai testé et après avoir -fastidieusement- supprimer les sauts de lign e comme tu le précisais, ça a bien corrigé l'activité en colonne B. .. En revanche, le nom apparaît toujours 2 fois en colonne A (dans l'ongl et "Liste"). Voyons, je me suis peut-être mal exprimé : sur chaque fiche apparaît 2 fois le même nom, mais je n'ai besoin dans l'onglet liste que de l'UN d es deux (puisque qu'ils sont systématiquement identiques). Le doublon est gênant car il ne me permet pas de faire un publipostage par la suite...
Pour les modifications ou personnalisations que je pourrais y apporter, j'a voue qu'à la lecture de ton code, ça me dépasse de beaucoup ! J'essay e bien de comprendre, je reconnais certaines structures, mais je serais bie n incapable de le modifier ! Pour moi, ça tient de la sorcellerie ;-))
Cordialement, Go2.
Le lundi 29 juin 2015 05:54:57 UTC+2, isabelle a écrit :
Salut Go2,
j'espère que tu pourras comprendre ce code pour l'adapter si la source est modifier, ps/ Attention au retour à la ligne intempestif lors du copier/coller
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
For n = 2 To Nbrfiche + 1 For i = ficheDébut To ficheFin Select Case Sheets("test").Cells(i, 1) 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 If Not IsError(Application.Search("Activité", Sheets("test"). Cells(i, 1))) Then Sheets("liste").Cells(n, 2) = Sheets("liste").Cells(n, 2) & " " & Sheets("test").Cells(i, 1) Else Sheets("liste").Cells(n, 1) = Sheets("liste").Cells(n, 1) & " " & Sheets("test").Cells(i, 1) End If 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
Le 2015-06-28 12:33, a écrit : > On se rapproche... mais il y a deux petits hic dans la présentation d es résultats de l'onglet liste : > > 1) le nom du contact apparaît 2 fois (au lieu d'une) en colonne A. > 2) l'activité apparaît elle aussi en colonne A (au lieu de B). > > Cela vient peut-être de ma 1ère version du fichier qui était mal formatée. Je remets ici la bonne version : https://drive.google.com/file/d/0B3XGolv6S_fRTTVEdVZ2NEU4S2c/view?usp=s haring > > Une petite blague en remerciement : "Avec quoi on ramasse la papaye ?.. .
Bonjour,
J'ai testé et après avoir -fastidieusement- supprimer les sauts de lign e comme tu le précisais, ça a bien corrigé l'activité en colonne B. .. En revanche, le nom apparaît toujours 2 fois en colonne A (dans l'ongl et "Liste").
Voyons, je me suis peut-être mal exprimé : sur chaque fiche apparaît 2 fois le même nom, mais je n'ai besoin dans l'onglet liste que de l'UN d es deux (puisque qu'ils sont systématiquement identiques). Le doublon est gênant car il ne me permet pas de faire un publipostage par la suite...
Pour les modifications ou personnalisations que je pourrais y apporter, j'a voue qu'à la lecture de ton code, ça me dépasse de beaucoup ! J'essay e bien de comprendre, je reconnais certaines structures, mais je serais bie n incapable de le modifier ! Pour moi, ça tient de la sorcellerie ;-))
Cordialement, Go2.
Le lundi 29 juin 2015 05:54:57 UTC+2, isabelle a écrit :
Salut Go2,
j'espère que tu pourras comprendre ce code pour l'adapter si la source est modifier,
ps/ Attention au retour à la ligne intempestif lors du copier/coller
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
For n = 2 To Nbrfiche + 1
For i = ficheDébut To ficheFin
Select Case Sheets("test").Cells(i, 1)
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
If Not IsError(Application.Search("Activité", Sheets("test"). Cells(i,
1))) Then
Sheets("liste").Cells(n, 2) = Sheets("liste").Cells(n, 2) & " " &
Sheets("test").Cells(i, 1)
Else
Sheets("liste").Cells(n, 1) = Sheets("liste").Cells(n, 1) & " " &
Sheets("test").Cells(i, 1)
End If
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
Le 2015-06-28 12:33, gorwel2@gmail.com a écrit :
> On se rapproche... mais il y a deux petits hic dans la présentation d es résultats de l'onglet liste :
>
> 1) le nom du contact apparaît 2 fois (au lieu d'une) en colonne A.
> 2) l'activité apparaît elle aussi en colonne A (au lieu de B).
>
> Cela vient peut-être de ma 1ère version du fichier qui était mal formatée. Je remets ici la bonne version :
https://drive.google.com/file/d/0B3XGolv6S_fRTTVEdVZ2NEU4S2c/view?usp=s haring
>
> Une petite blague en remerciement : "Avec quoi on ramasse la papaye ?.. .
J'ai testé et après avoir -fastidieusement- supprimer les sauts de lign e comme tu le précisais, ça a bien corrigé l'activité en colonne B. .. En revanche, le nom apparaît toujours 2 fois en colonne A (dans l'ongl et "Liste"). Voyons, je me suis peut-être mal exprimé : sur chaque fiche apparaît 2 fois le même nom, mais je n'ai besoin dans l'onglet liste que de l'UN d es deux (puisque qu'ils sont systématiquement identiques). Le doublon est gênant car il ne me permet pas de faire un publipostage par la suite...
Pour les modifications ou personnalisations que je pourrais y apporter, j'a voue qu'à la lecture de ton code, ça me dépasse de beaucoup ! J'essay e bien de comprendre, je reconnais certaines structures, mais je serais bie n incapable de le modifier ! Pour moi, ça tient de la sorcellerie ;-))
Cordialement, Go2.
Le lundi 29 juin 2015 05:54:57 UTC+2, isabelle a écrit :
Salut Go2,
j'espère que tu pourras comprendre ce code pour l'adapter si la source est modifier, ps/ Attention au retour à la ligne intempestif lors du copier/coller
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
For n = 2 To Nbrfiche + 1 For i = ficheDébut To ficheFin Select Case Sheets("test").Cells(i, 1) 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 If Not IsError(Application.Search("Activité", Sheets("test"). Cells(i, 1))) Then Sheets("liste").Cells(n, 2) = Sheets("liste").Cells(n, 2) & " " & Sheets("test").Cells(i, 1) Else Sheets("liste").Cells(n, 1) = Sheets("liste").Cells(n, 1) & " " & Sheets("test").Cells(i, 1) End If 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
Le 2015-06-28 12:33, a écrit : > On se rapproche... mais il y a deux petits hic dans la présentation d es résultats de l'onglet liste : > > 1) le nom du contact apparaît 2 fois (au lieu d'une) en colonne A. > 2) l'activité apparaît elle aussi en colonne A (au lieu de B). > > Cela vient peut-être de ma 1ère version du fichier qui était mal formatée. Je remets ici la bonne version : https://drive.google.com/file/d/0B3XGolv6S_fRTTVEdVZ2NEU4S2c/view?usp=s haring > > Une petite blague en remerciement : "Avec quoi on ramasse la papaye ?.. .
JièL
Le 30/06/2015 15:48, a écrit :
Pour moi, ça tient de la sorcellerie
Tiens ? Isabelle de la Geôlière est passée du status d'"ange" à celui de "sorcière" ?! ;-))))
-- JièL en jeu ou des monts
Le 30/06/2015 15:48, gorwel2@gmail.com a écrit :
Pour moi, ça tient de la sorcellerie
Tiens ? Isabelle de la Geôlière est passée du status d'"ange" à celui de
"sorcière" ?! ;-))))