Bonjour tout le monde,

Cela fait un bout de temps de temps que je n'étais pas venu Je ne pensais pas me remettre à coder un jour mais les aléas du travail ont fait ue je dois apprendre le VBA pour Excel !

Plutôt une bonne nouvelle même si je trouve ce langage difficile à apprendre. Bref... Je vous explique ma demande.

Je dois mettre en place une macro sous Excel 2013 afin de récupérer des données arrivées "brutes" sur la DATA de mon classeur et les recopier sur la feuille ETAT de ce même classeur. Ensuite, je dois ajuster les colonnes et encadrer le tout.

Cela fait maintenant 2 semaines que je m'y suis mis et je n'avance pas des masses ... je suis à la page 50 de "VBA pour les Nuls" ;x

Après cette longue présentation, place à mon super code version 1 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
 
Sub MAJ_ETAT()
 
    ' Copie de DATA de la cellule B4 à la cellule O9999 vers ETAT
 
 Sheets("DATA").Range("B4:O9999").copy _
    Destination:=Worksheets("ETAT").Range("A4:N4")
 
 
    ' Ajustement auto des colonnes
 
    Worksheets("ETAT").Columns("C").NumberFormat = "m/d/yyyy"
    Worksheets("ETAT").Columns("A:N").AutoFit
    Worksheets("ETAT").Columns("A:C").HorizontalAlignment = xlCenter
    Worksheets("ETAT").Columns("H:N").HorizontalAlignment = xlCenter
 
 
End Sub
Je commence à la ligne 4 car j'aimerais ajouter un bouton pour les collègues qui seront amenés à utilisé cet état et qui ne savent pratiquement pas utilisé un pc. J'essaie de faire le plus simple pour eux.

Et je copie de la même façon à partir de la ligne 4 car j'ai une entête de tableau qui se met à jour en fonction de la date, du numéro de contrat, nom client, etc...

La version 1 fonctionne mais je n'arrive pas à mettre en place l'encadrement sur les lignes non vides.

J'ai donc voulu améliorer avec une version 2 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
Sub MAJ_ETAT()
 
Dim Lig As Long
 
    Lig = 4 'première ligne à vérifier
        Do While Not IsEmpty(Range("A" & Lig))
            Worksheets("DATA").Range("B4:O1000").copy _
                  Destination:=Worksheets("ETAT").Range("A4:N1000")
        Loop
            MsgBox "Copie terminée"
 
 
    ' Ajustement auto des colonnes
 
    Worksheets("ETAT").Columns("C").NumberFormat = "m/d/yyyy"
    Worksheets("ETAT").Columns("A:N").AutoFit
    Worksheets("ETAT").Columns("A:C").HorizontalAlignment = xlCenter
    Worksheets("ETAT").Columns("H:N").HorizontalAlignment = xlCenter
 
 
End Sub
Mais là je tombe dans une boucle infinie ... et ça fini par planter.

Je sais, ma demande est longue, désolé ...


En gros, l'idéal pour moi serait de :

- pouvoir copier de façon dynamique, les données extraites formant un tableau variable d'une extraction à l'autre.

- mettre en forme automatiquement le résultat (centrer, changer le format de date, encadrer).

- plus tard effectuer des sous totaux en fonction d'une colonne "année". Mais ce sera pour lus tard

Le tout avec un seul click pour mes collègues !

Voilà, je pense que pour une première demande après une longue période c'est pas mal.

Merci à tout ceux qui auront pris la peine de me lire et à ceux qui pourront m'aider ! Des bisous.