Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro pour creer feuille en fonction du contenu en Colonne A

  • Initiateur de la discussion Initiateur de la discussion fredh
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fredh

XLDnaute Occasionnel
Bonjour
J'ai un fichier xls qui en colonne A contient des numero de serie.
Ce fichier contient les valeur de pieces produites.
On peut donc retrouver plusieurs fois le meme numero de serie.
J'aimerai regrouper les meme numero de serie dans chaque fois une feuille qui a le nom du num de serie.
Dans mon fichier d'origine j'ai formatter les colonnes, il faudrait donc copier la 1er feuille la nommer en fonction du numero de serie et effacer les numero de serie (la ligne complete) non necessaire a cette nouvelle feuille. et ainsi de suite.
Pour faciliter les chose dans la feuille d'origine il faudrait "scinder" le numero de serie en 3 (utiliser le "-" comme separateur"). en effet j'ai des numeru de la forme codebarre-numserie-nid.
Il faudrait donc creer 3 colonne : la 1er "codebarre", la 2em "numserie" et la 3em "nid".

Mes connaissance en vba sont trop limiter pour realiser cela, je fait donc appel aux bonnes ames de ce forum.

Merci d'avance pour les coup de pouce ou remarques pouvant m'aider
 

Pièces jointes

Dernière édition:
Re : Macro pour creer feuille en fonction du contenu en Colonne A

Bonjour


Pour "splitter" tes numéros de serie

Tu peux utiliser Données/Convertir avec - comme séparateur

Tu peux le faire en lançant l'enregistreur de macro

ainsi tu auras le code VBA correspondant (voir ci-desssous)
Code:
Sub Macro2() [COLOR=SeaGreen]'macro issue de l'enregistreur de macro[/COLOR]
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="-", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1))
End Sub
Code:
Sub Macro3() [COLOR=SeaGreen]'la même macro réduite (en n' utilisant pas Select)[/COLOR]
Application.ScreenUpdating = False[COLOR=SeaGreen]' pour masquer le rafraichissement de l'écran[/COLOR]
Range([A1], [A1].End(xlDown)).TextToColumns Range("A1"), _
xlDelimited, xlDoubleQuote, False, False, False, False, _
False, True, "-", Array(Array(1, 1), Array(2, 1), Array(3, 1))
End Sub
 
Dernière édition:
Re : Macro pour creer feuille en fonction du contenu en Colonne A

Bonjour Pierrejean

Comme toujours ton code VBA est d'une limpidité (oserais-je dire d'une beauté) qui me laisse béat d'admiration. 😉
 
Re : Macro pour creer feuille en fonction du contenu en Colonne A

Bonjour a tous.

j'etait un moment deconnecter, je m'excuse donc du retard.

Merci de vos participations je vais y jeter un oeil tres curieux et je vous tiens au courant.
 
Re : Macro pour creer feuille en fonction du contenu en Colonne A

rebonjour

Pierrejean tu as vraiment assurer Un grand merci et un grand Bravo.
Je me suis permis de rajouter ce qui est en rouge dans ton code car le nom de la feuille de depart peut etre variable. De plus je l'efface a la fin de la procedure.
Il faudrait "copier" toutes les colonnes et pas seulement jusqu'a H (voir le code)
Code:
Sub Abfrage()
Dim n As Integer, [COLOR=red]m As Integer, ligne As Integer[/COLOR]
Dim t As Variant
[COLOR=red]Dim Org_Sheet As String[/COLOR]
[COLOR=red]Org_Sheet = ActiveSheet.Name[/COLOR]
Application.ScreenUpdating = False
Dim numserie As Collection
Set numserie = New Collection
ligne = 2
Worksheets.Add.Name = "temp"
With Sheets([COLOR=red]Org_Sheet[/COLOR])
For n = 2 To .Range("A65536").End(xlUp).Row
t = Split(.Range("A" & n), "-")
Range("A" & ligne) = t(0)
Range("B" & ligne) = t(1)
Range("C" & ligne) = t(2)
ligne = ligne + 1
Next n
.Range("B2:[COLOR=magenta][B]H[/B][/COLOR]" & .Range("A65536").End(xlUp).Row).Copy Destination:=Range("D2")
[COLOR=magenta]'ici il faudrait que les colonnes soit toutes "copier" et pas seulement jusqu'a H car j'ai des fichier avec des colonne I et J[/COLOR]
End With
With Sheets("temp")
 For n = 2 To .Range("B65536").End(xlUp).Row
 On Error Resume Next
    numserie.Add .Range("B" & n), CStr(.Range("B" & n))
 On Error GoTo 0
 Next n
 For n = 1 To numserie.Count
  Worksheets.Add.Name = numserie(n)
  ligne = 2
  Sheets([COLOR=red]Org_Sheet[/COLOR]).Range("B1:[COLOR=#ff00ff][B]H[/B][/COLOR][COLOR=black]1[/COLOR]").Copy Destination:=Range("D1")
