Excel - Macro

__Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   -  
__Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je travaille sur un tableau excel, celui-ci comprend :

Une colonne A à remplir manuellement (n° de libellé: 1, 2 3, [..], 300..).

Des colonnes qui se remplissent automatiquement à l'aide d'une formule Recherchev, qui va chercher dans un auter onglet, les données en fonction du n° de libellé.
-> =RECHERCHEV(A2;'1 Suivi commandes et revalos'!R:AY;2;)

D'autres colonnes qui se remplissent manuellement (montants..) et d'autres qui traitent ces montants (sommes, %...).

Voilà donc pour les données, ensuite les colonnes sont mises en page..

Mon problème :

Lorsqu'il faut rajouter une ligne, il faut se placer à la suite de la dernière ligne, la copier-coller (format et formules..) et mettre le nouveau numéro de libellé.

Je veux automatiser la partie en gras ci-dessus, car dans l'avenir des personnes ne connaissant par vraiment excel devront se servir de l'outil.

J'ai donc créé une macro :

Sub Macro3()
'
' Macro3 Macro
' Macro enregistrée le 09/02/2011 par XXXXX
'
' Touche de raccourci du clavier: Ctrl+q
'
Rows("132:132").Select
Selection.Copy
Rows("133:133").Select
ActiveSheet.Paste
Range("A133").Select
Application.CutCopyMode = False
Selection.ClearContents
End Sub

Le problème est que celle-ci s'effectue toujours à la même ligne, et non pas où je le souhaite, car le tableau va grandir et la ligne 133 ne sera pas toujours la dernière..

Je ne sais pas si je suis clair, n'hésitez pas en cas de besoin.

Merci !

Nicolas

