OVH Cloud OVH Cloud

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

6 réponses

1 2
Avatar
Françoise
et bien pour être cahotique, il l'est !

j'ai testé, cela fonctionne et tronque bien le titre en prenant que les 5
premiers car MAIS du premier mot, donc je me retrouve avec évidemment un
dysfonctionnement de la macro qui trouve des noms de feuilles similaires !

d'autre part je vais me heurter à de nouveaux problèmes encore sur ce
fichier, aussi, il faut que je redétaille les besoins précis et vois comment
essayer de m'en sortir avec ce fichu fichier

le but est de pouvoir intégrer dans une autre appli le fichier articles (+
de 1000 refs) mais détaillé suivant 3 critères qui évidemment dans le fichier
articles sont tous les uns à la suite des autres dans la famille !

je pensais m'en tirer en créant des feuilles par famille, puis en mettant en
place d'autres macros pour redétailler les autres critères, mais je
m'aperçois que cette solution n'est pas la bonne,

je vais essayer par des classeurs différents en créant un classeur par
famille, puis une feuille par critère

c'est pas encore gagné ! mais si j'y arrive cela évitera la resaisie (avec
tous les risques d'erreur que cela comporte) de + de 1000 articles dans une
autre appli

voilà tu sais tout ou presque de mes aventures macrobiotiques !
je te remercie beaucoup pour toute l'aide que tu m'as apportée
elle m'est très précieuse crois moi
A+
Avatar
FFO
Rebonjour Françoise

J'ai effectivement omis avec ce tronquage de modifier la ligne :

If Sheets(j).Name = Range("B1").Offset(i, 0) Then

ainsi

If Sheets(j).Name = Mid(Range("B1").Offset(i, 0), 1, 2) Then

afin de ne pas être confronté aux doublons

Mille excuses

Vois avec celà ce que tu peux en tirer

A ta disposition pour t'aider


et bien pour être cahotique, il l'est !

j'ai testé, cela fonctionne et tronque bien le titre en prenant que les 5
premiers car MAIS du premier mot, donc je me retrouve avec évidemment un
dysfonctionnement de la macro qui trouve des noms de feuilles similaires !

d'autre part je vais me heurter à de nouveaux problèmes encore sur ce
fichier, aussi, il faut que je redétaille les besoins précis et vois comment
essayer de m'en sortir avec ce fichu fichier

le but est de pouvoir intégrer dans une autre appli le fichier articles (+
de 1000 refs) mais détaillé suivant 3 critères qui évidemment dans le fichier
articles sont tous les uns à la suite des autres dans la famille !

je pensais m'en tirer en créant des feuilles par famille, puis en mettant en
place d'autres macros pour redétailler les autres critères, mais je
m'aperçois que cette solution n'est pas la bonne,

je vais essayer par des classeurs différents en créant un classeur par
famille, puis une feuille par critère

c'est pas encore gagné ! mais si j'y arrive cela évitera la resaisie (avec
tous les risques d'erreur que cela comporte) de + de 1000 articles dans une
autre appli

voilà tu sais tout ou presque de mes aventures macrobiotiques !
je te remercie beaucoup pour toute l'aide que tu m'as apportée
elle m'est très précieuse crois moi
A+








Avatar
FFO
Salut MichDenis

Des efforts j'en ai pas été avare
Mais peut être là sont les limites de mes compétences
Peut être pourrais je bénéficier de tes conseilles et de me donner une
solution détaillée en droite ligne de ce que tu me suggères
Je suis toujours ouvert à de nouvelles manières d'aborder les problèmes
posés et ainsi d'évoluer
Puis je compter sur ton concours en l'espèce
Grand merci d'avance


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 ?








Avatar
MichDenis
| Des efforts j'en ai pas été avare

À n'en pas douter .... le père Noël saura bien récompenser
tes efforts ....la fée des étoiles étant retenue par l'auteur de
ces lignes ;-))

| Peut être pourrais je bénéficier de tes conseilles et de me donner une
| solution détaillée en droite ligne de ce que tu me suggères

Tu te débrouilles très bien et tu sais sûrement comment t'y pendre !
Ceci étant, je veux bien y faire une suggestion si le temps me le permet
vers la fin de la journée...





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

Salut MichDenis

Des efforts j'en ai pas été avare
Mais peut être là sont les limites de mes compétences
Peut être pourrais je bénéficier de tes conseilles et de me donner une
solution détaillée en droite ligne de ce que tu me suggères
Je suis toujours ouvert à de nouvelles manières d'aborder les problèmes
posés et ainsi d'évoluer
Puis je compter sur ton concours en l'espèce
Grand merci d'avance


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 ?








Avatar
Françoise
Bon, ça ne marche pas mieux, car comme cela tronque les mots, la macro ne
trouve plus les lignes liées au nom de la feuille
ex :
nom de la famille (texte en gras dans mon fichier article) FEUX VERSION
CHANDELLES
La macro créé la feuille FEUX
là elle copie bien les lignes articles correspondantes
deuxième famille : FEUX VERSION BOMBES
La macro bloque car elle veut recréé la feuille FEUX
troisième famille : FEUX VERSION BOMBES CONFORT

bon tu vois on est pas sortis de l'auberge !
il faut que je réfléchisse à une meilleure solution si toutefois il en
existe une
je te remercie de ta disponibilité
j'arrête pour ce soir, je regarderai cela demain avec peut être un oeil neuf !
bonne soirée
Françoise
Avatar
FFO
Rebonjours Françoise

Avec la dernière modif que je t'ai transmise la Macro ne doit pas bloquer
car si elle trouve le même Nom parmi les feuilles créées elle doit insérer
les données dans celle qui existe et non chercher à créer une nouvelle
feuille avec ce nom

Il faut simplement bien adapter cette dernière ligne d'instruction :

If Sheets(j).Name = Mid(Range("B1").Offset(i, 0), 1, 2) Then

si tu choisis de tronquer pour ne prendre que du 1° au 5° caractère il faut
mettre cette ligne ainsi :

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

Tout dépend du choix que tu as réalisé

Ceci est valable pour tous les bouts de code construits autour de
l'instruction "Mid"

A toi de bien les paramétrer

Choisis aussi le bon troncage car peut être que 5 n'est pas la bonne option
Tu as un large panel de 1 à 30 caractères dons possibilité de trouver
l'option idéale répondant à toutes les situations

Dis moi ce qu'il en est !!!!


Bon, ça ne marche pas mieux, car comme cela tronque les mots, la macro ne
trouve plus les lignes liées au nom de la feuille
ex :
nom de la famille (texte en gras dans mon fichier article) FEUX VERSION
CHANDELLES
La macro créé la feuille FEUX
là elle copie bien les lignes articles correspondantes
deuxième famille : FEUX VERSION BOMBES
La macro bloque car elle veut recréé la feuille FEUX
troisième famille : FEUX VERSION BOMBES CONFORT

bon tu vois on est pas sortis de l'auberge !
il faut que je réfléchisse à une meilleure solution si toutefois il en
existe une
je te remercie de ta disponibilité
j'arrête pour ce soir, je regarderai cela demain avec peut être un oeil neuf !
bonne soirée
Françoise




1 2