[COLOR=#ff00ff]'ici il faudrait que les colonnes soit toutes "copier" et pas seulement jusqu'a H car j'ai des fichier avec des colonne I et J[/COLOR]
  Range("A1") = "Codebarre"
  Range("B1") = "Seriennumber"
  Range("C1") = "Nest"
  [COLOR=red]Range("A1:C1").Select
    With Selection.Interior
        .ColorIndex = 15
        .Pattern = xlSolid
    End With
Range("A2").Select
ActiveWindow.FreezePanes = True
[/COLOR][COLOR=#ff00ff]'ici jái rajouter la couleur pour l'entete et je fixe la ligne 1[/COLOR]
 
  With Sheets("temp")
  For m = 2 To .Range("B65536").End(xlUp).Row
     If .Range("B" & m) = numserie(n) Then
       .Range("A" & m & ":J" & m).Copy Destination:=Cells(ligne, 1)
       ligne = ligne + 1
     End If
  Next m
  End With
 Range("A1:[COLOR=magenta]J[/COLOR]" & Range("A65536").End(xlUp).Row).AutoFilter
[COLOR=#ff00ff]'ici il faudrait que les colonnes soit toutes "copier" et pas seulement jusqu'a J car j'ai des fichier avec des colonne K et L[/COLOR]
 Next n
End With
Application.DisplayAlerts = False
Sheets("temp").Delete
[COLOR=red]Sheets(Org_Sheet).Delete[/COLOR]
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Si je peut me permettre d'etendre ma demande d'aide il y aurait encore besoin de tes code magique :
* Je cherche encore a activer la largeur/hauteur automatique des colonnes et des lignes car la nouvelle colonne F est trop etroite.

* Il faudrait trier les nouvelles feuilles par la colonne F (tri sur la date , la plus vieille en premier.) (seulement sur la nouvelle feuille pas sur la feuille de base qui elle est trier par Seriennummer Colonne A).

* Ensuite il se peut que dans les nouvelles feuille je retrouve une piece mais avec plusieurs date. En faite un codebarre correspond a une piece, une piece peut avoir plusieur criteres et une pieces peut passer plusieurs fois a des dates differentes. Donc je cherche a "marquer" les passage des pieces par une couleur de fond different. Attention un passage dure 1 a 2 secondes donc les dates quis ont une difference de 1s ou 2s represente le meme passage.

* Il faudrait dans la colone "ergebniss" rechercher les valeur = 0 et mettre la couleur de fond en rouge car 0 correspond a une valeur defectueuse.

Ci joint un exemple d'une pieces passer plusieur fois avec des valeur a 0
 

Pièces jointes

Dernière édition:
Re : Macro pour creer feuille en fonction du contenu en Colonne A

bonjour fredh

vois si cela te convient

j'ai travaillé sur le fichier d'origine et te laisse adapter eventuellement

edit:

pas vu ton edit de 13h 38

et plus le temps pour aujourd'hui

A+
 

Pièces jointes

Re : Macro pour creer feuille en fonction du contenu en Colonne A

Bonjour PierreJean

merci de continuer a m'aider et bravo pour ta rapidité et justesse de code.
C'est impresiionnant tes codes, j´apprend beaucoup avec....
J'y ai apporter quelque modif pour qu'il colle avec mon format de fichier officiel.

Toutefois suite a mes multiple edit :
* Il reste un souci avec la taille automatique des lignes et colonnes.
* une feuille sur deux il y a des colonnes qui sont masquer, je pense que si la taille automatique des lignes et colonnes est regler je ne retrouve plus ce phenomene.
* Il faudrait reconnaitre la valeur 0 dans la colonne "Ergebnis" et y mettre un fond rouge.



* J´ai ajuster la couleur de depart a blanc puis incrementer de +4 pour la prochaine pour tomber sur du jaune "clair", le probleme c'est que la prochaine (jaune +4) c'est du vert foncer donc pas tres lisible. Je peut avoir un maximum 5 passages (donc j'aimerai que le 1er passage soit "blanc" (ok ca marche) le 2em soit jaune pastel (OK ca marche) le 3em soit bleu clair, le 4em soit vert clair et le dernier soit violet claire. Enfin si c'est possible sans te prendre trop la tete...

*

ci joint le fichier "officiel" modifier qui peut te servir de base pour si tu le desir continuer a m'aider

Merci encore et @+
 

Pièces jointes

Dernière édition:
Re : Macro pour creer feuille en fonction du contenu en Colonne A

Re bonjour PierreJean

Merci du coup de main
La gestion des couleurs est impeccable, je peut meme changer les codes couleurs ou en rajouter hiihihi.

L'erreur modifier est ce que c'est pour la gestion des hauteur/largeur des celulles ? parce que ca marche mieux qu'avant mais la (nouvelle) colonne E, elle ne veut pas prendre sa taille maximale. Pourtant ca a l´air tres correct.
Code:
 x = Sheets(nn).Range("IV1").End(xlToLeft).Column
 For z = 1 To x
   For y = 1 To Sheets(nn).Cells(65536, z).End(xlUp).Row
     If lmax < Len(Sheets(nn).Cells(y, z).Value) Then lmax = Len(Sheets(nn).Cells(y, z).Value)
   Next y
   Sheets(nn).Columns(z).ColumnWidth = lmax
   lmax = 0
 Next z

Dis moi n'y a t il pas une fonction qui "interdit a excell de "ramener le texte a la ligne"
du genre : .WrapText = False ?

Il ne manque que la detection de la valeur 0 dans la colonne J (Ergebniss) puis de lui mettre un fond rouge (code 3) ainsi que la colonne E et H. Exemple J25=0 alors fond rouge pour J25, E25 et H25


un dernier point (promis) : les nouvelles colonnes n'ont pas de ligne aux bord je vais essayer d'integrer ca moi meme en me basant sur ton travail
 

Pièces jointes

Dernière édition:
Re : Macro pour creer feuille en fonction du contenu en Colonne A

bonsoir

le probleme de la largeur de colonne est du aux majuscules qui prennent plus de largeur que les minuscules (dans ce cas Audi serait meilleur que BMW)
pour pallier ceci, je teste la presence de majuscules et si oui j'augmente de 20% (ça marche sur l'exemple mais ça n'a rien de rigoureux)
j'essaie de me documenter (j'avais testé 'Ajuster' du format cellule mais ça joue sur la police et ce n'est pas vraiment joli)

quant a Ergebniss s'agit-il d'agir la feuille d'origine ou dois-je suivre la piste des colonnes J E H ?
 

Pièces jointes

Dernière édition:
Re : Macro pour creer feuille en fonction du contenu en Colonne A

Bonsoir PiereJean

encore une fois tu a tres bien compris et resolue le probleme.
Merci mille fois pour ta patience et ta competence.
J'ai l'impression que excell et toi etes de bon copain....

Il me reste a trouver comment on fait pour le quadrillage mais je chercherai demain sur la base de ton travail. Mais ca je ferais demain car ce soir j'en ai assez.

Merci encore et @+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…