Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2011, 14h45   #1
Invité régulier
 
Homme
Inscription : novembre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : novembre 2011
Messages : 85
Points : 5
Points : 5
Par défaut Besoin d'aide sur une macro

bonjour à tous, je débute en vba, et je bloque sur les erreurs de ma macro,
j'ai inséré des commentaires pour chacune des commandes,
mais globalement cette macro sert à récuperer des données stockés dans les cellules A2 d'un nombre indéfini de feuille, la macro s'arrete une fois arrivé à la page nommé :Fin toujour présente dans le classeur.
et elle recopie ces noms un à un dans une ligne d'une meme feuille, en vérifiant que ce nom n'y figure pas déja.

voici donc la macro, avec en rouge les erreurs de ligne

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Sub Extraction_donnee_CCR()
 
'adresse = ActiveCell.Address recuperation donnée cellule
'ligne = ActiveCell.Row recuperation numero de ligne
 
'
' Extraction_donnee_CCR Macro
' Macro enregistrée le 17/11/2011 par T0116493
'
'analyser le contenu de la cellule A2 de la premiere page ( page numéro 7'
 
Dim produit, feuille As String
Dim a, b, c, final As Integer
feuille = LastNameSheet 'nom e la derniere feuille du fichier
var1 = 7 'numero de feuille'
var2 = 7 'colonne'
var3 = 0 'a completer'
 
'recupere le nom du 1er tube'
Worksheets("var1").Cells(2, a).Value = produit
 
'verifie si l'on a atteint la derniere colonne a verifier'
Do Until var2 = 251 Or final = 1
 
 'verifie si l'on a pas atteint la derniere feuille nomme Fin'
If ActiveSheet.Name = Fin Then
final = 1
 
End If
 
'verifie que le tube n'existe pas deja'
If produit = Worksheets("Top20 répartition h MO").Cells(1, var2).Value Then
UserForm1.Show
Else
'se positionne a la derniere cellule vide sur la ligne 1 en partant de droite et y recopie la valeur de "produit"
[IV1].End(xlToLeft).Offset(0, 1) = produit
'incrémente les colonnes pour changer de colonne'
var2 = var2 + 4
 
End If
 
Loop
'reinitialise les colonnes pour commencer un nouveau tube'
var2 = 7
 
MsgBox "Recopie des tube terminé"
 
End Sub


merci de votre aide
kyros21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2011, 03h27   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 623
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 623
Points : 30 954
Points : 30 954
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Citation:
Envoyé par kyros21 Voir le message
voici donc la macro, avec en rouge les erreurs de ligne
Où ?

Merci d'être plus explicite :

Message d'erreur ? Si oui, lequel ?
Le résultat n'est pas celui attendu ?

Un peu de clarté.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2011, 09h33   #3
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Quelques remarques sur la structure de ton code
Attention à la déclaration de variables
Code :
1
2
 
Dim produit, feuille As String
Pour VBA voila ce que tu lui demande
Code :
1
2
 
Dim produit AS VARIANT, feuille As String
Il faut répéter le type de variable à chaque fois
Code :
1
2
 
Dim produit as String, feuille As String
Tu ne déclares var1, 2 et 3 nul part
Attention, ici tu demande à VBA de trouver un onglet qui se nome "var1" et non pas le 7ème onglet ou un onglet nomé "7" (cela dépendra du type que tu donneras à Var1)
Donc ici il faut écrire
Ensuite, il vaudrait mieux toujours faire référence à l'onglet + classeur sur lesquels tu travailles
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Dim MonClasseurSource as WorkBook, MonClasseurBase as WorkBook
'Puis tu définis
 'J'ai pas compris sur quels classeurs tu travailles
Set MonClasseurSource = Workbooks("NomDuClasseurSource")
Set MonClasseurBase = Workbooks("NomDuClasseurBase")
 
'Ensuite dans le code tu fais référence à ton classeur
'recupere le nom du 1er tube'
'Worksheets("var1").Cells(2, a).Value = produit 'c'est l'inverse
produit = MonClasseurSource.sheets(var1).cell(2,a).value
Il faut que je parte,mais tu as beaucoup de choses à modifier dans ton code, il serait bien de lire des tutoriels (voir dans la section tutoriels), et d’être plus précis comme le dit Philippe

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h05.


 
 
 
 
Partenaires

Hébergement Web