Séparation des données

Bonjour à tous,

Je travaille dans une collectivité ou je gère les véhicules.

Comme chaque année j'utilise une base de données avec tous les véhicules et grâce à un filtre je vois les véhicules à remplacer. Ensuite je dois créer mes onglets et mettre à jour en manuel cela me prend énormément de temps. Je voudrais donc savoir s’il y a moyen d’automatiser les actions.

Voici ce que je voudrais pouvoir faire :

En colonne « Q » il y a les dates de réforme donc pour cette année je vais sélectionner 2022 AVEC LE FILTRE.

En colonne « M » il y a le budget de renouvellement.

Ce qu’il faut faire c’est un bouton qui me permette de mettre en place mes onglets.

Les onglets sont déjà prêts avec les entêtes de colonnes dedans afin de savoir ou mettre les données car il y aura d’autres choses qui seront en fixe dedans (en haut et normalement deux colonnes supplémentaires à la fin pour faire des calculs).

donc je sélectionne l’année en Q puis en appuyant sur le bouton la macro utilise à chaque ligne la case en « M » pour savoir dans quel onglet (il porte le même nom) copier la ligne (attention copier aussi la mise en forme car il y a des MFC).

Avant de copier les données il faudra effacer les anciennes de chaque onglets ce qui me permettra de faire la mise à jour quand je changerais des valeurs dans des cases de l’onglet principal en utilisant ce bouton.

Attention il y a certaines valeurs de la colonne « M » qui ne correspondent pas à un onglet donc il ne faut pas les traiter (ce sont des budgets que je ne gère pas et si un jour je viens à les gérer il me suffira de créer l’onglet pour qu’il soit prise en compte).

Merci pour votre aide précieuse.

Personne n'a une idée pour mon problème?

Bonjour,

Je ne suis pas sûr que ça réponde parfaitement à votre demande mais vous avez un modèle ici pour scinder un tableau en plusieurs sur la base de plusieurs critères d'une seule colonne : https://forum.excel-pratique.com/excel/base-de-donnees-et-macro-sur-2-onglets-differents-163838/2#p1...

Dans votre cas, il faudrait exécuter une première fois la macro :

Sub Extraire()
'If MsgBox("Voulez-vous lancer l'extraction ?", vbYesNo) <> vbYes Then Exit Sub
With New Divider
    .Divide TableRef:="NomTableau", _
            Field:=17, _
            vCriteria:=2022, _
            Operation:=AddValues
End With
End Sub

pour obtenir les valeurs 2022 puis à partir du nouvel onglet :

Sub Extraire()
'If MsgBox("Voulez-vous lancer l'extraction ?", vbYesNo) <> vbYes Then Exit Sub
With New Divider
    'NB : T_2022 est le nom du tableau créé sur l'onglet 2022 (>>> à vérifier quand même)
    .Divide TableRef:="T_2022", _
            Field:=13, _
            vCriteria:=Array("Critère1", "Critère2", "..."), _
            Operation:=ReplaceValues
End With
End Sub

Ca ne recopiera pas les MFC. Le code, que je ne suis pas allé voir depuis, est prévu pour créer des tableaux et ne respectera pas votre contrainte des lignes au-dessus. Pour l'instant, de tête, seules les valeurs sont copiées. Il est possible de remplacer .value par .formula pour éviter ce problème si les tableaux de destination reprennent les en-têtes de la source.

Les noms, critères et numéros de colonne sont à adapter évidemment

Cdlt,

Bonjour danval , le forum,

Salut 3GB

Un code basique à tester....

Sub renouvellement()
 Dim sh As Worksheet

 Application.ScreenUpdating = False

  For Each sh In ThisWorkbook.Worksheets
   If sh.Name <> "RENOUVELLEMENT" Then
     sh.Range("A21").CurrentRegion.Offset(2, 0).ClearContents
      With Sheets("RENOUVELLEMENT")
      .Range("$A$3:$AS$1719").AutoFilter Field:=17, Operator:=xlFilterValues, Criteria2:=Array(0, "12/31/2022")
      .Range("$A$3:$AS$1719").AutoFilter Field:=13, Criteria1:=sh.Name
      On Error Resume Next
      .Range("A4:AS1719").SpecialCells(xlVisible).Copy sh.Range("A22")
      .ShowAllData
      End With
    End If
   Next sh