19 réponses

  1. melanie1324
     
    bonjour,

    transformes ta macro comme suit :

    Sub Macro3()
    '
    ' Macro3 Macro
    ' Macro enregistrée le 09/02/2011 par XXXXX
    '
    ' Touche de raccourci du clavier: Ctrl+q
    '
    i=1
    do while cells(i,1) <> ""
    i=i+1
    loop
    rows(i-1).copy
    Rows(i).Select
    ActiveSheet.Paste
    End Sub
    1
  2. melanie1324 Messages postés 1561 Statut Membre 156
     
    Re,
    Sub Macro3()
    '
    ' Macro3 Macro
    ' Macro enregistrée le 09/02/2011 par XXXXX
    '
    ' Touche de raccourci du clavier: Ctrl+q
    '
    i=1
    do while cells(i,1) <> ""
    i=i+1
    loop
    rows(i-1).copy
    Rows(i).Select
    ActiveSheet.Paste
    cells(i,1) = ""
    cells(i,1).select
    End Sub
    1
  3. melanie1324 Messages postés 1561 Statut Membre 156
     
    re,

    j'ai oublié une ligne de code :
    Sub Macro3()
    '
    ' Macro3 Macro
    ' Macro enregistrée le 09/02/2011 par RADZISZEWSKI Nicolas
    '
    ' Touche de raccourci du clavier: Ctrl+s
    '
    cells.select
    Selection.Sort Key1:=Range("R2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal

    i = 1
    Do While Cells(i, 18) <> ""
    i = i + 1
    Loop
    Rows(i - 1).Copy
    Rows(i).Select
    ActiveSheet.Paste
    range(Cells(i, 1), Cells(i, 51) )= ""
    cells(i,18) = cells(i-1,18)+1
    end sub
    1
  4. melanie1324 Messages postés 1561 Statut Membre 156
     
    re,

    écris ca :
    ActiveChart.SeriesCollection(1).ApplyDataLabels AutoText:=True, LegendKey:= _
    False, HasLeaderLines:=True, ShowSeriesName:=False, ShowCategoryName:= _
    True, ShowValue:=true, ShowPercentage:=True, ShowBubbleSize:=False

    avant :
    ActiveWindow.Visible = False
    Windows(a).Activate
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    Merci Melanie !

    Il semblerait que cela marche pour le moment !

    J'ai une nouvelle question, pour optimiser cette macro.

    Cela recopie donc sans problème la dernière ligne (formules, formats..)

    Je voudrais que cela supprime le contenu de la première cellule de la ligne, car il s'agit du numéro de libellé, qui doit être changé à chaque nouvelle ligne. Je n'ai pas envie d'induire les gens en erreur en faisant apparaitre le numéro de la ligne précedente..

    Merci !
    0
  7. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    Un grand merci, tout fonctionne, niquel !
    0
  8. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    Re bonjour tout le monde,

    Je sollicite de nouveau votre aide pour ma macro :

    Sub Macro3()
    '
    ' Macro3 Macro
    ' Macro enregistrée le 09/02/2011 par RADZISZEWSKI Nicolas
    '
    ' Touche de raccourci du clavier: Ctrl+s
    '
    i = 1
    Do While Cells(i, 18) <> ""
    i = i + 1
    Loop
    Rows(i - 1).Copy
    Rows(i).Select
    ActiveSheet.Paste
    Cells(i, 1) = ""
    Cells(i, 2) = ""
    Cells(i, 3) = ""
    Cells(i, 4) = ""
    Cells(i, 5) = ""
    Cells(i, 6) = ""
    Cells(i, 7) = ""
    Cells(i, 8) = ""
    Cells(i, 9) = ""
    Cells(i, 10) = ""
    Cells(i, 11) = ""
    Cells(i, 12) = ""
    Cells(i, 13) = ""
    Cells(i, 14) = ""
    Cells(i, 15) = ""
    Cells(i, 16) = ""
    Cells(i, 17) = ""
    Cells(i, 18) = ""
    Cells(i, 19) = ""
    Cells(i, 20) = ""
    Cells(i, 21) = ""
    Cells(i, 22) = ""
    Cells(i, 23) = ""
    Cells(i, 24) = ""
    Cells(i, 25) = ""
    Cells(i, 26) = ""
    Cells(i, 26) = ""
    Cells(i, 27) = ""
    Cells(i, 28) = ""
    Cells(i, 29) = ""
    Cells(i, 30) = ""
    Cells(i, 31) = ""
    Cells(i, 32) = ""
    Cells(i, 33) = ""
    Cells(i, 35) = ""
    Cells(i, 36) = ""
    Cells(i, 38) = ""
    Cells(i, 39) = ""
    Cells(i, 40) = ""
    Cells(i, 41) = ""
    Cells(i, 42) = ""
    Cells(i, 43) = ""
    Cells(i, 44) = ""
    Cells(i, 45) = ""
    Cells(i, 46) = ""
    Cells(i, 47) = ""
    Cells(i, 48) = ""
    Cells(i, 49) = ""
    Cells(i, 50) = ""
    Cells(i, 51) = ""
    Cells(i, 19).Select
    End Sub

    Je souhaite modifier celle-ci afin que :

    Avant de commencer, la macro fasse un tri par ordre croissant de la colonne R (18eme colonne)

    Puis qu'à cette étape : Cells(i, 18) = ""

    La cellule ne soit pas vidée, mais qu'elle reprenne la cellule de la ligne de dessus et y ajouter + 1 (ex: A1: 369 B1: 370)

    Merci d'avance !

    Nico
    0
  9. melanie1324 Messages postés 1561 Statut Membre 156
     
    Bonjour,

    Sub Macro3()
    '
    ' Macro3 Macro
    ' Macro enregistrée le 09/02/2011 par RADZISZEWSKI Nicolas
    '
    ' Touche de raccourci du clavier: Ctrl+s
    '
    Selection.Sort Key1:=Range("R2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal

    i = 1
    Do While Cells(i, 18) <> ""
    i = i + 1
    Loop
    Rows(i - 1).Copy
    Rows(i).Select
    ActiveSheet.Paste
    range(Cells(i, 1), Cells(i, 51) )= ""
    cells(i,18) = cells(i-1,18)+1
    end sub
    0
  10. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    Encore une fois un grand merci, tout marche, j'ai fait quelques modif' car le "range" prenait toutes les cellules de 1 à 51 et certaines ne devaient pas être remises à zéro.

    Merci et bonne journée !

    Nico
    0
  11. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    C'est encore moi, pour un nouveau problème :

    Voici ma macro :

    Sub Macro6()
    '
    ' Macro6 Macro
    ' Macro enregistrée le 11/02/2011 par RADZISZEWSKI Nicolas
    '
    ' Touche de raccourci du clavier: Ctrl+f
    '
    Columns("W:X").Select
    Range("X1").Activate
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
    , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
    False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
    :=xlSortNormal
    Range("A1:B375").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
    "D1"), Unique:=True
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "Accord de prix"
    Range("G3").Select
    ActiveCell.FormulaR1C1 = "Bordereau"
    Range("G4").Select
    ActiveCell.FormulaR1C1 = "Contrat"
    Range("G5").Select
    ActiveCell.FormulaR1C1 = "Contrat Majeur"
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H3").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H4").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H5").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H6").Select
    Charts.Add
    ActiveChart.ChartType = xlPie
    ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("G2:H5"), PlotBy:= _
    xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
    ActiveWindow.Visible = False
    Windows("Classeur6").Activate
    Range("J5").Select
    End Sub

    En fait, pour résumer, je copie deux colonnes d'un tableau, ouvre un nouveau classeur, les colles dedans, les trie par ordre alphabétique, puis fais un filtre élaboré recopiant les données sans doublons juste à côté.
    Ensuite je créé un tableau servant à compter (nb.si) le nombre par type de contrat.
    Enfin, j'insère un graphique en camenbert, en y activant comme étiquettes de données "nom de catégorie, valeur et pourcentage".

    Le problème arrive lorsque je lance la macro, tout fonctionne sauf à la fin pour le graphique :
    "Erreur d'execution '9':
    L'indice n'appartient pas à la sélection."

    Le graphique semble bien créé (le camembert à la bonne forme (répartition), mais les étiquettes n'apparaisent pas.

    Une idée?
    0
  12. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    Petite précision, il me semble qu'Excel me dit que l'erreur est à ce niveau

    Windows("Classeur6").Activate
    0
  13. melanie1324 Messages postés 1561 Statut Membre 156
     
    Bonjour,

    Sub Macro6()
    '
    ' Macro6 Macro
    ' Macro enregistrée le 11/02/2011 par RADZISZEWSKI Nicolas
    '
    ' Touche de raccourci du clavier: Ctrl+f
    '
    Columns("W:X").Select
    Range("X1").Activate
    Selection.Copy
    Workbooks.Add
    a = workbooks.name
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
    , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
    False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
    :=xlSortNormal
    Range("A1:B375").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
    "D1"), Unique:=True
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "Accord de prix"
    Range("G3").Select
    ActiveCell.FormulaR1C1 = "Bordereau"
    Range("G4").Select
    ActiveCell.FormulaR1C1 = "Contrat"
    Range("G5").Select
    ActiveCell.FormulaR1C1 = "Contrat Majeur"
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H3").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H4").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H5").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H6").Select
    Charts.Add
    ActiveChart.ChartType = xlPie
    ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("G2:H5"), PlotBy:= _
    xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
    ActiveWindow.Visible = False
    Windows(a).Activate
    Range("J5").Select
    End Sub
    0
  14. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    Il semble y avoir une erreur :

    "Erreur de compilation :
    Membre de méthode ou de données introuvables"

    Lorsque je clique sur OK, cela met en jaune "Sub Macro6()"

    et ça sélectionne "name" dans la 5eme ligne (a = Workbokks.Name)
    0
  15. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    J'ai voulu faire un test,

    Dans un nouveau classeur, créer un tableau tout simple puis créer une macro pour faire un graphique camembert à partir de ça, en mettant bien les étiquettes de données "nom de catégorie, valeur et pourcentage".

    Lorsque je lances la macro, celle-ci le graphe est créé mais les étiquette n'apparaissent pas non plus.. Ce qui ressemble au problème sur l'autre macro.
    0
  16. melanie1324 Messages postés 1561 Statut Membre 156
     
    J'ai fait une erreur de frappe :

    au lieu de a = Workbokks.Name
    mets :
    a = ActiveWorkbook.Name
    0
  17. melanie1324 Messages postés 1561 Statut Membre 156
     
    Bonjour,

    j'ai trouvé, avant ton chart.add, tu ne dis pas sur quoi tu veux appliquer ton camembert.
    Quelle est ta plage de cellule?
    si c'est toutes, avant chart.add mets :

    cells.select
    0
  18. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    Merci, ça marche, il n'y a plus l'erreur.

    En revanche, comme je le craignais, le camembert créé est constitué des 4 parties correctement calculées, mais aucune information n'apparait (nom de catégorie, valeur et pourcentage).
    0
  19. melanie1324 Messages postés 1561 Statut Membre 156
     
    je devrais apprendr eà lire mieux, essaie :

    Sub Macro6()
    '
    ' Macro6 Macro
    ' Macro enregistrée le 11/02/2011 par RADZISZEWSKI Nicolas
    '
    ' Touche de raccourci du clavier: Ctrl+f
    '
    Columns("W:X").Select
    Range("X1").Activate
    Selection.Copy
    Workbooks.Add
    a = workbooks.name
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
    , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
    False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
    :=xlSortNormal
    Range("A1:B375").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
    "D1"), Unique:=True
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "Accord de prix"
    Range("G3").Select
    ActiveCell.FormulaR1C1 = "Bordereau"
    Range("G4").Select
    ActiveCell.FormulaR1C1 = "Contrat"
    Range("G5").Select
    ActiveCell.FormulaR1C1 = "Contrat Majeur"
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H3").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H4").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H5").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(C[-4],RC[-1])"
    Range("H6").Select
    range(columns(7),columns(8)).select
    Charts.Add
    ActiveChart.ChartType = xlPie
    ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("G2:H5"), PlotBy:= _
    xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
    ActiveWindow.Visible = False
    Windows(a).Activate
    Range("J5").Select
    End Sub
    0
  20. __Nico989__ Messages postés 116 Date d'inscription   Statut Membre Dernière intervention   35
     
    Merci Melanie !

    Ca marche !

    Tout s'affiche !

    Merci et bon weekend !

    Probablement à la semaine prochaine s'il y a d'autres soucis sur d'auters macros ^^

    Nico
    0