Problème de code VBA

Bonjour,

Je suis un novice dans VBA Excel, et j'ai besoin d'aide. Voici mon code vba:

Sub onglet()

'

' onglet Macro

Sheets("Feuille Macro").Select

Range("A1:F1").Select

Range("A1:AU100").Select

Selection.Copy

Sheets.Add After:=ActiveSheet

ActiveSheet.Paste

Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=False

Range("A1:F1").Select

Columns("S:S").Select

ActiveWindow.SmallScroll ToRight:=5

Columns("S:AT").Select

Selection.EntireColumn.Hidden = True

'Premier copier_coller pour les stats

With Selection

Range("V5:AT5").Select

Selection.Copy

Sheets("Stat").Select

Range("A5").Select

ActiveWindow.TabRatio = 0.6

Range("A4:Y4").Select

Selection.Insert shift:=xlDown

ActiveSheet.Paste Link:=True

End With

'Deuxiéme copier_coller pour les totaux

With Selection

[u]Range("V8:AJ8").Select

ActiveSheet.Paste Link:=True[/u]

End With

Range("A4:O4").Select

With Selection

.VerticalAlignment = xlBottom

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

With Selection

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

With Selection

.HorizontalAlignment = xlGeneral

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

With Selection

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

With Selection.Font

.Size = 12

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ThemeColor = xlThemeColorLight1

.TintAndShade = 0

End With

Sheets("Tableau de Bord").Select

MsgBox "Ajout d'un nouveau membre reussi"

End Sub

Désolé, il prend un peu de place, pour faire simple quand je clique sur mon bouton "Ajouter un membre", ce macro, créer un onglet avec un nouveau tableau type et ensuite rajoute un ligne dans le tableau de l'onglet "Stats" et un ligne dans le tableau de l'onglet " Totaux".

Souci que je rencontre le rajout de ligne dans le tableau "Totaux" , cette sélection ne prend pas en compte le nouveau onglet Range("V8:AJ8").Select mais viens chercher cette selection dans l'onglet "Stats".

La partie en Rouge devrait chercher l'info lors de la création du nouveau onglet et non dans l'onglet "Stat"

Pouvez vous me dire comment indiquer à mon macro de chercher la valeur Range("V8:AJ8").Select dans le nouveau onglet et non dans l'onglet "stat".

Je vous remercie d'avance.

Bonsoir,

Première chose : le code cité est à mettre sous balises Code !

Tu as un bouton au-dessus de ta fenêtre de rédaction, sur lequel est écrit "Code". Il ne saurait passer inaperçu, et donc tu t'en sers...

En outre, il ne serait pas inutile de joindre ton fichier... Ton code est intégralement à écrire, et il serait plus rapide que tu indiques ce que tu veux obtenir fichier à l'appui au lieu de nous infliger ce magma enregistré...

Cordialement.

Bonjour ,

Merci pour ta réponse, je t'envoie donc le fichier excel en question. Si tu peux m'expliquer la marche à suivre afin que je puisse modifier le code.

Dans le fichier, je réexplique le problème.

Cordialement.

6fichier-test.xlsm (74.10 Ko)

Travailler avec VBA de la même façon que l'on travaille manuellement dans Excel avec des Select à répétition, finit toujours par jouer des tours... Si tu n'es pas sur la bonne feuille quand tu copies !

Il est donc toujours souhaitable de s'affranchir de toute séléection et de tout élément actif...

Ici il semble que la feuille intitulée Feuille Macro serve de modèle pour générer les feuilles membres. C'est à confirmer.

Et dans ce cas, pourquoi ne pas aller au plus simple : copie de la feuille, renommage (comment doit-elle être renommée ? nom du membre ?)

Et pourquoi n'ajoute-t-on pas le nom du membre lors de l'opération ?

Cordialement.

Bonjour,

Je suis un novice, je ne sais pas coder. J'utilise l'enregistreur de Macro et ensuite je mets les codes bout à bout. J'essaye de me

débrouillé avec mes connaissances. Je ne comprends pas pourquoi la 1er selection marche et la seconde prend dans l'onglet Stat.

Oui feuille macro me sert de modele. L'avantage je peux modifié le modele pour creer une feuille membre bien spécifique mais en gardant mes ajouts de lignes dans les 2 tableaux.

Pour le renommage auto des onglets je sais pas faire...

Re !

Ça s'apprend, comme tout !

Voilà une suggestion que tu peux réaménager...

