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

  • Auteur de la discussion Senvisage
  • Date de début

Senvisage

Habitué
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 :
[cpp]
For i = 1 To nbFeuilles
On Error GoTo Ign_err_boucle
Worksheets(i).Select
On Error GoTo E
Do While True
ActiveSheet.Shapes("Image1").Select <=C'est cette ligne qui provoque l'erreur "fatale"
hei = Selection.ShapeRange.Height
wid = Selection.ShapeRange.Width
lef = Selection.ShapeRange.Left
top = Selection.ShapeRange.Top
Selection.Delete
ActiveSheet.Paste
Selection.ShapeRange.Height = hei
Selection.ShapeRange.Width = wid
Selection.ShapeRange.Left = lef
Selection.ShapeRange.Top = top
Range("A1").Select
On Error GoTo Ign_err_boucle
Loop
Ign_err_boucle:
On Error GoTo E
Next i
[/cpp]
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 ;)
 

zeb

Modérateur
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 :
Code:
Dim feuille As Worksheet
Dim forme   As Shape
    
For Each feuille In Worksheets
    Debug.Print "Prêt à traiter la feuille " & feuille.Name
    For Each forme In feuille.Shapes
        Debug.Print "Prêt à traiter la forme " & forme.Name
            
            ' // Ton code de remplacement ici.
            
            
    Next forme
Next feuille
 

Senvisage

Habitué
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 ?
 

zeb

Modérateur
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.

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

Senvisage

Habitué
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 ^^;;
 

zeb

Modérateur
st'horreur quand même !
Si tu parcours les réponses que je propose en VBA (on fait ce qu'on veut hein), 90%, c'est "VIRE-MOI LES SELECT/SELECTION". Je l'ai même écrit dans le topic

Ici, Freeman me pose la question de savoir pourquoi.
 

Senvisage

Habitué
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
 

zeb

Modérateur
Prends ton temps, réfléchis, lis la doc d'Excel, et poste sur PPC. Tu auras des ptites macros qui tourneront bien ;)
 

Senvisage

Habitué
Vu l'efficacité et la rapidité de l'aide apportée, il y a de bonnes chances que tu me revoies bientôt, en effet :p
 

Senvisage

Habitué
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 ^^;;;
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 078
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut