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 17/11/2011, 16h45   #1
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
Par défaut Problème avec Object required

Bonjour,

Je tente de compiler des données et utilises pour la première fois le code Do Until... Loop.
Lors de l'exécution de la macro, celle-ci s'arrête sur la ligne :

Code :
MySheetName = MySheet.Name
Ci-dessous le code tapé :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub MS_Data()
 
Dim MySheet As Worksheet, MySheetName As String, MSYear As String, MSMonth As String
Dim LR1 As Long
 
Application.ScreenUpdating = False
 
MySheetName = MySheet.Name
MSYear = "20" & Left(Right(MySheetName, 6), 2)
MSMonth = Left(Right(MySheetName, 4), 2)
LR1 = .Range("A" & .Rows.Count).End(xlUp).Row
 
    Do Until MySheetName = "MS Data"
        With MySheet
            .Range("A1:I" & LR1).Copy Sheets("Compiled Data").Range("B" & .Rows.Count).End(xlUp).Offset(1, 0)
        End With
    Loop
 
 
Application.ScreenUpdating = True
 
End Sub
Pouvez-vous m'aider à corriger SVP ?

D'avance merci !
__________________
Cordialement,

Runsh
Runsh63 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 17h04   #2
Membre confirmé
 
Inscription : juillet 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 346
Points : 288
Points : 288
Bonjour,

Que voulez-vous faire ? Vous voulez parcourir toutes les feuilles du classeur et les concatener sur un feuille de resultat ?

Je remarque qu'il manque d'office une affectation :

set MySheet=? (activesheet ? peut-etre autre chose en fonction de ce que vous répondrez à la question précédente).

D'autre part il risque d'y avoir un bug sur la ligne
Code :
LR1 = .Range("A" & .Rows.Count).End(xlUp).Row
Il manque un bloc with d'après moi.

Bonne journée.
Access Newbie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 17h19   #3
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
Bonjour AccessNewbie,

J'ai tendance à vous énerver avec mes questions à la noix, mais vous me pratiquez bien puisque vous avez tout compris.
Je cherche à compiler des données de différentes feuilles.
Le nombre de feuilles pouvant varier, j'ai pensé à écrire ainsi.
Je pense que votre solution Set MySheet = ActiveSheet est pas mal.
Si ça ne marche pas, je reviens vers vous car vous avez compris ma finalité.

J'ai placé LR1 = ... plus bas dans le code, en effet il manquait un bloc With...
__________________
Cordialement,

Runsh
Runsh63 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 17h39   #4
Membre confirmé
 
Inscription : juillet 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 346
Points : 288
Points : 288
Vous devriez plutot utiliser une boucle dans cet esprit :

Code :
1
2
3
4
5
6
For Each sht In ThisWorkbook.Sheets
    If sht.Name <> "Compiled Data" Then
        LR1 = sht.Range("A" & sht.Rows.Count).End(xlUp).Row
        sht.Range("A1:I" & LR1).Copy Sheets("Compiled Data").Range("B" & Sheets("Compiled Data").Rows.Count).End(xlUp).Offset(1, 0)
    End If
Next sht
Par contre j'ai pas tout compris a l utilité des variables MSYear et MSMonth qui ne sont pas utilisées.

Et j'ai pas compris le
Code :
Do Until MySheetName = "MS Data"
Qu'est ce que cela signifie ? qu'attendez vous en faisant cette commande ?

Je vous laisse adapter le code à votre cas

PS : Ca a fonctionné l'autre bout de code que je vous avait pondu ?
Access Newbie est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/11/2011, 17h49   #5
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
Access Newbie,

Je peux très bien vous vouvoyer mais vous pouvez me tutoyer, j'aime autant.
L'autre bout de code était parfait, je l'ai adapté à mon cas et j'aurai à ce propos quelques questions à vous poser car je n'ai pas saisi une petite chose.

