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

Macro : repérage d'une cellule dont la police est en GRAS

16 réponses
Avatar
Françoise
Bonjour à tous !

j'ai à mettre en place une macro un peu complexe (tout du moins pour moi) :

j'ai un fichier ARTICLES que je récupère de mon fournisseur mais qui est
présenté comme un document word, à savoir qu'au lieu d'avoir les différentes
données dans des cols différentes, ils ont mélangé celles-ci
ainsi
col A = référence
col B = désignation mais aussi la famille du produit uniquement identifié
car en caractères gras

Afin de créer un fichier que lequel je puisse travailler correctement

je voudrais qu'à chaque fois que la cellule B est en gras,
créer une nouvelle feuille nommée avec la valeur de cette cellule
ET
copier toutes les lignes situées sous ce titre dans cette nouvelle feuille
AINSI
j'obtiens une feuille par famille de produits

PENSEZ VOUS QUE CELA SOIT POSSIBLE VIA UNE MACRO ?

et quelle syntaxe utiliser ?

d'avance merci pour votre éclairage
Françoise

10 réponses

1 2
Avatar
FFO
Salut Françoise

Soit l'onglet Feuil1 à traiter

Je te propose ce code :

Sheets("Feuil1").Activate
n = 0
Do While Range("B1").Offset(i, 0).Row < Range("B65535").End(xlUp).Offset(1,
0).Row
If Range("B1").Offset(i, 0).Font.Bold = True Then
If n > 0 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)
End If
Ligne = Range("B1").Offset(i + 1, 0).Row
Nom = Range("B1").Offset(i, 0)
Sheets.Add.Name = Range("B1").Offset(i, 0)
n = 1
End If
i = i + 1
Sheets("Feuil1").Activate
Loop
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)

Celà devrait convenir

Dis moi !!!!


Bonjour à tous !

j'ai à mettre en place une macro un peu complexe (tout du moins pour moi) :

j'ai un fichier ARTICLES que je récupère de mon fournisseur mais qui est
présenté comme un document word, à savoir qu'au lieu d'avoir les différentes
données dans des cols différentes, ils ont mélangé celles-ci
ainsi
col A = référence
col B = désignation mais aussi la famille du produit uniquement identifié
car en caractères gras

Afin de créer un fichier que lequel je puisse travailler correctement

je voudrais qu'à chaque fois que la cellule B est en gras,
créer une nouvelle feuille nommée avec la valeur de cette cellule
ET
copier toutes les lignes situées sous ce titre dans cette nouvelle feuille
AINSI
j'obtiens une feuille par famille de produits

PENSEZ VOUS QUE CELA SOIT POSSIBLE VIA UNE MACRO ?

et quelle syntaxe utiliser ?

d'avance merci pour votre éclairage
Françoise


Avatar
FFO
Rebonjour Francoise

Je te donne une version avec 2 classeurs différents (celui que tu reçois à
traiter et celui dans lequel tu rapportes toutes tes données par Onglet)

Soit le fichier à traiter "ARTICLES" et l'Onglet "Feuil1"
Soit le fichier des données rapportées par Onglet "Classeur1"
Le code :

Workbooks("ARTICLES").Sheets("Feuil1").Activate
n = 0
Do While Range("B1").Offset(i, 0).Row < Range("B65535").End(xlUp).Offset(1,
0).Row
If Range("B1").Offset(i, 0).Font.Bold = True Then
If n > 0 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Workbooks("Classeur1").Sheets(Nom).Range("A65535").End(xlUp)
End If
Ligne = Range("B1").Offset(i + 1, 0).Row
Nom = Range("B1").Offset(i, 0)
Workbooks("Classeur1").Sheets.Add.Name = Range("B1").Offset(i, 0)
n = 1
End If
i = i + 1
Loop
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Workbooks("Classeur1").Sheets(Nom).Range("A65535").End(xlUp)

Le précédent code rapportait les différents Onglets dans le même fichier que
celui à traiter

Peux être mieux pour toi

Dis moi !!!!



Bonjour à tous !

j'ai à mettre en place une macro un peu complexe (tout du moins pour moi) :

