Macro copie si condition respectée

Salut le Forum,

JE cherche à créer une macro, je pense que c'est plus simple et moins gourmand qu'une formule, qui me recopierais une ligne si un mot est présent dans une cellule.

La ligne va de A à AK exemple si le mot "test" est présent dans la cellule B alors on recopie toute la ligne, si pas présent ne rien faire. A recopier dans une autre feuille

Sachant que j'ai 30 à 40 feuille à faire sous ce principe avec a chaque fois un mot différent.

Merci pour votre aide

Salut Dakota,

bon, alors...

A recopier dans une autre feuille

Laquelle?

a chaque fois un mot différent

A chaque ligne, par feuille, toujours en [B] ?

Avec des explications plus claires et personne ne perdra son temps!

A+

Salut Curulis57,

Merci de a réponse, oui tu as raison un exemple est beaucoup plus parlant.

Je joins un fichier

Merci pour l'aide

A+

38macro.xlsm (10.64 Ko)

Salut Dakota,

voici ton fichier.

Un double-clic en [A1] déclenche la macro.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
If Not Intersect(Target, Range("A1")) Is Nothing Then
    Cancel = True
    iRow = Range("A" & Rows.Count).End(xlUp).Row
    For x = 1 To iRow
        With Worksheets(CStr(Cells(x, 2)))
            iRowT = .Range("A" & Rows.Count).End(xlUp).Row + 1
            If .Cells(1, 1) = "" Then iRowT = 1
            .Range("A" & iRowT).Resize(1, 26).Value = Range("A" & x & ":Z" & x).Value
        End With
    Next
End If
'
End Sub

A tester grandeur nature! Ici, j'ai recopié tes lignes 10.000 fois...

A+

Je regarde ça merci.

je pense que je dois l'adapter ?, désolé je ne suis pas très bon en VBA.

A+

Salut Dakota,

dans Excel, tu fais ALT+F11 -> Editeur VBA -> tu double-clic à gauche sur le nom de ta feuille contenant les données brutes -> tu y colles la macro complète telle que je te l'ai donnée -> puis tu double-clic sur [A1] de cette même feuille.

A+

Testé sur le fichier test, fonctionne, juste deux questions si on clique plusieurs fois, ça ajoute plusieurs fois les mêmes lignes ?

Car mon fichier s'enrichiras au fur et à mesure et donc lancer la macro plusieurs fois, ça risque de me rajouter des doublons.

Par contre je l'enregistre, et quand je ré ouvre mon fichier la macro n'est plus présente.

Je testerais demain sur mon fichier, et te tiens au courant.

Encore merci

A+

Salut,

difficile de croire que la macro enregistrée avec le fichier se soit envolée ou alors tu as un exemplaire rare d'Excel-Cambrioleur!

Effectivement, si tu ajoutes des données et que tu lances la macro, ça va te faire un joli paquet de doublons!

La solution : effacer ces données brutes (via la macro) après chaque traitement : UsedRange.ClearContents

Puisqu'elles sont dispatchées dans leur feuille respective, en as-tu encore besoin?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
If Not Intersect(Target, Range("A1")) Is Nothing Then
    Cancel = True
    iRow = Range("A" & Rows.Count).End(xlUp).Row
    For x = 1 To iRow
        With Worksheets(CStr(Cells(x, 2)))
            iRowT = .Range("A" & Rows.Count).End(xlUp).Row + 1
            If .Cells(1, 1) = "" Then iRowT = 1
            .Range("A" & iRowT).Resize(1, 26).Value = Range("A" & x & ":Z" & x).Value
        End With
    Next
    UsedRange.ClearContents
End If
'
End Sub

A+

Salut Curulis57,

Effectivement la macro est toujours la pas de cambriolage en vue !! c'est que je ne la retrouvai pas dans "afficher les macros", afin d'y assigner un bouton.

J'ai effectivement besoin que ma liste d'origine reste et ne sois pas effacée avec la macro.

Merci

A+

Salut Dakota,

voilà selon tes besoins :

  • un bouton ActiveX ;
  • on garde en mémoire en [AA1] le n° de ligne (+1) à laquelle le traitement s'est terminé : la fois suivante, le traitement commence à cette ligne.

Dans ton fichier de travail, en fonction de ce qui a déjà été fait, renseigne l'info en [AA1] : soit 1 si rien n'est fait soit le n° de la dernière ligne +1.

Private Sub cmdGO_Click()
'
Dim lgRow As Long, lgRowT As Long
Application.ScreenUpdating = False
'
lgRow = Range("A" & Rows.Count).End(xlUp).Row
If lgRow < CLng([AA1]) Then
    MsgBox "Les données actuelles ont déjà été traitées!", vbExclamation
Else
    For x = CLng([AA1]) To lgRow
        With Worksheets(CStr(Cells(x, 2)))
            lgRowT = .Range("A" & Rows.Count).End(xlUp).Row + 1
            If .Cells(1, 1) = "" Then lgRowT = 1
            .Range("A" & lgRowT).Resize(1, 26).Value = Range("A" & x & ":Z" & x).Value
        End With
    Next
    [AA1] = lgRow + 1