Je vais de suite tester le code que vous venez d'écrire.
Les variables MSYear et MSMonth me serviront tout de suite, c'est que j'y vais pas à pas. Chaque nom d'onglet se termine par jjmmaa et j'en ai besoin car comme vous le voyez, je colle les données de chaque feuille dans l'onglet de destination en colonne B. En A, je souhaite récupérer le nom de chaque feuille pour ensuite les coller en A(x). Car au bout du bout, j'aurai toutes mes données compilées et j'aimerai pouvoir différencier chaque "période" car j'en aurai besoin par la suite.
Je vais tenter de mon côté de "pondre" quelque chose mais ça ne m'étonnerait pas que je revienne vers vous plus vite que vous le pensez
__________________
Cordialement,

Runsh
Runsh63 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 18h05   #6
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut heu...!!!

bonjour

tu a tapé ceci

Code :
MySheetName = MySheet.Name
et en aucun cas tu a precisé avant le quel c'etait ou alors ailleur doncil manque une portion du cade


ensuite tu dis:
Code :
MSYear = "20" & Left(Right(MySheetName, 6), 2)
la tu devrais avoir une erreur puisque MySheetName est = a rien



au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 18h20   #7
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
Afin de récupérer la période en colonne A de ma feuille "Compiled Data", période que je récupère dans le nom de l'onglet de base, voilà ce que j'ai tapé (merci Access Newbie) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub MS_Data()
 
Dim MySheet As Worksheet
Dim LR1 As Long, LR2 As Long
 
Application.ScreenUpdating = False
 
    For Each MySheet In ThisWorkbook.Sheets
        If MySheet.Name <> "Compiled data" And MySheet.Name <> "Final data" And MySheet.Name <> "MS Data" And MySheet.Name <> "Main Menu" Then
            LR1 = MySheet.Range("A" & MySheet.Rows.Count).End(xlUp).Row
            MySheet.Range("A1:I" & LR1).Copy Sheets("Compiled Data").Range("B" & Sheets("Compiled Data").Rows.Count).End(xlUp).Offset(1, 0)
                With Sheets("Compiled Data")
                    LR2 = .Range("B" & .Rows.Count).End(xlUp).Row
                    .Range("A" & .Rows.Count.End(xlUp).Offset(1, 0) & ":A" & LR2).Value = "20" & Left(Right(MySheet.Name, 6), 2) & "." & Left(Right(MySheet.Name, 4), 2)
                End With
        End If
    Next MySheet
 
 
Application.ScreenUpdating = True
 
End Sub

Mais j'ai une erreur sur cette ligne :

Code :
.Range("A" & .Rows.Count.End(xlUp).Offset(1, 0) & ":A" & LR2).Value = "20" & Left(Right(MySheet.Name, 6), 2) & "." & Left(Right(MySheet.Name, 4), 2)
Encore Object Required...
__________________
Cordialement,

Runsh
Runsh63 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 18h27   #8
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

re
ferme les parenthezes d'un range ca marchera mieux

Code :
.Range("A" & .Rows.Count).End(xlUp).Offset(1, 0) & ":A" & LR2).Value = "20" & Left(Right(MySheet.Name, 6), 2) & "." & Left(Right(MySheet.Name, 4), 2)
au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 18h36   #9
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
Par défaut Presque

Nous devons être sur la bonne voie mais il me met "syntax error".
Le pire c'est que je suis demandeur mais ne suis pas suffisamment calé pour corriger moi-même...
__________________
Cordialement,

Runsh
Runsh63 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 18h46   #10
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
Voila une écriture différente, je trouve l'utilisation de Cells plus adapté que Range

Code :
.Range(.Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0), .Cells(.Cells(.Rows.Count, "B").End(xlUp).Row, "A")).Value
Elle intègre la valeur de LR2

Voila aussi la correction de ta ligne de code

Code :
.range(.Range("A" & .Rows.Count).End(xlUp).Offset(1, 0) & ":A" & LR2).Value
++
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 20
Vieux 17/11/2011, 19h19   #11
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Par défaut Remarque