End Sub

[EDIT] :avec choix de l'année...

Cordialement,

Bonjour le fil, bonjour le forum,

Une autre proposition avec ton fichier modifié en pièce jointe. Il te faut commencer par filtrer manuellement la colonne Q puis cliquer sur le bouton bleu RECAP dans la première ligne. Code commenté...

3danval-ep-v01.zip (466.48 Ko)

Bonjour,

Merci pour vos réponses Je viens de tester et la solution de XORSANKUKAI a retenue toute mon attention.

il y a juste une chose qui ne va pas :

je mets une année dans le filtre en Q3, j'exécute la macro tout fonctionne mais la macro me fait sauter mon filtre?

est-ce possible de remédier à cela.

et encore un grand merci à tous

RE,

Merci pour le retour,

je mets une année dans le filtre en Q3, j'exécute la macro tout fonctionne mais la macro me fait sauter mon filtre?

Normal, si tu as pris le code que j'ai posté, le filtre 2022 est intégré à la macro, il s'applique donc par défaut et est retiré une fois le transfert effectué.

J'avais donc posté un fichier qui te demande l'année à filtrer...tu fais tout avec le bouton GO!

Sub renouvellement()
 Dim sh As Worksheet, dl%
 Dim resultat As String

 resultat = InputBox("ANNEE ?", "Filtre")

 Application.ScreenUpdating = False

 If resultat <> "" Then
  For Each sh In ThisWorkbook.Worksheets
   If sh.Name <> "RENOUVELLEMENT" Then
     sh.Range("A21").CurrentRegion.Offset(2, 0).ClearContents
      With Sheets("RENOUVELLEMENT")
       dl = .Range("A" & Rows.Count).End(xlUp).Row
      .Range("A3:AS" & dl).AutoFilter Field:=17, Operator:=xlFilterValues, Criteria2:=Array(0, "12/31/" & resultat)
      .Range("A3:AS" & dl).AutoFilter Field:=13, Criteria1:=sh.Name
      On Error Resume Next
      .Range("A4:AS" & dl).SpecialCells(xlVisible).Copy sh.Range("A22")
      .ShowAllData
      End With
    End If
   Next sh
  End If
End Sub

Je pense que la proposition de ThauThème répond parfaitement à ton besoin

Cordialement,

j'ai toujours le même problème le filtre en colonne "Q" n'est pas conservé.

il faudrait peut-être utiliser l'année rentrée au début pour remettre le filtre.

merci pour tout

Re,

Puisque tu préfères garder le filtre sur l'année:

Sub renouvellement()
 Dim sh As Worksheet, dl%
 Dim resultat As String

 resultat = InputBox("ANNEE ?", "Filtre")

 Application.ScreenUpdating = False

 If resultat <> "" Then
  For Each sh In ThisWorkbook.Worksheets
   If sh.Name <> "RENOUVELLEMENT" Then
     sh.Range("A21").CurrentRegion.Offset(2, 0).ClearContents
      With Sheets("RENOUVELLEMENT")
       dl = .Range("A" & Rows.Count).End(xlUp).Row
      .Range("A3:AS" & dl).AutoFilter Field:=17, Operator:=xlFilterValues, Criteria2:=Array(0, "12/31/" & resultat)
      .Range("A3:AS" & dl).AutoFilter Field:=13, Criteria1:=sh.Name
      On Error Resume Next
      .Range("A4:AS" & dl).SpecialCells(xlVisible).Copy sh.Range("A22")
      .Range("A3:AS" & dl).AutoFilter Field:=13 'supprime le filtre colonne M (nom de la feuille)
      End With
    End If
   Next sh
  End If
End Sub

Cordialement,

C'est tout bon merci pour ton aide tu m'enlève une grosse épine du pied.

bonne continuation

Rechercher des sujets similaires à "separation donnees"