[Résolu] Souci dans la généralisation d'une macro automatique

Sebasto

XLDnaute Nouveau
Bonjour,

J'ai réalisé une macro à partir du moteur de création d'Excel 2007.
Mais j'ai quelques problèmes pour la généraliser, c'est-à-dire qu'elle puisse encore marcher quand j'ajouterai des lignes intermédiaires dans le fichier et qu'elle marche pour l'ajout d'un texte spécifique (=SI(STXT(LC(-3);1;1)=STXT(L(-1)C(-3);1;1);"";"<a name="""&STXT(LC(-3);1;1)&"""></a>&nbsp;<a href=""#top""><img border=""0"" src=""mc-top.gif"" alt=""légende"" title=""haut de page"" width=""11"" height=""7""></a>") qui n'est pas repris par la macro.
C'est sans doute des broutilles, mais je suis débutant.
Pour être précis, j'ai commenté le code ci-après avec les problèmes.
Le code fait une copie d'une colonne remplie de feuille 1 dans la feuille 2 puis diverses manips sur la feuille 2.

Code:
Sub test()
'
' test Macro
'

'
    Range(Selection, Selection.End(xlDown)).Select
' ici le problème est le nombre 520 qui apparaît alors que j'ai fait "fin" et que j'ajouterai des lignes remplies dans mon tableau
    Range("FL1:FZ520").Select
    Selection.Copy
    Sheets("Feuil2").Select
    Cells.Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A1").Select
    Sheets("Feuil1").Select
    Selection.Copy
    Sheets("Feuil2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Feuil2").Sort