End If
'
Application.ScreenUpdating = True
'
End Sub

A+

Re,

Quand je lance la macro j'ai une erreur 1004,à la ligne 11.

Je dois être miro ce matin, je trouve pas le bouton.

Pour le renseignement AA1, par exemple j'ai effectué la macro une première fois jusqu'à la ligne 100, j'indique 100 ? c'est bien ça.

Est il possible qu'a chaque lancement de macro tout soit recommencé du début, peut être long en traitement ?

merci

A+

Salut Dakota,

pas d'erreur ici : quelle ligne exactement?

Tu ne dois rien écrire en [AA1] : dès la première utilisation, c'est la macro qui s'en charge!

Pas de bouton? Excel-cambrioleur, le retour!

Fige les volets en [A2] : ainsi le bouton restera toujours visible même quand tu trifouilleras au fond de ta feuille.

A+

Re,

J'ai mis mes lunettes double foyer, et je vois pas le bouton !! j'ai bien figé les volets en A2... Il se trouve ou le bouton normalement ?

Je t'envoi mon fichier pour que tu regarde.

Merci

A+


J'ai oublié le fichier.... décidément aujourd'hui... Lol

7macro.xlsm (15.79 Ko)

Re,

gag, je pensais avoir envoyé le fichier en même temps que la macro!

... passé une courte nuit aussi...

Ça va aller!

A+

17macro.xlsm (729.42 Ko)

Ça me rassure, je croyais que Alzheimer me rattrapait

Impeccable, ça fonctionne super.

2 petites choses, comment je crée le bouton sur mon fichier d'origine, je souhaiterais qu'il soit en A3? J'ai essayé de créer une forme et d'assigner la macro, mais elle n’apparaît pas dans la liste des macros.

J'ai oublié de préciser que le copier/coller sur tous les onglets, devrait commencer à la ligne 7, car j'ai déjà des infos sur les lignes 1 à 6.

Beau boulot, merci pour ta patience

A+

Re,

pas étonnant que tu ne la trouves pas : le code se trouve dans le module de la feuille contenant les données brutes!

pour installer un bouton ActiveX (je n'utilise que ceux-là) :

  • ALT-F11 -> environnement VBA ;
  • Insérer -> Contrôles ActiveX -> bouton de commande -> "dessiner" le bouton -> double-clic pour accéder à ses propriétés ;
  • lui donner un nom (le nom de la macro : ici, cmdGO), une couleur (ou pas), un texte (caption) ou pas ;
  • un bouton se place ou tu veux ;

Voici le code remanié pour afficher les lignes après la ligne 6.

If lgRowT < 7 Then lgRowT = 7

Private Sub cmdGO_Click()
'
Dim lgRow As Long, lgRowT As Long
'
Application.ScreenUpdating = False
'
lgRow = Range("A" & Rows.Count).End(xlUp).Row
If lgRow < CLng([AA1]) Then
    MsgBox "Les données actuelles ont déjà été traitées!", vbExclamation
Else
    For x = CLng([AA1]) To lgRow
        With Worksheets(CStr(Cells(x, 2)))
            lgRowT = .Range("A" & Rows.Count).End(xlUp).Row + 1
            If lgRowT < 7 Then lgRowT = 7
            .Range("A" & lgRowT).Resize(1, 26).Value = Range("A" & x & ":Z" & x).Value
        End With
    Next
    [AA1] = lgRow + 1
End If
'
Application.ScreenUpdating = True
'
End Sub

On voit ça?

A+

Dans mon excel 2007, j'ai insertion procedure, userform, module.... mais je trouve pas inserer controle activeX ?

Encore victime d'un vol ?


J'ai trouvé, je crée mon bouton et teste grandeur nature, je te tiens au courant.

merci

A+

Va pas être simple à expliquer...

Effectivement, fallait pas faire ALT-F11 mais rester sur la feuille en mode DEVELOPPEUR ... C'est une option à cocher dans les paramètres d'Excel.

(suis en voiture, qui plus est)

Tu as alors un bandeau DÉVELOPPEUR dans lequel tu trouveras le menu INSÉRER.

Pas possible de faire mieux maintenant. Quand je serai de retour...

A+

J'ai réussi à créer le bouton et le mettre en forme, j'ai repris les propriétés identiques.

Par contre quand je clique dessus j'ai une erreur 1004 à la ligne :

With Worksheets(CStr(Cells(x, 2))) (elle est souligné en jaune)

A+

Difficile de répondre sans voir la structure réelle de ton fichier de travail.

  • soit c'est la première utilisation et tes données commencent à une ligne autre que la première (fichier test) et la macro lit une donnée qui ne correspond pas au nom d'une feuille-cible ;
  • soit cette feuille-cible n'existe pas même si la donnée lue est correcte.

Sans fichier, impossible de tout prévoir...

T'as pas un tout ch'ti bout de fichier?

Bravo pour la création du bouton!

A+

Rechercher des sujets similaires à "macro copie condition respectee"