j'ai un fichier ARTICLES que je récupère de mon fournisseur mais qui est
présenté comme un document word, à savoir qu'au lieu d'avoir les différentes
données dans des cols différentes, ils ont mélangé celles-ci
ainsi
col A = référence
col B = désignation mais aussi la famille du produit uniquement identifié
car en caractères gras

Afin de créer un fichier que lequel je puisse travailler correctement

je voudrais qu'à chaque fois que la cellule B est en gras,
créer une nouvelle feuille nommée avec la valeur de cette cellule
ET
copier toutes les lignes situées sous ce titre dans cette nouvelle feuille
AINSI
j'obtiens une feuille par famille de produits

PENSEZ VOUS QUE CELA SOIT POSSIBLE VIA UNE MACRO ?

et quelle syntaxe utiliser ?

d'avance merci pour votre éclairage
Françoise


Avatar
Françoise
bonjour FFO,

bon ça a l'air de fonctionner mais bloque sur une erreur 438 = propriété ou
méthode non gérée par cet objet sur la ligne
Sheets(Nom).Range("A65535").End(xlUp)

en fait, cela crée bien la feuille avec le nom du titre cellule B trouvé en
gras, mais attend dans excel de coller les cellules, si je fais coller sur la
feuille excel, cela colle bien les lignes liées au titre

est-ce normal que tu ne mettes pas "Paste" à la fin de ligne

j'avoue que je suis un peu perdue dans la lecture du message d'erreur
il ne doit pas y avoir grand chose à rajouter

d'avance merci de ta réponse
Françoise


Salut Françoise

Soit l'onglet Feuil1 à traiter

Je te propose ce code :

Sheets("Feuil1").Activate
n = 0
Do While Range("B1").Offset(i, 0).Row < Range("B65535").End(xlUp).Offset(1,
0).Row
If Range("B1").Offset(i, 0).Font.Bold = True Then
If n > 0 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)
End If
Ligne = Range("B1").Offset(i + 1, 0).Row
Nom = Range("B1").Offset(i, 0)
Sheets.Add.Name = Range("B1").Offset(i, 0)
n = 1
End If
i = i + 1
Sheets("Feuil1").Activate
Loop
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)

Celà devrait convenir

Dis moi !!!!


Bonjour à tous !

j'ai à mettre en place une macro un peu complexe (tout du moins pour moi) :

j'ai un fichier ARTICLES que je récupère de mon fournisseur mais qui est
présenté comme un document word, à savoir qu'au lieu d'avoir les différentes
données dans des cols différentes, ils ont mélangé celles-ci
ainsi
col A = référence
col B = désignation mais aussi la famille du produit uniquement identifié
car en caractères gras

Afin de créer un fichier que lequel je puisse travailler correctement

je voudrais qu'à chaque fois que la cellule B est en gras,
créer une nouvelle feuille nommée avec la valeur de cette cellule
ET
copier toutes les lignes situées sous ce titre dans cette nouvelle feuille
AINSI
j'obtiens une feuille par famille de produits

PENSEZ VOUS QUE CELA SOIT POSSIBLE VIA UNE MACRO ?

et quelle syntaxe utiliser ?

d'avance merci pour votre éclairage
Françoise




Avatar
FFO
Rebonjour Françoise

Trés certainement à la recopie du code ces 2 lignes :

Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)

se sont scindées et mises l'une sous l'autre

Mets toi en bout de la première et fait un Suppr pour ramener la deuxième en
bout de celle-ci avec entre ces 2 morceaux un blanc

Attention la modification est à opérer à 2 endroits dans le code

Tu trouveras sur ce lien un fichier avec la Macro que tu pourras tester et
analyser pour mettre correctement en place le code

http://www.cijoint.fr/cij16044155435408.xls

Attention avec ce code tu auras le résultat dans le même fichier que celui
que tu traites
Il faudra de plus activer le code à partir du fichier à traiter

Sinon prends ma 2° version qui elle évite tous ces inconvénients

Donnes moi des nouvelles !!!!


bonjour FFO,

