• Initiateur de la discussion Initiateur de la discussion Bashrog
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bashrog

XLDnaute Occasionnel
Bonsoir à tous.

C'est un grand moment pour moi, j'ai mis mes mains dans les macros pour la première fois !!!

Bon évidement, j'ai pas tout compris !!!

Et j'ai notamment, une question qui me taraude.

Voilà, tous les mois, je dois, pour le boulot, faire des stats. Pour ce faire, je dois extraire un fichier excel, et pendant un bon moment, le retravailler. Là un jeune stagiaire me dit que j'irais plus vite avec une macro. Après lui avoir dit de se méler de ce qui le regarde, et d'aller me chercher tout de suite un café, non mais de quoi j'me mèle !!!!

J'ai regardé, et le bougre avait raison. Pour sa peine, je lui ai fait faire tout un tas de photocopie 😀

Bon, mon souci c'est que je sors tous les mois une liste qui n'a pas la même longueur, et lorsque je fais ma macro (avec le truc pour enregistrer), ben si sur mon fichier n°1 je vais jusqu'à la ligne 400, et que mon fichier n°2 à 500 ligne, et ben il va s'arrêter à la ligne 400.

Si vous avez une idez, n'hésitez pas. Pensez à ce pauvre stagiaire si je n'y arrive pas 😀
 
Re : Première Macro

Bon, pour plus de clarté, je joins un fichier. C'est plus ou moins ce que je veux obtenir. En fait le problème, c'est que tel quelle, ma macro s'arrète toujours à la même ligne, je ne sais pas lui dire, tu vas jusqu'à ce qu'il n'y ai rien dans la colonne A (par ex.)

Bon, je n'arrive pas à joindre mon fichier, il me dit qu'il dépasse la taille maxi 68 Ko !!!
J'essaierais demain depuis le boulot, ça sera plus simple.

Merci à tous déjà.
 
Re : Première Macro

Bon, pour plus de clarté, je joins un fichier. C'est plus ou moins ce que je veux obtenir. En fait le problème, c'est que tel quelle, ma macro s'arrète toujours à la même ligne, je ne sais pas lui dire, tu vas jusqu'à ce qu'il n'y ai rien dans la colonne A (par ex.)

Salut,

Il faut utiliser une boucle qui "scan" ta colonne A jusqu'à qu'il n'y ait plus rien.
Par exemple:

Code:
n=1
While Not IsEmpty(Cells(n, 1))

....[I]ton action[/I]

    n = n + 1
Wend

j'espère que ça t'aidera! 😉
a+
 
Re : Première Macro

Bonsoir
Quelques procédures à tester :
Code:
Sub sélectionne_A1_XXn_1()
   With ActiveSheet
      .[A1].CurrentRegion.Select
   End With
End Sub

Sub sélectionne_A1_XXn_2()
   With ActiveSheet
      .Range(.[A1], .[A1].SpecialCells(xlCellTypeLastCell)).Select
   End With
End Sub

Sub sélectionne_A1_XXn_3()
   With ActiveSheet
      .Range(.[A1], Cells(.[A1].Offset(.Rows.Count - 1, 0).End(xlUp).Row, _
         .[A1].Offset(0, .Columns.Count - 1).End(xlToLeft).Column)).Select
   End With
End Sub

Sub sélectionne_A1_An_1()
   With ActiveSheet
      .Range(.[A1], .[A1].Offset(.Rows.Count - 1, 0).End(xlUp)).Select
   End With
End Sub

Sub sélectionne_A1_XX1_1()
   With ActiveSheet
      .Range(.[A1], .[A1].Offset(0, .Columns.Count - 1).End(xlToLeft)).Select
   End With
End Sub
ROGER2327
 
Re : Première Macro

Bonjour,

Tout d'abord merci à ceux qui m'ont posté des réponses, même si je n'ai absolument rien compris 😀

N'oubliez pas, c'est ma première macro, et j'utilise le bidule qui enregistre.

Bon, j'ai réussi à mettre une pièce jointe, j'ai limité à 40 lignes mon tableau, sachant qu'en réalité, il y en a plus de 400.

Je voulais savoir, s'il y avait une manip à faire quand on utilise l'enregistreur de macro pour avoir le résultat que je souhaite, ou bien faut il obligatoirement "programmer". Car dans l'exemple que je donne, c'est une macro simplifié, j'ai d'autre truc à faire !

Merci
 

Pièces jointes

Re : Première Macro

bonjour Bashrog, le fil

à tester :
Code:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 26/05/2009 par Claude
'
    [B][COLOR=Red]Dim derLigne As Integer
    derLigne = Range("A" & Rows.Count).End(xlUp).Row[/COLOR][/B]
    
    Range("A1:D1").Select
    Range("D1").Activate
    Selection.Font.Bold = True
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "Montant"
    Range("E1").Select
    Selection.Font.Bold = True
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]>0,RC[-1]*RC[-2],0)"
    Range("E3").Select
    ActiveWindow.LargeScroll ToRight:=-1
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E15"), Type:=xlFillDefault
    Range("E2:E15").Select
    Selection.AutoFill Destination:=Range("E2:E[B][COLOR=Red]" & derLigne[/COLOR][/B])
    Range("E2:E[B][COLOR=Red]" & derLigne[/COLOR][/B]).Select
    Selection.NumberFormat = "#,##0.00"
    Range("A1:E1").Select
    Range("E1").Activate
    Selection.AutoFilter
    ActiveWindow.FreezePanes = True
    Cells.EntireColumn.AutoFit
    Columns("A:A").ColumnWidth = 18.14
