Optimisation et Bug Macro

Bonjour,

J'ai commencé une macro mais elle n'est pas optimale et j'ai quelques bugs...

1) Je souhaite créer un onglet "Global" qui reprend les lignes de chacun de mes onglets allant de "janvier" à "Décembre" (pas les autres onglets)

--> Problème je me retrouve en colonne A avec l'onglet "macro" aussi et cela me crée 3 lignes pour chaque onglet dont 2 vides.

2) Je souhaite avoir en colonne FZ de mon onglet "Global" un compeur qui me compte combien de fois mon même matricule (Colonne B) se retrouve.

--> Problème j'ai fait que 200 lignes si je lui dit de faire jusqu’à la fin ça plante mon excel...

3) Je souhaite modifier ma colonne (A) des mois en lettre pour les avoir en chiffre (de 1 à 12)

--> Ça ne fonctionne pas bien non plus peut être il serait mieux de créer une autre colonne

Pouvez-vous m'aider ?

Je vous remercie d'avance.

3enfant-2.xlsm (297.09 Ko)

Bonjour,

Une solution pour le point 1 et 3

Pour le point 2 on verra cet a.m.

2enfant-2-vg.xlsm (308.77 Ko)

Bonjour,

Quelle rapidité Galopin !

Bon du coup que j'ai quand même travaillé sur une macro, je te la met ici, à coller dans un module et à utiliser telle quel!

En plus elle est entièrement commentée! Elle est pas belle la vie?

Dit moi si ça tourne comme tu veux de ton coté!

Yann

Sub Creer_Global()

'Déclaration de variables
Dim derlig As Long, dercol As Long
Dim i As Long, j As Long, mois As Long
Dim tabentree() As Variant
Dim tabsortie() As Variant
Dim nblignetotal As Long

'Initialisation du nombre total de ligne
nblignetotal = 0

'Pour chaques feuilles
For mois = 1 To 12

'On calcule la derniere ligne non vide
derlig = ThisWorkbook.Sheets(mois).Range("A" & Rows.Count).End(xlUp).Row - 3
dercol = ThisWorkbook.Sheets(mois).Cells(3, Cells.Columns.Count).End(xlToLeft).Column

'On incrémente le nombre total de ligne
nblignetotal = nblignetotal + derlig

Next mois

'On dimensionne le tableau de sortie
ReDim tabsortie(nblignetotal, dercol + 1) As Variant

'On désactive le rafraichissement de l'écran
Application.ScreenUpdating = False

'On réinitialise le compteur de ligne (on s'ens evira pour coper coller les lignes au bon endroit! ;) )
nblignetotal = 0

'Pour tous les mois
For mois = 1 To 12

    'On selectionne la feuille. Normalement c'est déconseillé d'utiliser les Select, mais la récupération des datas bug depuis hier si je n'active pas la bonne feuille ... :/
    ThisWorkbook.Sheets(mois).Select
    'On calcule la derniere ligne
    derlig = ThisWorkbook.Sheets(mois).Range("A" & Rows.Count).End(xlUp).Row
    'on récupère les datas
    tabentree() = ThisWorkbook.Sheets(mois).Range(Cells(4, 1), Cells(derlig, dercol)).Value

    'on colle les datas dans le tableau de sortie
    For i = 1 To derlig - 3
    tabsortie(nblignetotal - 1 + i, 0) = mois
        For j = 1 To dercol
        tabsortie(nblignetotal - 1 + i, j) = tabentree(i, j)
        Next j
    Next i
    'On incremente le nombre de ligne du tableau de sortie en fonction du nombre de lignes collées
    nblignetotal = nblignetotal + derlig - 3

Next mois

'On calcule le nombre de matricule en doublon

'Pour toutes les lignes du tableau de sortie
For i = 0 To nblignetotal
'on initialise le nombre de doublon à 0
tabsortie(i, dercol + 1) = 0
    'On parcourt toutes les lignes du tableau de sortie
    For j = 0 To nblignetotal
    'Si ce n'est pas la même ligne et que les matricules sont identiques alors on incrémente le compteur de doublon
    If i <> j And tabsortie(i, 1) = tabsortie(j, 1) Then tabsortie(i, dercol + 1) = tabsortie(i, dercol + 1) + 1
    Next j
Next i

'on selectionne la feuille Global (là encore, c'est déconseillé, mais ça bug de mon coté si je ne fais pas ça.. :/)
ThisWorkbook.Sheets("Global").Select
'et on colle le tableau de sortie
ThisWorkbook.Sheets("Global").Range(Cells(2, 1), Cells(nblignetotal + 2, dercol + 2)).Value = tabsortie

'On réactive le rafraichissement de l'écran
Application.ScreenUpdating = True

End Sub

Merci c'est top !

Par contre au niveau du compteur il y a un décalage je crois. Je dois compter 11 "M028342" à la place de 10 et 1 "M06587" et "M06587" à la place de 0....

My bad! Il me semblais que tu voulais compter le nombre de doublon!

remplace simplement

'on initialise le nombre de doublon à 0
tabsortie(i, dercol + 1) = 0

par

'on initialise le nombre de doublon à 0
tabsortie(i, dercol + 1) = 1

ça devrait tourner comme tu le veux!

Yann

Super ! Merci beaucoup ! C'est bien ça !

Belle journée !

Rechercher des sujets similaires à "optimisation bug macro"