bon ça a l'air de fonctionner mais bloque sur une erreur 438 = propriété ou
méthode non gérée par cet objet sur la ligne
Sheets(Nom).Range("A65535").End(xlUp)

en fait, cela crée bien la feuille avec le nom du titre cellule B trouvé en
gras, mais attend dans excel de coller les cellules, si je fais coller sur la
feuille excel, cela colle bien les lignes liées au titre

est-ce normal que tu ne mettes pas "Paste" à la fin de ligne

j'avoue que je suis un peu perdue dans la lecture du message d'erreur
il ne doit pas y avoir grand chose à rajouter

d'avance merci de ta réponse
Françoise


Salut Françoise

Soit l'onglet Feuil1 à traiter

Je te propose ce code :

Sheets("Feuil1").Activate
n = 0
Do While Range("B1").Offset(i, 0).Row < Range("B65535").End(xlUp).Offset(1,
0).Row
If Range("B1").Offset(i, 0).Font.Bold = True Then
If n > 0 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)
End If
Ligne = Range("B1").Offset(i + 1, 0).Row
Nom = Range("B1").Offset(i, 0)
Sheets.Add.Name = Range("B1").Offset(i, 0)
n = 1
End If
i = i + 1
Sheets("Feuil1").Activate
Loop
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)

Celà devrait convenir

Dis moi !!!!


Bonjour à tous !

j'ai à mettre en place une macro un peu complexe (tout du moins pour moi) :

j'ai un fichier ARTICLES que je récupère de mon fournisseur mais qui est
présenté comme un document word, à savoir qu'au lieu d'avoir les différentes
données dans des cols différentes, ils ont mélangé celles-ci
ainsi
col A = référence
col B = désignation mais aussi la famille du produit uniquement identifié
car en caractères gras

Afin de créer un fichier que lequel je puisse travailler correctement

je voudrais qu'à chaque fois que la cellule B est en gras,
créer une nouvelle feuille nommée avec la valeur de cette cellule
ET
copier toutes les lignes situées sous ce titre dans cette nouvelle feuille
AINSI
j'obtiens une feuille par famille de produits

PENSEZ VOUS QUE CELA SOIT POSSIBLE VIA UNE MACRO ?

et quelle syntaxe utiliser ?

d'avance merci pour votre éclairage
Françoise






Avatar
Françoise
Merci beaucoup, cela fonctionne impec (je n'ai pas encore testé avec 2
classeurs)
mais je m'aperçois que mon fournisseur m'a fait une petite feinte
supplémentaire, comme ils utilisent Excel comme Word, pour passer sur une
autre page ils ont ajouté des lignes vierges (ça je m'en suis occupée et les
ai supprimées via une macro) et ont répété le titre de la famille !! donc
lorsque je fais tourner ta macro, ça bloque puisqu'elle crée une feuille à
chaque titre en gras, et bien sur à un moment elle tombe sur le même titre
donc me dis dans VBA impossible de créer 2 feuilles qui portent le même nom
j'ai fait le test en supprimant les doublons et ça marche
=== comment peux-t-on expliquer cela à la macro ???
vois tu une solution à ce problème ?
=== peut être faut il créer d'abord une macro qui élimine les doublons sur les
titres en gras dans la colonne B ?
=== As tu une lumineuse idée là dessus ?
Françoise


Rebonjour Françoise

Trés certainement à la recopie du code ces 2 lignes :

Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)

se sont scindées et mises l'une sous l'autre

Mets toi en bout de la première et fait un Suppr pour ramener la deuxième en
bout de celle-ci avec entre ces 2 morceaux un blanc

Attention la modification est à opérer à 2 endroits dans le code

Tu trouveras sur ce lien un fichier avec la Macro que tu pourras tester et
analyser pour mettre correctement en place le code

http://www.cijoint.fr/cij16044155435408.xls

Attention avec ce code tu auras le résultat dans le même fichier que celui
que tu traites
Il faudra de plus activer le code à partir du fichier à traiter

Sinon prends ma 2° version qui elle évite tous ces inconvénients

Donnes moi des nouvelles !!!!


