XL 2010 Boucle de lecture de colonne au comportement bizarre.

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;
Je rencontre un problème que je ne m'explique pas.

Explication de mon problème :
Ce classeur est composé des onglets suivants :

  • Reference : Onglet montrant un des deux résultats à obtenir.
  • Cura : Onglet montrant l’autre résultat à obtenir.
  • Donnees : Cette feuille contient les données de base qui vont être traitées pour obtenir les deux résultats cherchés.
  • Rescura : Une feuille de travail pour les modifications des données. Le résultat doit être ce qui est montré dans l’onglet Cura.
  • Resref : Une feuille de travail pour les modifications des données. Le résultat doit être ce qui est montré dans l’onglet Reference.
  • SaveDonneesEntree : Une sauvegarde des données avant tout traitement, de manière à pouvoir tout recommencer depuis le début.

En fait j’ai écrit des macros pour automatiser les traitements. La première d’entre elles est celle appelée « Suppress_accolades ». Elle a pour rôle de supprimer toutes les lignes comportant des accolades. Elle fonctionne bien.

Par contre dès que je dois commencer à modifier les valeurs de cellules, c’est à ce moment que commencent mes problèmes.
La macro « TRT_LIG » ne fonctionne pas correctement. Je vais essayer de détailler ce que j’ai pu constater.

Je commence par rechercher la ligne qui contient la chaine «"setting_version": 9, », pour pouvoir commencer le traitement. À savoir la création des premières lignes de la feuille Rescura. Pas de problèmes pour ces deux lignes. Ces deux valeurs ne se retrouvent plus jamais dans la colonne.

Puis après j’entame la boucle de lecture pour les autres valeurs de la colonne A. Et là rien ne va plus. Cete boucle doit me permettre de n'agir que sur certaines cellules au contenu identifié, et ainsi remplir mes feuilles résultat que sont "Rescura" et "Resref".

Pour l'instant je suis focalisé sur le remplissage de la feuille "Rescura", car une fois que j'aurai compris et réglé le problème le traitement de la feuille "Resref" est très similaire.

Si je j’exécute la macro par F8 en pas à pas certaines fois j’arrive à traiter deux fois l’étiquette « label » et d’autres fois je ne traite qu’une seule étiquette « label ».

Si j’exécute la macro automatiquement je ne traite que la première occurrence, puis plus rien d'autre.
La variable contenant le contenu d’une cellule reste vide après quelques boucles.

Donc si quelqu’un peut m’aider à comprendre pourquoi cela ne fonctionne pas je lui en serais reconnaissant.

En fait je voudrais arriver à régler les problèmes pour la feuille « Rescura », puis de me servir de ce traitement pour comprendre et faire le traitement de la feuille « Resref » par moi-même.

Je précise que je ne suis pas un pro du développement VBA et que ce que j’ai écrit dans ces macros reste une adaptation de plusieurs morceaux de code, donc je demande votre indulgence, et accepte toutes critiques (constructives), et conseils.

Je vous joins un fichier exemple pour illustrer ce que j'ai fait et pour vous permettre de me comprendre(j'espère que cela ne sera pas trop difficile).

J'espère avoir été assez clair et je suis à votre entière disposition pour tout renseignement.

D'avance merci à ceux (celles) qui auront la gentillesse de se pencher sur mon problème. Bonne journée à toutes et tous.
 

Pièces jointes

  • Copie de Travail V01.xlsm
    280.3 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Bonjour le fil, jeff1494

Est-ce que celle-ci fonctionne bien (mais plus rapidement) ? ;)
PS: Lancer cette macro quand c'est la feuille Données qui est active.
(ou modifier le code en conséquence)
VB:
Sub SuppAccolades_II()
Application.ScreenUpdating = False
Range(Cells(1), Cells(Rows.Count, 1).End(3)).AutoFilter Field:=1, Criteria1:="=*}*", Criteria2:="=*{*", Operator:=xlOr
ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Et pour la macro TRLLIG, je propose un petit allègement de code (pour le début)
Qu'en penses-tu?
VB:
Sub TRTLIG_II()
Dim numver As String, f As Worksheet, x
Set f = Worksheets("Donnees"): numver = "*setting_version*"
 'Trouve la cellule contenant la valeur de "numver" et extrait le numéro de version
x = Split(f.[A1:A50].Find(numver, LookIn:=xlValues, LookAt:=xlWhole), ":")
Worksheets("Rescura").[A1] = ";*****  Current Settings Used   *****"
'* Le code suivant permet de copier la cellule trouvée dans la feuille Rescura et de la mettre en forme
Worksheets("Rescura").[A2] = ";Setting Version:" & Replace(x(1), ",", "")
'to be continued ;-)
End Sub
 

jeff1494

XLDnaute Occasionnel
Bonjour Staple 1600;
Merci pour tes réponses, et en effet je me rend bien compte que je n'utilise pas la puissance de VBA.
Mais en tant que novice j'ai encore du mal à connaitre toutes les possibilité.
Ton code va me permettre d'en apprendre plus.
Pour la procédure SuppAccolades, la mienne marchait bien mais je réalise là que rien n'est optimisé. Je ne sais pas en fait comment grouper plusieurs actions en une seule instruction. Je suis en fait séquentiel, une chose après l'autre alors forcément mon code n'est pas optimisé.

Concernant la deuxième je fais les mêmes remarques sur mon code.

Bref je te remercie pour cette aide précieuse pour moi, car en essaynt de comprendre ton code cela me force à réfléchir autrement, et pour cela je te remercie.
Je vais voir tout cela en détail, et essayer de continuer à chercher pourquoi ma macro ne fonctionne pas comme je veux.

Encore merci et bonne journée à toi.
 

Staple1600

XLDnaute Barbatruc
Re

Je n'ai pas abandonné l'affaire mais là approche l'heure de l'apéro et de préparer le petit frichti dominical.
Je repasserai plus tard avec d'autres bout de code VBA.
Bon appétit.

PS: J'ai volontairement recopié tes commentaires dans mon code pour tu puisses comparer ma syntaxe avec la tienne ;)
 

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG