XL 2010 [CLOT] Création d'une macro

fredd

XLDnaute Occasionnel
Bonjour, j'ai besoin d'aide pour la création d'une macro.
je vois à peu pres comment faire mais je sais pertinemment que je n'utiliserais pas les fonctions allégé de VBA.

j'utilise princimalement l'enregistrement de macro.

J'explique: fichier en piece jointe:

Dans l'historique de la feuille "Liste" j'ai:

'En B ( a partir de b16) les n° d'ot correspondant au N° d'immat de B5 retrouvé dans l'onglet "Ots 2010-2017", référence Colonne B, résultas colonne A
'exemple je filtre en B sur le N° 120562 de la colonne B et je retrouve pour cet exemple 9 N° en A

'En C:(Type d'OTs) en fonction du résultat de B, je récupère le résultat de la colonne V (Type d'ordre4) de l'onglet "Ots 2010-2017"

'En D: (Désignation) en fonction du résultat de B, je récupère le résultat de la colonne D (Désignation) de l'onglet "Ots 2010-2017"

'En E: (Dates) en fonction du résultat de B, je récupère le résultat de la colonne I (Date de saisie) de l'onglet "Ots 2010-2017"

'En F: (Cout)en fonction du résultat de B, je récupère le résultat de la colonne S (TotalCoûtsRéels) de l'onglet "Ots 2010-2017"

Comment je ferais cette macro:
  1. Je met en mémoire mon N° d'immat de "LISTE - B5"
  2. Je vais en page "Ots 2010-2017"
  3. je compte le nb de fois ou je retrouve mon immat en colonne B => pour un "loop"
  4. je retourne en "LISTE" case B16
  5. Je cherche le n° d'imat de la colonne B et appose la valeur d'une colonne à gauche (Colonne A "Ordre")
  6. IDEM pour C avec un décalage de 21 case à droite (Colonne V "Type d'ordre4")
  7. IDEM pour D avec un décalage de 3 case à droite (Colonne D "Désignation")
  8. IDEM pour E avec un décalage de 5 case à droite (Colonne I "Date de saisie")
  9. IDEM pour F avec un décalage de 18 case à droite (Colonne S "TotalCoûtsRéels")
  10. je passe en C16
  11. etc ... autant de fois que j'ai récupéré de n° 'immat: fin de loop

mais je n'arrive pas à mes fin...

J'ai fai un petit bouton pour lancer la macro "HISTO" ( qui est vide pour le coup :( ) ligne 14

j'ai créé 2 exemple d'affichage
  • Exemple 1
  • Exemple 2
merci pour votre aide.
 
Dernière édition:

fredd

XLDnaute Occasionnel
rebonjour, j'ai donc écrit une macro ( via l'enregistrement de macro)
je suis preneur d'un code un peu plus évolué :)

Code:
'Copie le Num d'immat
    numimmat = Sheets("LISTE").Range("B5").Value
 
  Sheets("Ots 2010-2017").Select
    ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=2, Criteria1:= _
        numimmat
' Efface le tableau
    Sheets("LISTE").Select
    Range("Tableau46").Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-6
     
' copie les OT
    Sheets("Ots 2010-2017").Select
    Range("Tableau1[[#Headers],[Ordre]]").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("LISTE").Select
    Range("B16").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 
' Supprime la premiere ligne et colles les formules
Sheets("LISTE").Select
    Range("C16").Select
    Selection.ListObject.ListRows(1).Delete
    ActiveCell.FormulaR1C1 = "=VLOOKUP([@[N° d''OTs]],Tableau1[#All],22,FALSE)"

    Range("D16").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP([@[N° d''OTs]],Tableau1[#All],4,FALSE)"
    Range("E16").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP([@[N° d''OTs]],Tableau1[#All],9,FALSE)"
    Range("F16").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP([@[N° d''OTs]],Tableau1[#All],19,FALSE)"
    Range("F17").Select
    ActiveWindow.SmallScroll Down:=-72
    Range("B5").Select

End Sub
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello
et bien. tu as déjà fait le gros du boulot selon la bonne méthode..
reste plus qu'à optimiser
1) donner un nom aux tables
TabListe dans ta feuille Liste
TabOTS dans ta feuille Ots..
2) et le code "optimisé" donne ceci
VB:
Sub Histo()
Application.ScreenUpdating = False
'
' Histo Macro
'

'Copie le Num d'immat
    numimmat = Sheets("LISTE").Range("B5").Value
   
    ' Efface le tableau
    Sheets("LISTE").Range("TabListe").ClearContents
     ActiveSheet.ListObjects("TabListe").Resize Range("$B$15:$F$16")
   
  Sheets("Ots 2010-2017").Select
  ActiveSheet.ListObjects("TabOTS").Range.AutoFilter
  ActiveSheet.ListObjects("TabOTS").Range.AutoFilter Field:=2, Criteria1:=numimmat
     
' copie les OT

    Range("TabOTS[Ordre]").Copy Destination:=Range("TabListe[N° d''OTs]")
    Sheets("LISTE").Select
   
' colle les formules
    formuleC = "=INDEX(TabOTS[Type d''ordre4];equiv(TabListe[[#Cette ligne];[N° d''OTs]];TabOTS[Ordre];0))"
    formuleD = "=INDEX(TabOTS[Désignation];equiv(TabListe[[#Cette ligne];[N° d''OTs]];TabOTS[Ordre];0))"
    formuleE = "=INDEX(TabOTS[Date de saisie];equiv(TabListe[[#Cette ligne];[N° d''OTs]];TabOTS[Ordre];0))"
    formuleF = "=INDEX(TabOTS[TotalGéné(Réel)];equiv(TabListe[[#Cette ligne];[N° d''OTs]];TabOTS[Ordre];0))"
   
    Range("C16").FormulaLocal = formuleC
    Range("D16").FormulaLocal = formuleD
    Range("E16").FormulaLocal = formuleE
    Range("F16").FormulaLocal = formuleF
   
Application.ScreenUpdating = True
End Sub
 

fredd

XLDnaute Occasionnel
Re bonjour, j'ai également un autre problème. Si le numéro n'existe pas, celui ci me colle l'intérgalité des données.
Je ne sais pas comment procéder à ce controle la en écriture.
l'idée est simple,
si la valeur de "numimmat" n'est pas dans le tableau "TabOTS", colonne "Equipement" alors end sub...
Comment est ce que ça se code?
Encore merci.
 

vgendron

XLDnaute Barbatruc
Salut


comment rentre cette parte là de commance en collage sans mise en forme?
Que veux tu dire par "Sans mise en forme" ?

pour le numéro inexistant... voir le code que j'ai ajouté
sinon, tu peux aussi mettre une liste de validation en B5 sans doublon.. cette liste étant alimentée par la colonne "Equipement" de la feuille OTS..
donc... aucun risque de saisir un numéor inexistant -->Voir code dans la feuille OTS
et Données validation de la cellule B5
 

Pièces jointes

  • Copie de recensements 2018_Version 2.xlsm
    3.7 MB · Affichages: 12

fredd

XLDnaute Occasionnel
Bonjour, pour la mise en forme, c'est ni plus ni moins q'un copier- Coller valeur
J'au résolue en supprimant la mise en forme de la source mais à la mise à jour des données ça pourrais poser probleme. ( pas tres grave quand meme :D)

Du coup j'ai déplacé sur une autre feuille la liste pour les immats et ça me semble correct.
merci beaucoup, je vais clore le sujet.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87