bonjour FFO,

bon ça a l'air de fonctionner mais bloque sur une erreur 438 = propriété ou
méthode non gérée par cet objet sur la ligne
Sheets(Nom).Range("A65535").End(xlUp)

en fait, cela crée bien la feuille avec le nom du titre cellule B trouvé en
gras, mais attend dans excel de coller les cellules, si je fais coller sur la
feuille excel, cela colle bien les lignes liées au titre

est-ce normal que tu ne mettes pas "Paste" à la fin de ligne

j'avoue que je suis un peu perdue dans la lecture du message d'erreur
il ne doit pas y avoir grand chose à rajouter

d'avance merci de ta réponse
Françoise


Salut Françoise

Soit l'onglet Feuil1 à traiter

Je te propose ce code :

Sheets("Feuil1").Activate
n = 0
Do While Range("B1").Offset(i, 0).Row < Range("B65535").End(xlUp).Offset(1,
0).Row
If Range("B1").Offset(i, 0).Font.Bold = True Then
If n > 0 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)
End If
Ligne = Range("B1").Offset(i + 1, 0).Row
Nom = Range("B1").Offset(i, 0)
Sheets.Add.Name = Range("B1").Offset(i, 0)
n = 1
End If
i = i + 1
Sheets("Feuil1").Activate
Loop
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)

Celà devrait convenir

Dis moi !!!!


Bonjour à tous !

j'ai à mettre en place une macro un peu complexe (tout du moins pour moi) :

j'ai un fichier ARTICLES que je récupère de mon fournisseur mais qui est
présenté comme un document word, à savoir qu'au lieu d'avoir les différentes
données dans des cols différentes, ils ont mélangé celles-ci
ainsi
col A = référence
col B = désignation mais aussi la famille du produit uniquement identifié
car en caractères gras

Afin de créer un fichier que lequel je puisse travailler correctement

je voudrais qu'à chaque fois que la cellule B est en gras,
créer une nouvelle feuille nommée avec la valeur de cette cellule
ET
copier toutes les lignes situées sous ce titre dans cette nouvelle feuille
AINSI
j'obtiens une feuille par famille de produits

PENSEZ VOUS QUE CELA SOIT POSSIBLE VIA UNE MACRO ?

et quelle syntaxe utiliser ?

d'avance merci pour votre éclairage
Françoise








Avatar
MichDenis
Voici un fichier exemple : http://cjoint.com/?mvs6DpAP3O

Le code est dans le module feuille "Feuil1"



"Françoise" a écrit dans le message de news:

Bonjour à tous !

j'ai à mettre en place une macro un peu complexe (tout du moins pour moi) :

j'ai un fichier ARTICLES que je récupère de mon fournisseur mais qui est
présenté comme un document word, à savoir qu'au lieu d'avoir les différentes
données dans des cols différentes, ils ont mélangé celles-ci
ainsi
col A = référence
col B = désignation mais aussi la famille du produit uniquement identifié
car en caractères gras

Afin de créer un fichier que lequel je puisse travailler correctement

je voudrais qu'à chaque fois que la cellule B est en gras,
créer une nouvelle feuille nommée avec la valeur de cette cellule
ET
copier toutes les lignes situées sous ce titre dans cette nouvelle feuille
AINSI
j'obtiens une feuille par famille de produits

PENSEZ VOUS QUE CELA SOIT POSSIBLE VIA UNE MACRO ?

et quelle syntaxe utiliser ?

d'avance merci pour votre éclairage
Françoise
Avatar
FFO
Rebonjour Françoise

Ravi de t'avoir satisfaite

Pour ton dernier souci lié à ton fichier à traiter je te propose d'inclure
dans la même feuille déjà créée les données qui ferait appel à un Onglet du
même nom

Voici le code 1° version :

