Un pseudo-os dans une macro automatique et une petite question

stephsteph

XLDnaute Occasionnel
Bonjour le forum,

J'ai réalisé une petite macro assez simple qui marche (oui!).
Seulement voilà, mon fichier évolue j'ajoute des lignes et si je n'actualise pas le nombre total de lignes, la macro en oublie, elle marche mais cela devient faux.

En pratique, voici le bout de code avec le nombre total de lignes -1502- codé automatiquement (cela vient de la sélection des cellules A à F de 1 à tout en bas précédente) :

Code:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(0, -5).Range("A1:F1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=ActiveCell. _
        Offset(0, 1), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=ActiveCell. _
        Offset(0, 2), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
'        .SetRange ActiveCell.Range("A1:F1502")
        .SetRange ActiveCell.Range("A:F")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Si j'ajoute 3 lignes et que je ne remplace pas 1502 par 1505, c'est là que cela pert en vrille.
J'ai essayé de mettre seulement A1:F ou A:F, mais là çà bugge carrément.
Cela devrait être simple pour m'éviter de penser à actualiser le nombre de lignes. Mais je sèche.

Et la petite question, sur un autre macro qui marche et que j'adapte, j'ai la ligne de code suivante qui marche:
tabres(L) = "<p>CONTRIBUTEUR(S)… <b>" & tablo(n, 240) & "</b> [e= edition, t = texte, l= localite, m= milieu, p= place]</p>"
Je voudrais supprimer dans le texte tout ce qui est espace(lettre variable entre parenthèses) par rien
Par exemple dans mon n, 240, j'ai NomA (e), NomB (m), NomC (p)...
Actuellement j'obtiens <p>CONTRIBUTEUR(S)… <b>NomA (e), NomB (m), NomC (p)</b> [e= edition, t = texte, l= localite, m= milieu, p= place]</p>
Je voudrais obtenir <p>CONTRIBUTEUR(S)… <b>NomA, NomB, NomC</b></p>
En fonction Excel c'est facile en utilisant le caractère * (étoile), mais en VBA je cale, j'ai essayé les codes suivants d'après des exemples sur Internet, mais la macro ne tient pas compte de cette wild card
tabres(L) = "<p>CONTRIBUTEUR(S)… <b>" & Replace(tablo(n, 240), " (*)", "") & "</b></p>"
tabres(L) = "<p>CONTRIBUTEURS)… <b>" & Replace(tablo(n, 240), " (" & * & ")", "") & "</b></p>"
tabres(L) = "<p>CONTRIBUTEUR(S)… <b>" & Replace(tablo(n, 240), " (~*)", "") & "</b></p>"


Merci de votre aide


A+, Steph
 

stephsteph

XLDnaute Occasionnel
Re : Un pseudo-os dans une macro automatique et une petite question

Bonjour gilbert_RGI,

Merci beaucoup le code que tu proposes marche parfaitement et j'ai résolu mon petit os de la macro automatique.

As-tu une idée pour la petite question (peut-être aurais-je dû ouvrir un autre fil indépendamment?) ?

Je me suis demandée si je n'aurais pas dû mettre un caractère d'écahappement pour que mon '*' (étoile) fonctionne dans le code comme un anti-slash ???

Encore merci,

Steph
 

gilbert_RGI

XLDnaute Barbatruc
Re : Un pseudo-os dans une macro automatique et une petite question

Bonjour gilbert_RGI,

As-tu une idée pour la petite question (peut-être aurais-je dû ouvrir un autre fil indépendamment?) ?

Encore merci,

Steph

c'est surtout pas facile à comprendre pour le "quidam" qui passe sans connaitre de quoi il en ressort et surtout sans fichier explicatif

si possible sans donnée confidentielle

:cool:
 

stephsteph

XLDnaute Occasionnel
Re : Un pseudo-os dans une macro automatique et une petite question

Bonjour gilbert_RGI,

Tu vas peut-être mieux comprendre en contournant la question.
Je peux préparer (= nettoyer les caractères non voulus) ma colonne Excel existante avec une macro automatique comme celle-ci
Code:
ActiveCell.Offset(1, 0).Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Replace What:=" (*)", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Puis utiliser ma macro (pas de moi) telle quelle et cela marche puisque les données avec « (p) » ont été supprimées avant. Donc c’est OK.
Mais je voudrais corriger directement la ligne de code concernée en faisant un replace soit remplacer la séquence « espace-ouvrezlaparenthèse-nimporte quelcaractère-fermezlaparenthèse » par rien.
Ma ligne de code actuelle prend juste le contenu de la ligne i de la colonne 240
tablo(n, 240)
Il faut toujours prendre ce contenu, mais APRES avoir supprimé tout ce qui est entre parenthèses précédé d’un espace.
Donc j’essaie
Replace(tablo(n, 240), " (*)", "")
J’étais sûre que ce serait OK, mais non, la macro marche mais elle fait seulement le contenu de la ligne comme avec tablo(n, 240) sans supprimer

C’est plus clair ???

A+
 

gilbert_RGI

XLDnaute Barbatruc
Re : Un pseudo-os dans une macro automatique et une petite question

si j'ai bien compris ????

et fonctionne chez moi

:cool:


à mettre dans le module de page
pour A1

VB:
Sub test2()
    Range("A1").Select
    Selection.Replace What:="(*)", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub

pour toutes les cellules de la page
VB:
Sub test3()
    Range("A1").Select
    Cells.Replace What:="(*)", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
 
Dernière édition:

stephsteph

XLDnaute Occasionnel
Re : Un pseudo-os dans une macro automatique et une petite question

Bonjour gilbert_RGI,

Non, désolée.
Je croyais être plus claire mais mon souci est de modifier une ligne de code existante

Code:
tabres(L) = "<p>CONTRIBUTEUR(S)… <b>" & tablo(n, 240) & "</b> [e= edition, t = texte, l= localite, m= milieu, p= place]</p>"

qui marche mais prend la totalité du contenu de la cellule

par un code à peine modifié qui enlève le contenu quel qu'il soit qui est entre parenthèses, en même temps que les parenthèses et l'espace qui précède.

J'ai essayé

Code:
tabres(L) = "<p>CONTRIBUTEUR(S)… <b>" & Replace(tablo(n, 240), " (*)", "") & "</b></p>"

Mais cela reprend le contenu entier de la cellule (comme avant) sans les remplacements.

Voilà le hic !

Merci de t'être donné du mal.

Peut-être que c'est une simple question de parenthèses dans le code???

Merci en tout cas,

Steph
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 938
Membres
101 844
dernier inscrit
pktla