Sub onglet()
    Dim nm$, nf$, n%
    nm = InputBox("Nom du nouveau membre ?", "Ajouter un membre")
    If nm = "" Then Exit Sub
    nf = InputBox("Nom de la feuille affectée au membre ?", "Ajouter un membre", nm)
    If nf = "" Then Exit Sub
    Application.ScreenUpdating = False
    With Worksheets("Feuille Macro")
        .Visible = xlSheetVisible
        .Copy after:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = nf
        .Visible = xlSheetHidden
    End With
    Worksheets(nf).Range("A1") = nm
    With Worksheets("Stat")
        n = .Range("A" & .Rows.Count).End(xlUp).Row + 1
        .Range("A" & n) = nm
        With .Range("B" & n)
            .Formula = "='" & nf & "'!W$5"
            .AutoFill .Resize(, 24)
        End With
    End With
    With Worksheets("TOTAUX")
        .Range("A" & n) = nm
        With .Range("B" & n)
            .Formula = "='" & nf & "'!W$8"
            .AutoFill .Resize(, 14)
        End With
    End With
    MsgBox "Ajout d'un nouveau membre réalisé.", vbInformation, "Ajouter un membre"
End Sub

D'abord, Feuille Macro étant le modèle, n'a pas besoin d'être visible, tu la masques donc, et si tu veux que sur les feuilles résultantes, les colonnes S à AT soient masquées, tu le fais sur le modèle, et cela se retrouvera sur les feuilles.

Lorsque tu lances la macro, elle te demande dans une boîte de dialogue le nom du nouveau membre, tu l'inscris. Si tu annules la macro s'arrête...

Elle te demande alors (nouvelle boîte de dialogue) le nom de la feuille, en te suggérant le nom inscrit précédemment. Tu peux l'accepter tel quel (si tu souhaites que les feuilles soient nommées avec le nom complet du membre) ou le modifier (par exemple ne garder que le nom en éliminant le prénom s'il y a lieu, en ajoutant un caractère discriminant en cas d'homonymie, etc.)

Si tu annules à ce stade, la macro s'arrête...

Si nom du membre et nom de feuille sont servis, la macro va poursuivre, en démasquant la feuille modèle, en faisant une copie insérée à la fin, nommant la copie avec le nom de feuille fourni, remasquant la feuille modèle. Elle ajoute le nom en A1.

Rien de bien compliqué, et tu obtiens sans manipulations compliquées de copier-coller, une feuille identique au modèle pour le nouveau membre, prête à l'emploi.

2e phase : les feuille Stat et TOTAUX...

D'abord il t'appartient de mettre en forme préalablement ces feuilles selon tes souhaits : il suffit de mettre en forme la ligne 4, d'étendre cette mise en forme sur un nombre suffisant de lignes et tu n'as plus à t'en préoccuper dans le code (on aurait pu certes l'écrire de façon moins surréaliste que ton enregistrement, mais lorsque quelque chose est inutile car une autre solution plus économique doit prévaloir, on choisit toujours l'économie ! )

On va donc initier une nouvelle ligne sur chacune des feuilles avec la formule adéquate. Je ne suis généralement pas partisan d'insérer des formules au moyen de VBA (car ce n'est pas économique en général !) mais dans ton cas spécifique, c'est le plus économique.

On récupère donc le numéro de la première ligne à servir sur Stat (et les membres étant ajoutés au deux, sur l'autre feuille ce sera donc le même numéro). On porte le nom en A. On insère la formule en colonne B et on l'étend sur la ligne (24 colonnes).

Sur TOTAUX, même schéma, on porte le nom en A. On insère la formule qui convient en B et on l'étend (14 colonnes).

Opération terminée. Message... et tu peux le vérifier, la nouvelle feuille est à ce moment là la feuille active...

(Tu peux si tu le souhaites ajouter un retour vers la feuille Tableau de bord...)

Cordialement.


Re!!

Je comprends tes remarques sur mon codage!! Il était vraiment nul!! Quand je vois l'efficacité de ton codage! c'est exactement ce que j'avais besoin!

Bon je dois surtout essayer de comprendre ton codage. J'ai un notre projet de fichier à réaliser et il va demander de la VBA également.

Encore un grand merci à toi pour ton aide j'étais vraiment loin du compte

Bonjour,

Conseils que j'avais omis pour ne pas alourdir :

  • Réduire le nombre de modules Standard à 1 : un seul suffit largement pour toutes tes macros, on ne gagne rien à disperser le code dans une multitude de modules, dès lors que l'on utilise un nouveau module, il doit y avoir une raison fonctionnelle pour isoler telle ou telle partie du code, soit pour en protéger l'accès à partir des autres modules, soit pour le rendre exportable indépendamment du reste, etc. De même ne pas pas laisser traîner les éléments devenus invalides, les supprimer au fur et à mesure, on ne s'y retrouvera que mieux.
  • Indenter systématiquement le code : cela permet au premier coup d'oeil de voir sa structure, de comprendre ce qu'on lit, le cas échéant de détecter d'emblée certaines erreurs.

Cordialement. Bonne continuation.

Rechercher des sujets similaires à "probleme code vba"