End Sub

PS: passe le bonjour à ton stagiaire 🙂

a+
 
Re : Première Macro

Bon, ben j'y arrive pas !!!

J'ai recopié ta formule, mais ça ne le fait pas du tout 🙁

Y a pas un moyen plus simple ?

Pensez à mon stagiaire. Il n'en peut plus de coller des timbres. Il n'a plus de langue le pauvre !
 
Re : Première Macro

re,

le mieux serait que ton stagiaire (bien sûr 🙂) nous prépare un fichier Zip avec le fichier de base et qu'il liste l'ensemble des opérations effectuées dessus (pour qu'on puisse te faire une macro) et si il est motivé, le fichier escompté (qu'on puisse comparer notre travail avec ce que tu attends).

bonne chance à ton stagiaire.

a+
 
Re : Première Macro

Bonjour le fil, bonjour le forum,

Pourquoi ne pas payer un café au stagiaire voire même l'augmenter et lui demander gentiment de te faire et de t'expliquer la macro ? Sinon, il faut reconnaître que l'enregistreur de macro n'est pas très futfut... Même si c'est un excellent moyen pour apprendre les bases, il faut souvent épurer les codes enregistrés et, bien plus difficile au début, les comprendre... Comme tu débutes, il faudrait que tu nous expliques ce que tu veux exacement pour que nous puissions t'aider en commentant les codes pour que tu les comprennes... C'est un long chemin et donc il te faudra de la patience...
 
Re : Première Macro

Bonjour,

En fait, mon stagiaire ne sait pas le faire non plus. Il a fait le malin, je lui ai dit d'aller me faire un café. Et depuis, je lui ai parié que j'allais y arriver avant lui. Ce matin il arrive en fanfaron, en disant qu'il y était arrivé. Alors selon lui, il faut maintenir enfoncé Maj+Shift+Ctrl (je sais plus trop). Il m'a montré, et s'est planté lamentablement. Il est donc puni (collage d'enveloppe) !!!

En fait, c'est assez difficile pour moi de vous donner un fichier, car je souhaiterais pouvoir l'adapter à d'autre macro (je fais beaucoup d'extraction et de retraitement de données).

En gros, j'ai besoin d'effectuer n'importe quelle macro jusqu'à la dernière ligne !!!
 
Re : Première Macro

re,

ça on l'a compris... que le nombre de ligne n'était pas fixe...

mais quand même, rien ne t'empêche de mettre un fichier exemple, et d'expliquer pas à pas ce que doit faire ta macro.

enfin, j'dis ça j'dis rien 🙂

a+
 
Re : Première Macro

Bonjour,

L'enregistreur de macro est très bien pour avoir les fonctions et syntaxes mais ensuite il faut nettoyer.
Enlever les .select qui ne servent à rien ainsi que les scrolling.
Tu as aussi le pas à pas pour t'aider. Tu met le curseur dans ta macro, tu fais F8 et tu regardes le résultat sur ta feuille voir si ça correspond à ce que tu veux. Sinon tu corriges et tu fais remonter le curseur jaune (cliqué/glissé) sur la ligne pour la ré-exécuter par F8.
Surtout ne pas se décourager, ça vient petit à petit ;-)

Si j'ai bien suivi ton code nettoyé devrait ressembler à ça :
Code:
    Dim derlig As Long
    derlig = [A65536].End(xlUp).Row
    Range("A1:E1").Font.Bold = True
    Range("E1").Value = "Montant"
    [E1].HorizontalAlignment = xlCenter
    Range("E2").FormulaR1C1 = "=IF(RC[-1]>0,RC[-1]*RC[-2],0)"
    [E2].AutoFill Destination:=Range("E2:E" & derlig), Type:=xlFillDefault
    Range("E2:E" & derlig).NumberFormat = "#,##0.00"
    [A1].AutoFilter
    Range("B2").Select
    ActiveWindow.FreezePanes = True
    Cells.EntireColumn.AutoFit
    Columns("A:A").ColumnWidth = 18.14

eric
 
Re : Première Macro

Merci Eric de ta réponse, mais j'ai un message d'erreur quand j'exécute la macro !

Pour essayer d'être plus simple (enfin j'espère), je joins un fichier avec l'état initial et l'état final souhaité.

Petite remarque, ça à l'air bien chaud quand même à "traduire" une macro. Mais enfin ça à l'air top !

Merci à tous en tout cas, c'est vraiment sympa ce forum.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
172
  • Question Question
Microsoft 365 Bug sur une macro
Réponses
6
Affichages
465
Réponses
6
Affichages
664
T
Réponses
4
Affichages
689
thomas95
T
W
  • Résolu(e)
Réponses
17
Affichages
2 K
F
  • Question Question
Réponses
11
Affichages
1 K
L
Réponses
9
Affichages
1 K
E
Réponses
1
Affichages
1 K
Retour