Erreur de compilation: C'est quoi ?

LINO60POST

XLDnaute Occasionnel
Bonjour le Forum,

En reprenant à partir d'un code écrit par Hervé, des éléments me permettant (je l'espérai) d'écrire un autre code pour sauvegarder une feuille d'un classeur, une erreur apparaît, dès que j'active la macro.
Cette erreur est:
La variable For Each doit être de type variant ou objet.
Qu'est ce qe cela veut dire au juste?
Puis autre question:
'ws' qu'est-ce que cela signifie et à quoi çà sert ?

Quelqu'un peut-il m'éclairer?
Ci joint le code zippé.
Merci d'avance à tous pour l'aide que vous m'apporterez.
LINO60POST [file name=CodeAnalyseLino.zip size=2743]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/CodeAnalyseLino.zip[/file]
 

Pièces jointes

  • CodeAnalyseLino.zip
    2.7 KB · Affichages: 12

Jam

XLDnaute Accro
Salut Lino,

1. tu cherches un élément de type string dans un tableau variant...tu ne peux évidement rien trouver. Modifie le Dim ws As String en Dim ws As Variant et cela doit marcher.
COOOORRECTION...Après relecture rapide je m'aperçois que même comme cela ça ne changera rien. En effet ton tableau ne contient que le nom 'Analyse'. En fait tu fais une boucle sur un tableau à un seul élément ce qui est inutile par essence. A ce que je comprend du code l'idée était de stocker tous les noms des onglets dans un tableau puis d'effectuer des opérations de copie entre un onglet et les onglets contenu dans le tableau. Ce qui ne semble pas être ton cas.

2. en soit ws ne veut rien dire, mais ici il s'agit d'une analogie avec WorkSheet ou feuille (voire Onglet) en 'français'.

Bon courage
 

Jeannot45

XLDnaute Occasionnel
Salut LINO60POST

ws est une variable qui a été déclarée en type texte (String). ce qui veut dire qu'elle ne peut stocker que des informations alphanumériques.

