Macro avec selection
Bonjour,
Etant débutant en programmation VBA, je sollicite votre aide sur l’une de mes macros.
Le travail consiste à mettre en place une check-list d’impact sur d’autres documents en fonction d’un type de document « A » ou « B » ou « C » ou « D », etc...
Onglet 1 : la base de données « évolutive »
Celle-ci contient la liste et d’autres informations
Onglet 2 : la matrice à double entrée qui me permet de voir si :
« A » à un impact sur « B », « C », « D » dans le cas d’une modification de « A »
« B » à un impact sur « A », « C », « D » dans le cas d’une modification de « B »
« C » à un impact sur « A », « B », « D » dans le cas d’une modification de « C »
« D » à un impact sur « A », « B », « C » dans le cas d’une modification de « D »
Si la réponse est oui =1, si non =0
« A », « B », « C », « D » sont définis dans l’onglet 1 avec un ordre précis et rapatrié dans la matrice par formule.
Il y a de la place de disponible pour X nouveaux documents.
Onglet 3 : Les résultats
Cela regroupe l’ensemble des résultats possibles en fonction du travail effectué dans la matrice (onglet 2). 100% rapatrié par des formules de l’onglet 1 et 2.
Onglet 4 : La check-list (document de travail au quotidien)
Trame prédéfini et cellule de sélection du type de document « A » ou « B » ou « C » ou « D ».
Fonction de la macro :
Quand « A » est sélectionné dans la cellule « A4 » de l’onglet 4, alors copié les cellules « A3 :B59 » de l’onglet 3 et les coller via un collage spécial « A7 » de l’onglet 4 puis faire un filtre « non vide ».
Sinon
Quand « B » est sélectionné dans la cellule « A4 » de l’onglet 4, alors copié les cellules « C3
Et ainsi de suite.
Cela fonctionne très bien, mais il y a un « Mais »
Mon problème est suite à la mise à jour de l’onglet 1 (inversement de l’ordre des documents « D », « A », « C », «B » ou intégration d’un nouveau document « E » par exemple).
L’onglet 2 et l’onglet 3 vont ce mettre a jour (c’est ce que je souhaite), via des formules de recherche.
Comme il y a changement de position des types de document dans l’onglet 3 et que la macro n’est pas remise à jour au niveau des cellules copiées. Cela m’entraine une check-list fausse.
La macro copie et colle des cellules bien précise de l’onglet 3 et je souhaiterai que celle-ci copie et colle des cellules en fonction de la sélection « A4» de l’onglet 4.
Ci-dessous la macro que j'ai faite grâce à vos cours et exemples:
Sub Test_copie_colle()
'Suppression scintillement
Application.ScreenUpdating = False
'Macro test copie colle pour "A"
Sheets("Check-list").Select
If [Doc] = "A" Then 'Le nom du "type" doit etre identique à celui contenu dans l'onglet "Donnée". Attention au minuscule et majuscule.
Sheets("Masques").Select
Range("A3:B59").Select 'A modifier les lettres des colonnes en fonction leur emplacement dans l'onglet "Masque".
Selection.Copy
Sheets("Check-list").Select
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Macro test copie colle pour "B"
ElseIf [Doc] = "B" Then
Sheets("Masques").Select
Range("C3:D59").Select
Selection.Copy
Sheets("Check-list").Select
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Macro test copie colle pour "C"
ElseIf [Doc] = "C" Then
Sheets("Masques").Select
Range("E3:F59").Select
Selection.Copy
Sheets("Check-list").Select
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Macro test copie colle pour "D"
ElseIf [Doc] = "D" Then
Sheets("Masques").Select
Range("G3:H59").Select
Selection.Copy
Sheets("Check-list").Select
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Macro test copie colle pour "E"
ElseIf [Doc] = "E" Then
Sheets("Masques").Select
Range("I3:J59").Select
Selection.Copy
Sheets("Check-list").Select
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Macro test copie colle pour "X1"
ElseIf [Doc] = "X1" Then
Sheets("Masques").Select
Range("K3:L59").Select
Selection.Copy
Sheets("Check-list").Select
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Macro test copie colle pour "X2"
ElseIf [Doc] = "X2" Then
Sheets("Masques").Select
Range("M3:N59").Select
Selection.Copy
Sheets("Check-list").Select
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Macro test copie colle pour ""
ElseIf [Doc] = "" Then
Sheets("Masques").Select
Range("C3:D59").Select
Selection.Copy
Sheets("Check-list").Select
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Else
End If
Range("A6:B6").Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveSheet.Range("$A$6:$B$63").AutoFilter Field:=1, Criteria1:="<>"
'Reprise scintillement
Application.ScreenUpdating = True
End Sub
Merci de m'avoir lu jusqu'au bout. Vous trouverez ci-joint un fichier test avec ma macro.
Si vous avez une solution, je suis preneur
Bonne journée.
Bonjour à tous,
Merci au 36 lecteurs de mon post.
Cependant, je n'ai pas eu de message en retour et je me pose des questions
Est ce que ma demande d'aide est clair par rapport à mon problème ?
Est ce que le post est trop long a lire ?
Est ce que c'est trop compliqué à mettre en œuvre ?
Est ce que c'est impossible a réaliser ?
Merci d'avance pour toute l'aide que vous pourriez m'apporter.
Cdt
Fredo38