arthrax
Messages postés35Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention31 décembre 2023
-
11 déc. 2006 à 16:50
arthrax
Messages postés35Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention31 décembre 2023
-
12 déc. 2006 à 15:37
Bonjour,
Je dois faire un script VBA sous excel pour récupérer les champs des 12 derniers mois.
J'ai commencer à faire un script où je récupère les derniers jours de chaque mois mais comment arreter la récupération à 12 occurences ?
Ensuite une fois les 12 derniers mois déterminé, je dois voir à quel ligne ils correspondent et récupéré 2 champs + le mois et la date. Et là 2e problème, je n'arrive pas à utilisé la fonction range pour récupérer ces champs. Quel est la bonne syntaxe ?
Merci
Arthrax
T U X Y Z
CapacitéDisk %OccupationDisk Année Mois Jour
1 120 12 2006 12 8
2 120 11 2006 12 5
3 120 11 2006 11 25
4 120 10 2006 11 15
5 120 9 2006 10 21
Sub Taux()
Dim MoisCourant As Range
Dim MoisSuivant As Range
Dim NumLigne As Integer
Set MoisCourant = ActiveSheet.Range("Y") 'Y= dernier mois (déjà trier)
'Boucle pour récupérer le dernier jour de chaque mois Comment limiter à 12 occurence ?
Do While Not IsEmpty(MoisCourant) = True 'arret de la boucle si cellule vide
Set MoisSuivant = MoisCourant.Offset(1, 0) 'descendre d'une ligne
If MoisSuivant.Value <> MoisCourant.Value Then
MoisCourant.Activate
NumLigne = ActiveCell.Row 'afin de connaitre le numéro de ligne
Range("T,U,X,Y,Z," & NumLigne & ":" & NumLigne).Copy 'sélection des champs à copier
Quel est la bonne syntaxe pour le range ? car là Erreur d'execution 1004 : La méthode ' range' de l'objet "_Global" a echoue
Selection.Copy
Range("B3").PasteSpecial xlPasteValues
End If
Set MoisCourant = MoisSuivant 'passage à la ligne suivante
Loop
End Sub
A voir également:
Boucle limité à 12 valeurs et fonction range + variable
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 12 déc. 2006 à 00:10
Tu écris
Set MoisCourant = ActiveSheet.Range("Y")
mais Y quoi ?
peut-être
Set MoisCourant = ActiveSheet.Columns("Y:Y")
et peut-être que je me trompe...(?)
Pour une sélection multiple, voici la méthode:
Dim Ligne As Integer
Ligne = 10
Range("A" & Ligne & ", C" & Ligne & ", F" & Ligne).Select
Essaie ta macro en pas à pas (F8)
et regarde ce qui se passe sur ta feuille à chaque ligne de code
cs_taikibaybay
Messages postés46Date d'inscriptionmercredi 1 mars 2006StatutMembreDernière intervention25 décembre 2007 11 déc. 2006 à 23:32
je te donne une astuc pour tout VBA sous excel
quand tu es sur une feuille excel, tu lance une nouvelle macro puis tu fais ce que tu veux faire comme un utilisateur normale donc tes selection, puis tu arrete la macro puis va voir le code dans la mcro??? tu n as qu a changé le code selon tes besoin
C cooooollll non
Vous n’avez pas trouvé la réponse que vous recherchez ?
arthrax
Messages postés35Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention31 décembre 2023 12 déc. 2006 à 11:20
Merci à toute les personnes qui m'ont répondu
taikibaybay : j'ai fait une erreur de syntaxe, la vrai syntaxe est
Range("A" & Ligne & ", C" & Ligne & ", F" & Ligne).SelectMerci à Mpi
et oui je connais l'enregistreur de macro (qui est fort utile d'ailleur), merci.
TMONOD : Merci c'est exactement ce qu'il me fallait.
Mpi : Set MoisCourant ActiveSheet.Range("Y") est équivalent à Set MoisCourant ActiveSheet.Columns("Y:Y").
Merci de m'avoir donné la bonne syntaxe pour mon range et pour l'astuce avec F8.
Par contre maintenant j'ai un autre soucis, lorsque je copie ma sélection avec Range("B3").PasteSpecial xlPasteValues et à cause de ma boucle, les valeurs sont écrasées au fur et à mesure. Donc j'ai cherché et trouvé Range("BK3").Insert Shift: =xlDown pour insérer des données vers le bas mais ça ne marche pas. Erreur de syntaxe ??
Merci grâce à vous je progresse énormément en vba.
Arthrax
Dim MoisCourant As Range
Dim MoisSuivant As Range
Dim NumLigne As Integer
Dim Compteur As Integer
Set MoisCourant = ActiveSheet.Range("Y")
Do While Not IsEmpty(MoisCourant) = True And Compteur < 12
Set MoisSuivant = MoisCourant.Offset(1, 0)
If MoisSuivant.Value <> MoisCourant.Value Then
MoisCourant.Activate
NumLigne = ActiveCell.Row
Range("T" & NumLigne & ", U" & NumLigne).Select
Selection.Copy
Range("BK3").Insert Shift:=xlDown
Compteur = Compteur + 1
End If
Set MoisCourant = MoisSuivant
Loop
arthrax
Messages postés35Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention31 décembre 2023 12 déc. 2006 à 12:52
Je viens d'essayer tes codes MPi mais ça ne fonctionne pas . Rien n'est affiché.
Je me suis peut être mal exprimé mais lorsque j'ai mis Range("BK3"), cela correspond à la cellule de l'intersection de la colonne BK et de la ligne 3, c'est l'endroit où les résultats doivent être collés.
Je me demande comment fonctionne la fonction Insert Shift:=xlDown car logiquement elle doit coller les valeurs les une en dessous des autres. Et si c'est le cas, à cause de la boucle Do While dans mon code, ça ne peut pas fonctionné : les valeurs sont écrasés d'une itération à l'autre ...
arthrax
Messages postés35Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention31 décembre 2023 12 déc. 2006 à 15:37
Je viens de trouver une solution pas très propre mais qui fonctionne, j'utilise le compteur (qui s'incremente de 1 à chaque itération) pour mettre le résultat sur la ligne
suivante.
Au lieu de mettre Range("BK3").Insert Shift:= xlDown
Je met Range("BK" & Compteur).PasteSpecial xlPasteValue
Merci pour vos aides au combien précieuses
Arthrax
P.S. : Toujours pas compris comment utiliser insert Shift:=xlDown
Dim MoisCourant As Range
Dim MoisSuivant As Range
Dim NumLigne As Integer
Dim Compteur As Integer
Set MoisCourant = ActiveSheet.Range("Y")
Do While Not IsEmpty(MoisCourant) = True And Compteur < 12
Set MoisSuivant = MoisCourant.Offset(1, 0)
If MoisSuivant.Value <> MoisCourant.Value Then
MoisCourant.Activate
NumLigne = ActiveCell.Row
Range("T" & NumLigne & ", U" & NumLigne).Select
Selection.Copy
Range("BK" & Compteur).PasteSpecial xlPasteValues
Compteur = Compteur + 1
End If
Set MoisCourant = MoisSuivant
Loop