XL 2013 Créer macro en automatique

isataz

XLDnaute Nouveau
Bonjour,

je cherche à générer des macros de façon automatique.

voici à quoi ressemble ma macro :

Sub IP_xxxxx ()

Sheets("xxxxx").Select
Cells.Find(What:="IP_xxxxx", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets("CLIENT").Select
Range("A65536").Select
Selection.End(xlUp).Select
ActiveCell.Offset(2, 0).Select
ActiveSheet.Paste
Sheets("xxxxx").Select
Application.CutCopyMode = False
End Sub


Je vais devoir copier-coller 197 fois cette macro et à chaque fois, la seule chose qui change c'est "IP_xxxxx".
J'ai la liste de tout les "IP_xxx" à faire.

Existe-t-il un moyen de ne pas faire 197 copier/coller? déjà que je vais devoir faire 197 boutons...

Merci par avance pour votre aide !

Isabelle
 

isataz

XLDnaute Nouveau
Hello,
j'ai terminé de traiter toutes les données mais ça ne tourne pas comme il faut.
A l'ouverture du fichier, tout fonctionne mais au bout d'un moment ça se bloque (sans message d'erreur) et les copies ne se font plus.
De même le bouton de réinitialisation ne fonctionne que sur une colonne. Et je me demande si le clic sur ce bouton ne bloque pas le reste. J'ai du faire une mauvaise manip mais je ne vois pas quoi.
Est-ce que tu vois quelque chose de faux là ? Sachant que le reset de la colonne J fonctionne mais pas la P.

Code:
Sub Réinitialiser()
Application.EnableEvents = False
With ActiveSheet
    Fin = .Range("P" & .Rows.Count).End(xlUp).Row
    For Each ele In .Range("P7:P" & Fin)
        If ele = "Déjà Copié" Then Range("P" & ele.Row) = "Copier"
    Next ele
End With

With ActiveSheet
    Fin = .Range("J" & .Rows.Count).End(xlUp).Row
    For Each ele In .Range("J10:J" & Fin)
    If ele > "0" Then Range("J" & ele.Row) = "0"
    Next ele
End With

End Sub
 

isataz

XLDnaute Nouveau
Re hello,

c'est bon j'ai trouvé mon erreur, il y avait une faute sur "Déjà Copié" et ça bloquait tout car on ne réactivait pas les événements!

En tout cas, merci encore une fois, j'ai un fichier qui tourne !

VB:
ub Réinitialiser()
Application.EnableEvents = False
With ActiveSheet
    Fin = .Range("P" & .Rows.Count).End(xlUp).Row
    For Each ele In .Range("P7:P" & Fin)
        If ele = "Déjà Copiée" Then Range("P" & ele.Row) = "Copier"
    Next ele
End With

With ActiveSheet
    Fin = .Range("J" & .Rows.Count).End(xlUp).Row
    For Each ele In .Range("J10:J" & Fin)
    If ele > "0" Then Range("J" & ele.Row) = "0"
    Next ele
End With

Application.EnableEvents = True

End Sub
 

isataz

XLDnaute Nouveau
Hello,
basé sur ton code qui n'a quasi pas changé depuis (quand c'est parfait pourquoi changer?!), je voudrais créer un bouton qui appellera la Sub IP et qui l'exécutera à chaque fois qu'il y aura "Copier" dans la colonne P.
En fait je veux donner la possibilité de copier tout le contenu de l'onglet depuis A8 jusqu'à M & fin

VB:
Sub IP(ligne As Integer)
Application.EnableEvents = False 'on désactive les évènements
Application.ScreenUpdating = False 'on désactive le rafraichissement des feuilles
With ActiveSheet
    Set BlocSuivant = .Range("A" & ligne & ":B65536").Find(.Name, LookAt:=xlPart) 'recherche de la prochaine ligne de colonne B qui contient le nom de la feuille
    If Not BlocSuivant Is Nothing Then 'si il y a quelque chose
        If BlocSuivant.Row = ligne Then 'si on retrouve le bloc en cours (==on est sur le dernier bloc
            Fin = .UsedRange.Rows.Count + 5 'on met la dernière ligne de la feuille
        Else
            Fin = BlocSuivant.Row - 2 'sinon on récupère la ligne -2 pour remonter dans le bloc en cours
        End If
           
        .Range("A" & ligne & ":M" & Fin).Copy Destination:=Sheets("CLIENT").Range("A" & .Rows.Count).End(xlUp).Offset(2, 0) 'on copie colle
        Application.CutCopyMode = False
        .Range("P" & ligne) = "Déjà Copiée"
     End If
End With
Application.EnableEvents = True 'on réactive
Application.ScreenUpdating = True
End Sub


J'ai essayé de bidouiller un bout de code mais je me retrouve avec une erreur de compilation argument non facultatif.

Code:
Sub Copy_onglet()

Application.EnableEvents = False
With ActiveSheet
    'Fin = .Range("P" & .Rows.Count).End(xlUp).Row
    For Each ele In .Range("P7:P")
        If ele = "Copier" Then
        Call IP
    
    Next ele
End With

Application.EnableEvents = True

End Sub


je ne veux pas définir où s'arrêtent les infos à copier pour pouvoir rajouter des lignes sans devoir adapter le range de données.
sinon c'est facile de dire A8:M927 mais comme les infos bougent beaucoup, je vais passer mon temps à changer la plage.

Est-ce que tu pourrais m'aider s'il te plaît ?

merci beaucoup :)
 

Discussions similaires

Statistiques des forums

Discussions
312 074
Messages
2 085 059
Membres
102 768
dernier inscrit
clem135164