Se connecter avec
S'enregistrer | Connectez-vous

[Résolu][Excel] Parcours d'un classeur Excel

Dernière réponse : dans Programmation

Bonjour à tous
J'espère que l'un d'entre vous pourra m'aider, je galère sur un souci en VBA depuis vendredi...
Voilà le problème : Pour une de mes macros, j'ai besoin de modifier toutes les images nommées "Image1" d'un classeur Excel. Pour ce faire, j'utilise une boucle For (pour chaque feuille du classeur) et une boucle While à l'intérieur de celle-ci (pour traquer toutes les images).
Apparemment, la logique doit pas être mauvaise, parce que la 1ère feuille est traitée convenablement... mais jamais la seconde v_v

Je copie ici le fragment de la macro qui me pose problème :
  1. For i = 1 To nbFeuilles
  2. On Error GoTo Ign_err_boucle
  3. Worksheets(i).Select
  4. On Error GoTo E
  5. Do While True
  6. ActiveSheet.Shapes("Image1").Select <=C'est cette ligne qui provoque l'erreur "fatale"
  7. hei = Selection.ShapeRange.Height
  8. wid = Selection.ShapeRange.Width
  9. lef = Selection.ShapeRange.Left
  10. top = Selection.ShapeRange.Top
  11. Selection.Delete
  12. ActiveSheet.Paste
  13. Selection.ShapeRange.Height = hei
  14. Selection.ShapeRange.Width = wid
  15. Selection.ShapeRange.Left = lef
  16. Selection.ShapeRange.Top = top
  17. Range("A1").Select
  18. On Error GoTo Ign_err_boucle
  19. Loop
  20. Ign_err_boucle:
  21. On Error GoTo E
  22. Next i

Je sais, c'est pas très élégant tout ça >.>
Le déroulement maintenant : le 1er onglet est traité comme il faut, toutes les images sont remplacées. La macro passe au 2nd onglet, toutes les images sont remplacées... et la macro plante juste avant de passer au 3eme. La ligne incriminée me renvoie alors l'erreur "The item with the specified name wasn't found."... Mais ca je le sais bien puisque quand il rencontre cette erreur, il est censé passer à la 3ème feuille de calcul >.<

Ce qui m'agace le plus, c'est le fait qu'il s'exécute parfaitement sur la 1ere feuille v_v

Donc, à vot'bon coeur m'sieurs-dames, si une ame charitable veut bien aider un pauvre débutant en VBA ;) 
Lassé par la pub ? Créez un compte
Expert Programmation

Ouh que ça m'énerve de voir des Select/Selection/ActiveTrucs !
(Demande à Freeman23 :lol:  )

Si tu n'as pas de forme qui s'appelle Image1 sur ta n-ième feuille, c'est normal que ça plante :o 

Pour parcourir les formes de ton classeur, quelque soit leur nombre et leur nom :
  1. Dim feuille As Worksheet
  2. Dim forme As Shape
  3.  
  4. For Each feuille In Worksheets
  5. Debug.Print "Prêt à traiter la feuille " & feuille.Name
  6. For Each forme In feuille.Shapes
  7. Debug.Print "Prêt à traiter la forme " & forme.Name
  8.  
  9. ' // Ton code de remplacement ici.
  10.  
  11.  
  12. Next forme
  13. Next feuille

Ben le probleme principal c'est qu'il atteint "jamais" la derniere feuille... il bloque a la seconde j'te dis ^^
(désolé pour les select, au fait ;)  )
Merci beaucoup pour ton aide, je vais tester ce bout de code de ce pas ^^

Edit du lendemain : le code marche, j'ai juste qques modifs a faire et ce sra bon ^^
Merci encore zeb
Mais tu sais pourquoi le code merdait avant la 3eme page ? j'ai commence vba il y a trois semaines seulement, et ca me semble pas super-stable, comme langage... j'me trompe ?
Expert Programmation

Le langage n'est pas "instable", il est permissif. C'est-à-dire qu'il laisse faire n'importe quoi. Commence par mettre Option Explicit (voir l'aide à ce sujet) au début de tous tes modules.

Je ne connais pas ta feuille, mais le message est clair : "The item with the specified name wasn't found" Il n'y a pas d'image "Image1" dans ta feuille.

Pour les select, ce n'est pas ta faute. Si tu recopies ce que l'enregistreur a écrit pour toi, c'est intelligent... mais pas suffisant.

Citation :
le code marche
:sol:  Hey, quand même !!

Le "option explicit" j'le mets deja partout ^^ (c'était conseille sur tous les sites que j'ai visites)
l'objet qu'il retrouve pas c'est "Image 1", justement v_v
donc, a ce que j'ai vu, au premier onglet, il a une erreur "normale" quand il ne trouve pas mon image et passe en page 2. Mais a la seconde page, quand il ne trouve pas l'image, il met une erreur d'execution et non pas une erreur normale -> mon prog comprenait pus rien >.<
N'empeche : la classe, t'as un sacré niveau pour pouvoir aider tous les gens qui passent comme ca ^^

PS (c'est pour ca que j'ai tenu a repondre, mais j'ai oublie de le dire >.>) : j'utilise pas l'enregistreur... si, qd je connais pas une fonction (le code qui permet de lancer une impression rapide par exemple) -> j'lance l'enregistrement, j'execute la commande, je stoppe l'enregistrement. Tous mes "select" sont donc de moi ^^;;

Et le pire, c'est que depuis lundi (j'ai du attendre mercredi pour pouvoir poster je crois), je les avais lus, tes "petits" combats contre le select ^^
Meme le post que tu m'as donne en lien j'l'avais deja lu, c'est dire... mais comme je viens de debuter vba et que je ne connais pas les instructions les plus utiles (ajoute a ca un patron assez pressé de voir mes macros tourner...), j'ai fait un code assez "crade", même si j'aime po ca v_v

Eh, je cherche tout le temps ! lol
R'garde, j'ai pas (encore) posé d'autre question, et pourtant ya des tas de trucs qui n'ont pas marché... sais pas pourquoi.
Mais j'me debrouille, je contourne les difficultés (je fais des programmes plus complexes mais avec des des fonctionnalités en plus, et ca roule ^^) et J'EVITE LES SELECT, promis ;) 
Après, les soucis qui me restent, c'est l'utilisation de Excel, même pas de vba... j'm'y connais plus en programmation qu'en bureautique, moi ^^;;;
Lassé par la pub ? Créez un compte