Bonsoir à tous,
J'ai une remarque sur cette ligne
Code :
For Each MySheet In ThisWorkbook.Sheets
Vous aurez un erreur au cas où le classeur contient une feuille graphique.
Il fallait mettre
Code :
For Each MySheet In ThisWorkbook.Worksheets
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 18/11/2011, 10h12   #12
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
Merci pour toutes vos corrections. C'est très bien au niveau de la compilation des données.
Comment faire maintenant pour que la période ressorte en "2010.10" au lieu de "2010,10" ? Quand je faisais :

Code :
.Value = "20" & Left(Right(MySheet.Name, 6), 2) & "." & Left(Right(MySheet.Name, 4), 2)
Je me retrouvais avec le rendu suivant : "2010,1" pour le mois d'octobre.

En changeant comme ceci :

Code :
.Value = "20" & Left(Right(MySheet.Name, 6), 2) & "," & Left(Right(MySheet.Name, 4), 2)
J'ai "2010,10".

Or je voudrais avoir "2010.10". Comment transformer mon code SVP ?
Merci
__________________
Cordialement,

Runsh
Runsh63 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 10h29   #13
Membre confirmé
 
Inscription : juillet 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 346
Points : 288
Points : 288
Citation:
Envoyé par mercatog Voir le message
Bonsoir à tous,
J'ai une remarque sur cette ligne
Code :
For Each MySheet In ThisWorkbook.Sheets
Vous aurez un erreur au cas où le classeur contient une feuille graphique.
Il fallait mettre
Code :
For Each MySheet In ThisWorkbook.Worksheets
Bien vu

Je passerai par une variable intermediaire

Code :
1
2
3
4
5
 
 
 sDate=format(dateserial(Left(Right(MySheet.Name, 6), 2) ,Left(Right(MySheet.Name, 4), 2),1),"yyyy.mm")
 
.Value =sDate
En déclarant sDate as string
Access Newbie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 11h14   #14
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
Bonjour Access Newbie,

Je me permets de mettre en pièce jointe le fichier, car malgré ton code, ça ne fonctionne pas...
Peut-être qu'avec l'exemple sous les yeux tu arriveras au résultat que je cherche à obtenir...
Je te remercie toi ainsi que toutes les peronnes qui me favorisent énormément la tâche et m'apprennent beaucoup.
Fichiers attachés
Type de fichier : zip Gestion_MS.zip (1,26 Mo, 4 affichages)
__________________
Cordialement,

Runsh
Runsh63 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 11h38   #15
Membre confirmé
 
Inscription : juillet 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 346
Points : 288
Points : 288
Ce n'est pas grand chose, il s'agit juste d'un probleme e format de ta colonne A de la feuille "compiled datas".

Soit tu met le format "à la main" en selectionnant ta colonne et en mettant un format texte, soit tu le fais par vba (mais je ne suis pas sur que cela soit très utile).

Ci dessous l'exemple avec du vba

Code :
1
2
3
4
    With Sheets("Compiled Data")
        .UsedRange.ClearContents
        .Columns("A:A").NumberFormat = "@"
    End With
PS : je suis un boulet j'ai pensé au format juste après avoir posté ma réponse précédente (la correction que je t'ai fait faire avec le sDate n'est pas necessaire (mais peut etre plus compréhensible).

PS2 : Si tu as des soucis de compréhension sur l'autre bout de code, retourne dans la discussion appropriée et poste un message
Access Newbie est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 18/11/2011, 11h54   #16
Membre éprouvé
 
Avatar de Runsh63
 
Homme Duc
Nihiliste
Inscription : mars 2011
Messages : 395
Détails du profil
Informations personnelles :
Nom : Homme Duc
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Nihiliste
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 395
Points : 419
Points : 419
Super, ça fonctionne nickel, merci beaucoup !!
Je mets "Résolu" sur ce sujet mais je reviendrai sûrement prochainement avec d'autres questions.
Merci à vous tous pour votre patience et vos réponses
Bonne journée !
__________________
Cordialement,

Runsh
Runsh63 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h46.


 
 
 
 
Partenaires

Hébergement Web