' ici le problème est le nombre 520 qui apparaît alors que j'ai fait "fin" et que j'ajouterai des lignes remplies dans mon tableau
        .SetRange Range("A1:O520")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.Find(What:="|  ", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
' ici le problème est le nombre 290 qui apparaît alors que j'ai fait une ligne plus haut à partir de la cellule pointée par la recherche
    Range("A290").Select
    Range(Selection, Selection.End(xlUp)).Select
    Selection.EntireRow.Delete
    Range("F1").Select
    Selection.EntireColumn.Insert
    Range("F2").Select
' ici il manque le code pour écrire en F2 le texte suivant: =SI(STXT(LC(-3);1;1)=STXT(L(-1)C(-3);1;1);"";"<a name="""&STXT(LC(-3);1;1)&"""></a>&nbsp;<a href=""#top""><img border=""0"" src=""mc-top.gif"" alt=""légende"" title=""haut de page"" width=""11"" height=""7""></a>"
    ActiveSheet.Paste
    Range("E2").Select
    Selection.End(xlDown).Select
' ici le problème est le nombre 230 qui apparaît alors que j'ai fait "fin" et que j'ajouterai des lignes remplies dans mon tableau
    Range("F230").Select
    ActiveCell.FormulaR1C1 = "x"
' ici le problème est le nombre 230 qui apparaît alors que j'ajouterai des lignes remplies dans mon tableau
    Range("F230").Select
    Selection.End(xlUp).Select
    Selection.Copy
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Application.CutCopyMode = False
    Selection.EntireColumn.Delete
End Sub

Merci d'avance pour ce petit coup de pouce.
PS: je n'ai pas précisé pour la macro "en relatif" car je n'ai pas cliqué sur cette option
 
Dernière édition:

bbb38

XLDnaute Accro
Re : Souci dans la généralisation d'une macro automatique

Bonjour Sebasto, le forum,
Si tu pouvais mettre un petit fichier exemple (sans données confidentielles), je pense (mais ce n’est qu’un avis personnel) qu’il sera plus facile de t’aider.
Cordialement,
Bernard
 

Sebasto

XLDnaute Nouveau
Re : Souci dans la généralisation d'une macro automatique

Bonjour Bernard

Facile (et merci d'avance pour ton aide).
Ci-joint, attaché le fichier compos1.xlsm.
Comme il est plus petit, la macro est un poil différente, et pour la formule j'ai mis à la place 'blabla'.
A+, Seb
 

Pièces jointes

  • compos1.xlsm
    30.6 KB · Affichages: 71
  • compos1.xlsm
    30.6 KB · Affichages: 81
  • compos1.xlsm
    30.6 KB · Affichages: 90

bbb38

XLDnaute Accro
Re : Souci dans la généralisation d'une macro automatique

Bonjour Sebasto, le forum,
Pour l’instant je ne réponds que partiellement à ta demande. Sur le fichier ci-joint, on peut insérer une ligne en effectuant un double clic sur une cellule de la colonne A.
Un bouton de commande permet d’effectuer la mise à jour des colonnes A et B (qui devront être protégées, pour éviter toutes erreurs de manipulation), après modification du contenu des cellules (Ce code évite de mettre des formules dans la colonne A).
Cordialement,
Bernard
 

Pièces jointes

  • Sebasto.xlsm
    36.8 KB · Affichages: 57

Sebasto

XLDnaute Nouveau
Re : Souci dans la généralisation d'une macro automatique

Bonjour Bernard,

Je suis paumé.
Tu es sûr que le problème est là?
Ma macro ne crée pas du tout de lignes.
Ma macro consite à sélectionner un ensemble de cellule en faisant un down end, puis de copier dans la feullie 2 cet ensemble en 'valeur', puis dans la feuille 2 d'effectuer un certain nombre de transformations (tri, suppression de lignes -pas ajout-, et ajout d'une formuie sur une série de lignes).
Tu peux vérifier en exécutant la macro pas à pas dans mon fichier.
Est-ce que c'est plus clair?

Merci, Seb
 

bbb38

XLDnaute Accro
Re : Souci dans la généralisation d'une macro automatique

Bonjour Sebasto, le forum,
Mille excuses. Je n’avais pas lu ta macro. Je pensai que tu désirais insérer des lignes vides dans la feuille 1 pour les compléter. J’essaie de solutionner ton problème en fin d’après-midi.
Cordialement,
Bernard
 

bbb38

XLDnaute Accro
Re : Souci dans la généralisation d'une macro automatique

Bonjour Sebasto, le forum,
Sur la feuille 2, j’ai créé un bouton de commande pour lancer la macro. Celle-ci se trouve dans le module 3 sous le nom « Copier ».
En espérant que ce fichier correspondra à tes attentes.
Cordialement,
Bernard
 

Pièces jointes

  • compos1.xlsm
    39.6 KB · Affichages: 53
  • compos1.xlsm
    39.6 KB · Affichages: 59
  • compos1.xlsm
    39.6 KB · Affichages: 59

Sebasto

XLDnaute Nouveau
Re : Souci dans la généralisation d'une macro automatique

Bonjour Bernard,

Désolé d'avoir tardé à répondre, mais sur mon ordi portable mon connecteur avec sa carte mère a laché et boum 6 jours de réparation.

D'abord je voulais te demander pourquoi tu n'as pas simplement modifié la macro automatique aux endroits que j'avais commentés... c'est impossible???
Si c'était possible, même si pas élégant du tout, j'aurais préféré car j'aurais pu, après cela, faire des modifs à des macros automatiques comparables mais un peu différentes (voire plus simples, mais sur des fichiers qui ont en commun des nombres de lignes qui augmentent au fur et à mesure que des nouvelles données sont ajoutées) et là je ne vais pas savoir faire... désolé.

Merci beaucoup (tout de même!!!) d'avoir traité ma demande en revoyant complètement la macro automatique.
Il y a quelques petits soucis que j'ai pu régler en partie avec du pas à pas, d'autres que je ne sais pas régler.

Je te soumet ci-après les soucis que je ne sais pas régler (si tu ne peux pas répondre à la proposition en plus simple ci-dessus):
* tu enlèves les lignes avec "| " et c'est effectivement ce qui apparaît dans mon exemple, mais c'est plus compliqué que cela en vrai c'est pour cela que je trie d'abord, puis que je cherche la 1ère occurrence de ="| ", puis je monte d'une ligne et j'efface toutes les lignes au-dessus... c'est pas pareil

* je n'enlève pas la colonne A tout de suite, d'abord je crée une colonne puis j'insère la formule dans la nouvelle colonne créée (dans mon exemple, j'ai mis "blabla" parce que la VBA se bloque quand je met la formule, mais la formule est :
=SI(STXT(LC(-3);1;1)=STXT(L(-1)C(-3);1;1);"";"<a name="""&STXT(LC(-3);1;1)&"""></a>&nbsp;<a href=""#top""><img border=""0"" src=""mc-top.gif"" alt=""légende"" title=""haut de page"" width=""11"" height=""7""></a>")

* ensuite je peux copier sur elle-même avec option valeurs le contenu de la colonne créée, puis supprimer la colonne A

* et c'est fini (je ne fais pas de nouveau tri)

Merci de ton aide, Seb (et vraiment excuses-moi de préférer le profil bas pour ma demande, mais comme cela, cela reste dans mes cordes).
 

Sebasto

XLDnaute Nouveau
Re : Souci dans la généralisation d'une macro automatique

Bonjour le Forum,
Je fais des progrès par tatonnement sur ma macro automatique.

Il ne me reste qu'un seul os:
Erreur d'application '1004';
Erreur définie par l'application ou par l'objet
Surligné en jaune:
ActiveCell.FormulaR1C1 = "=SI(STXT(LC(-3);1;1)=STXT(L(-1)C(-3);1;1);"";""<a name=""&STXT(LC(-3);1;1)&""></a>&nbsp;<a href=""#top""><img border=""0"" src=""mc-top.gif"" alt=""légende"" title=""haut de page"" width=""11"" height=""7""></a>"")"

Voici le code après modif (atention c'est le code correspondant à mon fichier, pas au fichier-exemple sur ce forum, la ligne à souci est la 15ème à partir de la fin).
THE soluce ? Merci, Seb

Code:
Option Explicit
Sub test()
'
' test Macro
    Sheets("Feuil2").Select
    Cells.Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A1").Select
    Sheets("Feuil1").Select
    Range("FL1:FZ1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("Feuil2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Feuil2").Sort
        .SetRange Range("A:O")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.Find(What:="|  ", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    ActiveCell.Offset(-1, 0).Range("A1").Select
    Range(Selection, Selection.End(xlUp)).Select
    Selection.EntireRow.Delete
    Range("F1").Select
    Selection.EntireColumn.Insert
    Range("E2").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "x"
    Selection.End(xlUp).Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=SI(STXT(LC(-3);1;1)=STXT(L(-1)C(-3);1;1);"";""<a name=""&STXT(LC(-3);1;1)&""></a>&nbsp;<a href=""#top""><img border=""0"" src=""mc-top.gif"" alt=""légende"" title=""haut de page"" width=""11"" height=""7""></a>"")"
    Selection.Copy
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Application.CutCopyMode = False
    Selection.EntireColumn.Delete
    Sheets("Feuil1").Select
    Range("A1").Select
End Sub
 

Sebasto

XLDnaute Nouveau
Re : Souci dans la généralisation d'une macro automatique

Bonjour le forum,

Oh la honte, en furetant sur le forum, je viens de m'apercevoir qu'une formule Excel n'est pas reconnue telle quelle en VBA.
Donc mon =SI(STXT(LC(-3);1;1)=STXT(L(-1)C(-3);1;1);"";"<a name="""&STXT(LC(-3);1;1)&"""></a>&nbsp;<a href=""#top""><img border=""0"" src=""mc-top.gif"" alt=""légende"" title=""haut de page"" width=""11"" height=""7""></a>")
doit être traduit par quelque chose qui dépasse mes maigres capacités avec si j'ai bien compris un if pour si, un mid pour stxt et surtout then, else, etc.
En plus il faut que la formule soit copiée en descendant de F2 jusqu'à la cellule de F remplie avec 'x'.
A votre bon coeur !!!
Merci d'avance, Seb
 

Sebasto

XLDnaute Nouveau
Re : Souci dans la généralisation d'une macro automatique

Bonjour,

Pas de réponse !!!
Mais j'ai trouvé en tâtonnant/bricolant.
Je l'indique pour d'autres débutants comme moi.
J'ai fait un bout de macro automatique en copiant de la feuille 1 au bon endroit de la feuille 2 la formule précédée de '|' (copie-formule), puis j'ai enlevé le '|' et Excell a traduit tout seul la formule.
Je ne m'y attendais pas mais je m'en suis très bien porté.
Cdlt, Seb
 

Discussions similaires

Réponses
3
Affichages
591
Réponses
2
Affichages
946

Statistiques des forums

Discussions
312 330
Messages
2 087 341
Membres
103 524
dernier inscrit
Smile1813