Nouveau en VBA
Bonjour à tous,
pour le travail, j'essaie d'automatiser des fichiers.
Dans le cas qui me préoccupe, j'essaie, à partir d'une feuille data, de dispatcher une donnée dans différents feuilles déjà existantes en fonction d'une valeur.
Malgré les différentes formules essayées, je n'y arrive pas. Je pense donc que je vais devoir passer par une macro... et problème, je n'en ai jamais faite..
je vous joins un exemple pour vous faire comprendre ce que je recherché à faire:
Sur une feuille data, j'ai des projets (COL A) avec un montant (COL C). Je souhaite en fonction de la colonne C mettre tout ce qui est entre 30 et 443 sur la bonne feuille, + de 443 et - de 743 sur la bonne feuille et ce qui est > 743 sur la bonne feuille également.
J'ai juste besoin que ce qui se trouve en colonne A sur la feuille data se retrouve en colonne B sur la bonne feuille et à la suite l'un de l'autre sans cellule vide. Le reste se recherché tout seul par Vlookup.
Quelqu'un pourrait-il m'aider? VBA ou formule existante?
Merci et bien à vous.
Bonjour et bienvenue sur le forum
Un essai à tester. Te convient-il ?
Bye !
Bonjour Gmb,
ça fonctionne parfaitement.
Par contre j'ai oublié une sheet qui est "Suivi <30K"... Peux-tu me dire comment corriger la macro?
Seule difference les données doivent aller en colonne A.
Je pense avoir trouvé. Peux-tu me dire si le code est correcte?
Option Explicit
Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet, f4 As Worksheet, f As Worksheet
Dim i&
Sub Reporter()
Set f1 = Sheets("SUIVI <30K")
Set f2 = Sheets("SUIVI 30><443K")
Set f3 = Sheets("SUIVI 443 ><743")
Set f4 = Sheets("SUIVI >743K")
For i = 1 To 4
Set f = Choose(i, f1, f2, f3, f4)
f.Range("B2:B" & Application.Max(2, f.Range("B" & Rows.Count).End(xlUp).Row)).ClearContents
f1.Range("A2:A" & Application.Max(2, f1.Range("A" & Rows.Count).End(xlUp).Row)).ClearContents
Next i
For i = 2 To Application.Max(2, Range("A" & Rows.Count).End(xlUp).Row)
If Range("C" & i) <= 30 Then
Range("A" & i).Copy f1.Range("A" & f1.Range("A" & Rows.Count).End(xlUp)(2).Row)
ElseIf Range("C" & i) > 30 And Range("C" & i) <= 443 Then
Range("A" & i).Copy f2.Range("B" & f2.Range("B" & Rows.Count).End(xlUp)(2).Row)
ElseIf Range("C" & i) > 443 And Range("C" & i) <= 743 Then
Range("A" & i).Copy f3.Range("B" & f3.Range("B" & Rows.Count).End(xlUp)(2).Row)
ElseIf Range("C" & i) > 743 Then
Range("A" & i).Copy f4.Range("B" & f4.Range("B" & Rows.Count).End(xlUp)(2).Row)
End If
Next i
End Sub
Un énorme merci pour avoir pris le temps de m'aider.
Bien à toi,
Par contre, quand je mets un format as table, lors du report, les données se mettent sur la première ligne après le format mis.
(Ici, j'ai mis le format sur les 50 première ligne).
Que faut-il corriger dans le code pour que meme avec un format de table, les données se mettent dans la première case?