Sheets("Feuil1").Activate
n = 0
Do While Range("B1").Offset(i, 0).Row < Range("B65535").End(xlUp).Offset(1,
0).Row
If Range("B1").Offset(i, 0).Font.Bold = True Then
If n > 0 Then
If Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row = 1 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A" & Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row)
Else
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A" &
Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row).Offset(1, 0)
End If
End If
Ligne = Range("B1").Offset(i + 1, 0).Row
Nom = Range("B1").Offset(i, 0)
For j = 1 To Sheets.Count
If Sheets(j).Name = Range("B1").Offset(i, 0) Then
Existant = 1
Exit For
End If
Next
If Existant <> 1 Then
Sheets.Add.Name = Range("B1").Offset(i, 0)
End If
n = 1
End If
i = i + 1
Sheets("Feuil1").Activate
Existant = 0
Loop
If Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row = 1 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A" & Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row)
Else
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A" &
Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row).Offset(1, 0)
End If


Le lien où tu trouvera le fichier modifié dans cet esprit :

http://www.cijoint.fr/cij87282098335552.xls

Pour la 2° version (2 classeurs ) :

Workbooks("ARTICLES.xls").Sheets("Feuil1").Activate
n = 0
Do While Range("B1").Offset(i, 0).Row < Range("B65535").End(xlUp).Offset(1,
0).Row
If Range("B1").Offset(i, 0).Font.Bold = True Then
If n > 0 Then
If
Workbooks("Classeur1.xls").Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row = 1 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Workbooks("Classeur1.xls").Sheets(Nom).Range("A" &
Workbooks("Classeur1.xls").Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row)
Else
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Workbooks("Classeur1.xls").Sheets(Nom).Range("A" &
Workbooks("Classeur1.xls").Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row).Offset(1, 0)
End If
End If
Ligne = Range("B1").Offset(i + 1, 0).Row
Nom = Range("B1").Offset(i, 0)
For j = 1 To Sheets.Count
If Workbooks("Classeur1.xls").Sheets(j).Name = Range("B1").Offset(i, 0) Then
Existant = 1
Exit For
End If
Next
If Existant <> 1 Then
Workbooks("Classeur1.xls").Sheets.Add.Name = Range("B1").Offset(i, 0)
End If
n = 1
End If
i = i + 1
Existant = 0
Loop
If
Workbooks("Classeur1.xls").Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row = 1 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Workbooks("Classeur1.xls").Sheets(Nom).Range("A" &
Workbooks("Classeur1.xls").Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row)
Else
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Workbooks("Classeur1.xls").Sheets(Nom).Range("A" &
Workbooks("Classeur1.xls").Sheets(Nom).Range("A1").SpecialCells(xlLastCell).Row).Offset(1, 0)
End If

Avec sur ce lien le fichier correspondant :

http://www.cijoint.fr/cij71135713035524.xls


J'espère que celà ira

Dis moi !!!


Merci beaucoup, cela fonctionne impec (je n'ai pas encore testé avec 2
classeurs)
mais je m'aperçois que mon fournisseur m'a fait une petite feinte
supplémentaire, comme ils utilisent Excel comme Word, pour passer sur une
autre page ils ont ajouté des lignes vierges (ça je m'en suis occupée et les
ai supprimées via une macro) et ont répété le titre de la famille !! donc
lorsque je fais tourner ta macro, ça bloque puisqu'elle crée une feuille à
chaque titre en gras, et bien sur à un moment elle tombe sur le même titre
donc me dis dans VBA impossible de créer 2 feuilles qui portent le même nom
j'ai fait le test en supprimant les doublons et ça marche
=== > comment peux-t-on expliquer cela à la macro ???
vois tu une solution à ce problème ?
=== > peut être faut il créer d'abord une macro qui élimine les doublons sur les
titres en gras dans la colonne B ?
=== > As tu une lumineuse idée là dessus ?
Françoise


Rebonjour Françoise

Trés certainement à la recopie du code ces 2 lignes :

Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)

se sont scindées et mises l'une sous l'autre

Mets toi en bout de la première et fait un Suppr pour ramener la deuxième en
bout de celle-ci avec entre ces 2 morceaux un blanc

Attention la modification est à opérer à 2 endroits dans le code

Tu trouveras sur ce lien un fichier avec la Macro que tu pourras tester et
analyser pour mettre correctement en place le code

http://www.cijoint.fr/cij16044155435408.xls