Dans une boucle For Each, la variable utilisée (en l'occurence ws) doit obligatoirement etre de type variant. (C'est à dire que VB gère de lui-meme le contenu de celle-ci)
Pour déclaréer une variable en variant
- soit ne pas la typer lors de la déclaration (c'est à dire écrire : Dim ws)
- soit déclarer le type variant (c'est à dire écrire : Dim ws as Variant)

Bonne continuation

Jeannot
 

LINO60POST

XLDnaute Occasionnel
bonjour le forum,
Jam & jeannot45,

Merci pour vos explications.Je débute en vba et je ne comprends pas encore tout de ce langage.
Je vais fureter sur wiki pour essayer de trouver des exemples qui concernent mon problème.
Si quelqu'un a une autre solution, je suis preneur.
Bonne journée à tous,
Amitiés
LINO60POST
 

LINO60POST

XLDnaute Occasionnel
Copier une feuille et l'envoyer par mail

Bonjour le forum,

Après quelques recherches sur le wiki, j'ai trouvé une macro daté du 20-06-04 écrit par michelXld suite à une demande spécifique de marc.
Ojectif était :
comment faire avec excel une macro pour enreg 1 seule feuille d'un classeur et l'envoyer par mail.
MichelXld à donc écrit une macro dont fichier zippé joint et adapté à ma situation.
Cela fonctionne parfaitement. J'ai contrôlé ce matin.Cependant, lorsque le destinataire ouvre le message, une boîte de dialogue demande si on veut mettre à jour les données où non.
Qu'on les mettent à jour ou non, les données s'évaporent et il ne reste le terme VALEUR dans chaque cellules.
Mes questions sont:
Que faut-il ajouter à cette macro pour que le destinataire reçois un message avec seulement les données figées et sans aucune liaison?
Est-il possible d'envoyer ce message à plusieurs destinataires en même temps?
Merci d'avance pour vos réponses et votre aide si bienveillante.
bonne journée
Amitiés
LINO60POST [file name=SubCopieFeuilleEtEnvoiMail.zip size=2690]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/SubCopieFeuilleEtEnvoiMail.zip[/file]
 

Pièces jointes

  • SubCopieFeuilleEtEnvoiMail.zip
    2.6 KB · Affichages: 11

Hervé

XLDnaute Barbatruc
Re:Copier une feuille et l'envoyer par mail

Bojour lino

essayes comme ceci :


Sub CopieFeuilleEtEnvoiMail()
Dim Fichier As String
Dim iMsg As Object, iConf As Object, iBP As Object
Dim fichierorigine As Workbook
Dim nouveaufichier As Workbook
Const cdoSendUsingPickup = 1
Fichier = 'Enregistrement ' & Format(Date, 'd mmmm yyyy') & '' & Format(Time, 'h mm ss') & '.xls'

Application.ScreenUpdating =
False
Set fichierorigine = ThisWorkbook
Set nouveaufichier = Workbooks.Add
fichierorigine.Sheets('Analyse').Cells.Copy
'créer un nouveau classeur contenant uniquement la feuille    cible
nouveaufichier.Activate
Range('a1').Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Selection.PasteSpecial Paste:=xlPasteFormats
ActiveWorkbook.SaveAs Filename:=fichierorigine.Path & '\' & Fichier
' enregistrement nouveau classeur (possibilité d'adapter le chemin et le nom du fichier)
ActiveWorkbook.
Close 'ferme le classeur enregistré
Application.CutCopyMode =
False
'envoi mail
Set iMsg = CreateObject('CDO.Message')
Set iConf = CreateObject('CDO.Configuration')

With iMsg
Set .Configuration = iConf
.
To = 'joelle.douvry@laposte.fr' 'destinataire
.Subject = 'Analyse'   
'sujet
.HTMLBody = 'Ci joint l'analyse du mois de....'
'corps du message
Set iBP = iMsg.AddAttachment(ThisWorkbook.Path & '\' & Fichier) ' piece jointe
.Send
'envoi
' l'envoi se fait sans message de confirmation et sans copie dans les elements envoyés
End With

Application.ScreenUpdating =
True
End Sub


pour copier une feuille sans les liaisons, il te faut coller la feuille (paste) avec une copie spéciale (pastespecial) format.

je n'ai pas testé la partie envoi mail.

salut
 

LINO60POST

XLDnaute Occasionnel
Re:Copier une feuille et l'envoyer par mail

Bonjour le Forum, Hervé,

Merci pour la solution et l'aide apportée.
Par contre, est-il possible que la partie 'corps de message ' de l'envoi par mail, fasse référence au mois de l'analyse qu'on envoie.
Par exemple: ce mois de février, j'effectue l'analyse définitive de janvier 06.
Lorsque je vais l'envoyer à l'aide de la macro, je souhaiterai que le corps du message fasse référence à 'janvier' et ainsi de suite chaque mois.Le corps du message serait alors:
Ci -joint analyse définitive de :'Janvier 06'
Est-il possible d'aménager la macro pour faire cela.

Merci d'avance à tous.
Bonne journée
LINO60POST
 

LINO60POST

XLDnaute Occasionnel
Re:Copier une feuille et l'envoyer par mail

Bonjour le forum, Hervé

Trés content que tu (vous) m'aides(iez) sur cette macro.
Contrairement à ce tu vous penses (ez), j'ai cherché à trouver le bon code pour cette macro. Le problème est que je suis encore trop jeune dans cet apprentissage et je ne comprends pas encore tous es termes de ce langage .Ce n'est pas de la mauvaise volonté, mais il faut du temps pour tout.
Donc, j'ai réécris la macro pour intégrer les modifications que tu as eu la gentillesse de me communiquer.
Quand j'active la macro, le débogueur m'indique une erreur'1004' suivi de : La méthode PasteSpecial de la classe Range a échoué.
J'ai donc imprimé le code et comparé avec ton message et le code d'origine de michelXld pour voir si je n'avais pas fais d'erreur de frappe ou oublié quelque chose . Je ne vois rien de special et je ne comprends pas ce qui se passe.
C'est quoi le problème?
Merci de bien vouloir m'aider encore sur cette macro.
Toutes mes excuses pour le dérangements.Je vais essayé d'être plus performant à l'avenir, mais ce sera quand même un peu long.
Merci d'avance à tous.
Amitiés
LINO60POST
 

LINO60POST

XLDnaute Occasionnel
Re:Copier une feuille et l'envoyer par mail

Re
Houp le fichier m'a échappé.
LINO60POST [file name=CodeAnalyseLino_20060206165959.zip size=2743]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/CodeAnalyseLino_20060206165959.zip[/file]
 

Pièces jointes

  • CodeAnalyseLino_20060206165959.zip
    2.7 KB · Affichages: 16

Hervé

XLDnaute Barbatruc
Re:Copier une feuille et l'envoyer par mail

re tout le monde

ne te méprend pas sur mon etat d'esprit alain.

Ma petite phrase introductive (trop sec j'en conviens) n'avait pas pour but de te heurter.

Mais je ne pense pas que te donner des codes tout fait va te faciliter l'apprentissage dont tu as l'air d'avoir envie.

J'ai commencé le vba voilà 2 ans, et je n'ai pas commencé par des codes aussi difficiles que ceux par lequel tu commences.

Je ne crois pas que démarrer par ce type de code soit la meilleur solution.

j'ai bien compris que pour le moment tu essayais de simplifier ton travail en utilisant le vba, et que l'apprentissage viendrai après.

pour le moment, ta pièce jointe ne correspond pas au code que je t'ai fourni, tu as du te tromper.

merci de me fournir le bon code.

salut

Message édité par: hervé, à: 06/02/2006 17:23
 

LINO60POST

XLDnaute Occasionnel
Re:Copier une feuille et l'envoyer par mail

Re tout le monde, hervé

Ne te fais pas de soucis, je ne suis pas offusqué.
C'est vrai que je n'ai pas commencé par le plus simple.C'est avant tout pour me simplifier la vie que j'apprends vba.
C'est vrai aussi que toutes les semaines on me demande quand j'aurais fini.
Moi, tu m'apprends plein de choses, pas forcément dans le bon ordre. Je garde tous les codes et je les réétudierai dans le bon ordre à un moment ou j'appréhenderai mieux ce langage.Enfin, merci Hervé et tout le forum pour votre savoir faire et votre patience.
Dernier point, ce n'est pas le bon code .Demain je te le renverrai, il est au bureau.
Merci encore et à demain ou en fin de soirée.
Amitiés
LINO60POST
 

LINO60POST

XLDnaute Occasionnel
Re:Copier une feuille et l'envoyer par mail

Bonjour tout le monde,Hervé

Avec toutes mes excuses pour l'erreur de code.
Ci-joint le bon code.
Merci d'avance pour l'aide et votre patience.
LINO60POST [file name=CodeVbaLino.zip size=3573]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/CodeVbaLino.zip[/file]
 

Pièces jointes

  • CodeVbaLino.zip
    3.5 KB · Affichages: 12

Statistiques des forums

Discussions
312 345
Messages
2 087 483
Membres
103 557
dernier inscrit
gerard.messerlin68@orange