Attention avec ce code tu auras le résultat dans le même fichier que celui
que tu traites
Il faudra de plus activer le code à partir du fichier à traiter

Sinon prends ma 2° version qui elle évite tous ces inconvénients

Donnes moi des nouvelles !!!!


bonjour FFO,

bon ça a l'air de fonctionner mais bloque sur une erreur 438 = propriété ou
méthode non gérée par cet objet sur la ligne
Sheets(Nom).Range("A65535").End(xlUp)

en fait, cela crée bien la feuille avec le nom du titre cellule B trouvé en
gras, mais attend dans excel de coller les cellules, si je fais coller sur la
feuille excel, cela colle bien les lignes liées au titre

est-ce normal que tu ne mettes pas "Paste" à la fin de ligne

j'avoue que je suis un peu perdue dans la lecture du message d'erreur
il ne doit pas y avoir grand chose à rajouter

d'avance merci de ta réponse
Françoise


Salut Françoise

Soit l'onglet Feuil1 à traiter

Je te propose ce code :

Sheets("Feuil1").Activate
n = 0
Do While Range("B1").Offset(i, 0).Row < Range("B65535").End(xlUp).Offset(1,
0).Row
If Range("B1").Offset(i, 0).Font.Bold = True Then
If n > 0 Then
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)
End If
Ligne = Range("B1").Offset(i + 1, 0).Row
Nom = Range("B1").Offset(i, 0)
Sheets.Add.Name = Range("B1").Offset(i, 0)
n = 1
End If
i = i + 1
Sheets("Feuil1").Activate
Loop
Range(Range("B1").Offset(i - 1, 0), "B" & Ligne).EntireRow.Copy
Sheets(Nom).Range("A65535").End(xlUp)

Celà devrait convenir

Dis moi !!!!


Bonjour à tous !

j'ai à mettre en place une macro un peu complexe (tout du moins pour moi) :

j'ai un fichier ARTICLES que je récupère de mon fournisseur mais qui est
présenté comme un document word, à savoir qu'au lieu d'avoir les différentes
données dans des cols différentes, ils ont mélangé celles-ci
ainsi
col A = référence
col B = désignation mais aussi la famille du produit uniquement identifié
car en caractères gras

Afin de créer un fichier que lequel je puisse travailler correctement

je voudrais qu'à chaque fois que la cellule B est en gras,
créer une nouvelle feuille nommée avec la valeur de cette cellule
ET
copier toutes les lignes situées sous ce titre dans cette nouvelle feuille
AINSI
j'obtiens une feuille par famille de produits

PENSEZ VOUS QUE CELA SOIT POSSIBLE VIA UNE MACRO ?

et quelle syntaxe utiliser ?

d'avance merci pour votre éclairage
Françoise










Avatar
Françoise
Bonjour FFO,

Encore une fois, merci car cela fonctionne merveilleusement bien

MAIS

décidément je me demande si je vais arriver à m'en sortir de ce fichier
m.......
car la macro butte dès qu'elle rencontre un nom de famille qui excède 31
car, là VBA me dit qu'il lui est impossible de créer une feuille avec un nom
dépassant 31 car, or j'ai regardé et vu que j'avais des familles qui
comptaient jusqu'à 45 car

crois tu qu'il soit possible de forcer le nombre de car pour le nommage de
feuille ?

ou dois-je d'abord modifier toutes les familles dont les noms excèdent 31
car manuellement, ce qui ne sera pas facile car les noms ne correspondront
plus au détail de la famille à créer

qu'en penses-tu ?
Avatar
FFO
Rebonjour Françoise

Ce fichier est vraiment cahotique ne crois tu pas ????

On ne pourras pas demander à Excel d'accepter des noms dépassant la limite
(31 caractère)

Par contre on peux essayer de s'adapter

Il faut d'abord déterminer le nombre de caractères acceptables

Puis jouer sur la ligne :

Sheets.Add.Name = Range("B1").Offset(i, 0)

En la modifiant ainsi :

Sheets.Add.Name = Mid(Range("B1").Offset(i, 0),1,5)

Ce qui indique à Excel de renomer la feuille crée avec une partie du nom de
la cellule en caractère gras désignée par le chiffre 1 indiquant de prendre
le 1° caractère et le chiffre 5 indiquant de prendre 5 caractères à partir du
1° du nom

Tu limites ainsi le nombre de caractère (à 5 dans cet exemple)

A toi donc de déterminer à la fois la position du 1° caractère (chiffre 1
dans cet exemple) et le nombre de caractères à prendre (chiffre 5 dans cet
exemple)

Une fois les chiffres déterminés il faut modifier aussi la ligne :

Nom = Range("B1").Offset(i, 0)

en prenant le même exemple ainsi :

Nom = Mid(Range("B1").Offset(i, 0), 1, 5)

Et celà normalement devrait fonctionner

Tiens moi informé !!!!


Bonjour FFO,

Encore une fois, merci car cela fonctionne merveilleusement bien

MAIS

décidément je me demande si je vais arriver à m'en sortir de ce fichier
m.......
car la macro butte dès qu'elle rencontre un nom de famille qui excède 31
car, là VBA me dit qu'il lui est impossible de créer une feuille avec un nom
dépassant 31 car, or j'ai regardé et vu que j'avais des familles qui
comptaient jusqu'à 45 car

crois tu qu'il soit possible de forcer le nombre de car pour le nommage de
feuille ?

ou dois-je d'abord modifier toutes les familles dont les noms excèdent 31
car manuellement, ce qui ne sera pas facile car les noms ne correspondront
plus au détail de la famille à créer

qu'en penses-tu ?



Avatar
MichDenis
Avec un petit effort, tu aurais pu lui pondre une fonction
qui tienne compte :
A ) nombre de caractères à retenir
B ) exclure du nom tous les caractères interdits
C ) s'assurer que le nom retenu n'est pas en doublon
avec un des noms d'onglet assigné dans le classeur

;-))



"FFO" a écrit dans le message de news:

Rebonjour Françoise

Ce fichier est vraiment cahotique ne crois tu pas ????

On ne pourras pas demander à Excel d'accepter des noms dépassant la limite
(31 caractère)

Par contre on peux essayer de s'adapter

Il faut d'abord déterminer le nombre de caractères acceptables

Puis jouer sur la ligne :

Sheets.Add.Name = Range("B1").Offset(i, 0)

En la modifiant ainsi :

Sheets.Add.Name = Mid(Range("B1").Offset(i, 0),1,5)

Ce qui indique à Excel de renomer la feuille crée avec une partie du nom de
la cellule en caractère gras désignée par le chiffre 1 indiquant de prendre
le 1° caractère et le chiffre 5 indiquant de prendre 5 caractères à partir du
1° du nom

Tu limites ainsi le nombre de caractère (à 5 dans cet exemple)

A toi donc de déterminer à la fois la position du 1° caractère (chiffre 1
dans cet exemple) et le nombre de caractères à prendre (chiffre 5 dans cet
exemple)

Une fois les chiffres déterminés il faut modifier aussi la ligne :

Nom = Range("B1").Offset(i, 0)

en prenant le même exemple ainsi :

Nom = Mid(Range("B1").Offset(i, 0), 1, 5)

Et celà normalement devrait fonctionner

Tiens moi informé !!!!


Bonjour FFO,

Encore une fois, merci car cela fonctionne merveilleusement bien

MAIS

décidément je me demande si je vais arriver à m'en sortir de ce fichier
m.......
car la macro butte dès qu'elle rencontre un nom de famille qui excède 31
car, là VBA me dit qu'il lui est impossible de créer une feuille avec un nom
dépassant 31 car, or j'ai regardé et vu que j'avais des familles qui
comptaient jusqu'à 45 car

crois tu qu'il soit possible de forcer le nombre de car pour le nommage de
feuille ?

ou dois-je d'abord modifier toutes les familles dont les noms excèdent 31
car manuellement, ce qui ne sera pas facile car les noms ne correspondront
plus au détail de la famille à créer

qu'en penses-tu ?



1 2