Automatiser la suppression d'un copier coller en fonction d'une valeur

Bonjour à toutes et à tous,

Ok le titre est un peu bizarre. Je m'explique.

J'utilise Sikulix pour récupérer de manière "automatique" des données sur un site web (je précise que tout cela est légal et autorisé par le site en question puisqu'il sert à ça ;) )

Bref.... Donc je récupère des données par le biais d'une extension sur chrome et je les colle dans excel. (le tout grâce à Sikuli qui bouge la souris pour moi ;) )
Le souci est qu'il y a environ 100.000 données (chaque "collage" est composé de 4 lignes et 9 colonnes que je colle à la suite l'un de l'autre)

Les données de la 2ème ligne de la 1ère colonne sont mon repère principal : si la valeur est négative, les données des 4 lignes et 9 colonnes ne m'intéressent pas.

Donc ma question :

Est il possible de créer une macro ou quelque chose "d'automatique" en cliquant sur un bouton afin que chaque "collage" soit testé sur la valeur de la 2ème ligne de la 1ère colonne ?

Si cette valeur est négative, annuler le collage et si positive, ne rien faire.

Je vous remercie d'avance pour votre aide, avis et idée.

Salut Wags,

ainsi, sans doute.
Tu colles le code dans le module VBA de la feuille concernée.

Pour tester, copie [A1:I4] et colle-le en [A12] en changeant la valeur de [A2].

Private Sub Worksheet_Change(ByVal Target As Range)
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
If Selection.Cells(2, 1) < 0 Then Selection.Delete
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub
3wags.xlsm (13.49 Ko)


A+

Bonjour Curulis57,

Un très grand merci, cela fonctionne parfaitement et cerise sur le gâteau, j'ai compris le code ;)

Petite question supplémentaire :

Est il possible de bouger la sélection de la cellule en fonction d'une cellule vide ?

J'ai regardé du côté de ESTVIDE mais pas trouvé si on pouvait bouger "la souris"

Mon processus sera le suivant.

Les données venant du site seront collées sur la feuil1, je fais un petit nettoyage par une macro (suppressions de certaines lignes) et je me retrouve avec un bloc de 4 lignes que je copie colle sur feuil2 où se trouve le code VBA.

Si c'est positif, j'ai bien des données, parfait mais quand c'est négatif, je me retrouve avec un bloc de vide.
Comme tout est "automatisé" avec sikuli, soit je trouve une astuce pour que sikuli détecte quand une cellule est vide et remonte la sélection de la cellule, soit il y a peut être une astuce en excel.

Sinon je vais me retrouve avec beaucoup de lignes vides dans mon fichier excel.

Merci d'avance pour votre aide précieuse.

Je vous souhaite une bonne journée.

Bonjour,

si tu déposais un fichier de travail et mettais un peu plus d'explications, on pourrait automatiser peut-être un peu plus.

Par exemple un double-clic sur la 1ère cellule du bloc regarde en-dessous si le copié-collé est à faire ou non (où exactement ?).
Dans ce cas plus rien à effacer.

Et si des règles existent pour détecter, parcourir les blocs et ne traiter que ceux qui t'intéressent, explique...
eric

Salut Wags,
Salut Eriiic,

ne connaissant pas Sikulix et sa manière de faire, il nous faudrait effectivement un fichier simulant tes manipulations de nettoyage et de collage, complètes et commentées, pour un traitement global efficace.


A+

Bonjour Eriic,

Merci pour ta contribution.

Effectivement, j'ai pas été très précis. Désolé.

Voici le fichier.

Les données arrivent grâce à sikuli dans la feuille Copier.

Dans le cas présent, A4 est positif, copie dans la feuille Résultat et les données apparaissent. Parfait.

Reste à positionner sur la première ligne vide donc ici A5.

Dans Excel, je n'ai aucune idée de comment faire mais je peux le faire avec sikuli sans souci.

MAIS .....

Si A4 de la feuille Copier est négatif, à ce moment là, quand je vais aller coller dans la feuille Résultat, il y aura 4 lignes vides.

Soit je fais le même processus que lorsque les données sont affichées et je descends le curseur de 4 lignes pour aller se positionner en A9 mais j'aurai un vide.
Vu qu'il y aura une centaine de millier de ligne, ça va être compliqué.

Merci pour vos réponses et votre participation.

PS : Je n'ai pas fouillé du côté de sikuli qui devrait arriver à reconnaître si une cellule est vide ou pas mais si c'est possible en Excel, je préfèrerais.

2wags-2.xlsm (15.18 Ko)

Les données de la 2ème ligne de la 1ère colonne sont mon repère principal : si la valeur est négative, les données des 4 lignes et 9 colonnes ne m'intéressent pas.

Dans ce cas pourquoi regarder A4 et non A2 ???
Est-ce la seule condition pour copier-coller ?

Salut Wags,
Salut Eriiic,

comme ceci ?
Sikulix copie sur la feuille 'Copier', la macro teste la valeur-repère et copie éventuellement la sélection sur la feuille 'Résultat' puis efface les données en 'Copier'.
Ici, forcément, il y a des données de test en 'Copier' : à toi à les effacer pour tester grandeur nature avec Sikulix.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
If Selection.Cells(2, 1) >= 0 Then
    With Worksheets("Résultat")
        iRow = IIf(.[A1] = "", 1, .Range("A" & Rows.Count).End(xlUp).Row + 1)
        .Range("A" & iRow).Resize(4, 9).Value = Selection.Value
    End With
End If
Selection.Delete
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub
2wags-2.xlsm (16.00 Ko)


A+

Merci Messieurs pour votre aide.

J'ajoute le fichier avec quelques explications.

Feuille "Venant du site" : les données brutes du site.

Feuille "Prêt à être copié" : les infos qui m'intéressent (j'aurai crée une macro pour effacer les lignes qui ne me sont pas utiles)

Ensuite prendre ces 4 lignes de la feuille "Prêt à être copié" et mettre dans la feuille "Résultat"

En fait cette opération va se répéter dans les 100.000 fois.

Les données des feuilles "Venant du site" et " Prêt à être copié" peuvent être effacées à chaque fois puisque les données conservées (lors ce que A4 est positif) seront dans la feuille "Résultat"

Le système est parfaitement fonctionnel excepté que lors de la prochaine opération, le "collage" ne va pas se faire au bon endroit dans la feuille "Résultat"

Il faut que la sélection de la cellule pour la prochaine opération soit en dessous du dernier "collage" avec des données.

Si j'ai un résultat négatif, donc pas de "collage", la cellule sélectionnée reste la dernière vide et si il y a un résultat positif, donc un "collage", la sélection de la cellule est juste en dessous de la dernière ligne avec des données.

On démarre avec A1, il y a "collage" donc il faut que le prochain "collage" se fasse en A5 et ainsi de suite

J'espère que c'est un peu plus clair. J'avoue que je suis dedans depuis quelques temps donc ça me paraît évident. Désolé ;)

Merci beaucoup pour votre temps et votre aide précieuse.

5wags-2-modif.xlsm (44.94 Ko)

Hors de chaque import Sikulix, tu prends les 2 premières lignes "Noise reduct" et "NONE" + la première ligne contenant "Net profit" si elle elle suivie d'un nombre ?
Ce n'est déjà plus la valeur de 2e ligne-1ère colonne, ça !

De plus, ici, je vois qu'elle est initialement négative et qu'elle est transformée en positive après "nettoyage"...
Donc... ?


A+

Effectivement, c'est la 4ème ligne parce que j'ai changé la méthode.

La valeur négative en positif après "nettoyage" était juste un test de ma part.
Une valeur négative reste négative même après "nettoyage)

Je prends bien les 4 lignes de chaque import comme sur la feuille "Prêt à être copié"

Reste juste à trouver une solution pour que la cellule vide soit bien sélectionnée pour le prochain "collage"

Je tente quelque chose sur sikuli mais pas très encourageant :(

Merci pour tes réponses rapides et ton aide.

Comprends pas trop cette phrase..

Reste juste à trouver une solution pour que la cellule vide soit bien sélectionnée pour le prochain "collage"

??

Re bonjour,

Dans le fichier wags-2_modif, admettons que le premier coller soit négatif donc rien ne s'affiche dans la feuille "Résultat"
Donc le prochain coller devra commencer sur A1. Admettosn que ce coller est positif, donc il s'affichera 4 lignes.
Ce qui induit que le prochain positif coller devra commencer sur A5.

Y a-t-il moyen de prévoir que si le coller affiche quelque chose (donc résultat positif) alors la cellule sélectionnée pour le prochain coller soit celle de la premier ligne vide en dessous du coller précédent ?

Merci beaucoup

J'ai trouvé ceci : cela fonctionne en créant un bouton sur la feuille.

Range("A65536").End(xlUp)(2, 1).Select

Mais je n'arrive pas à l'intégrer dans le code que tu m'as crée.

Merci

Salut Wags,
Salut Eriiic,

sans vraie réponse à mes questions, j'y vais au toupet.
La macro se trouve dans la feuille 'Venant du site', donc active dès le collage de Sikulix.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim rCells As Range, iRow%, iTRow%
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
On Error Resume Next
'
iRow = Columns(1).Find(what:="Net Profit", lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Row
If iRow > 0 Then
    If Cells(iRow + 1, 1) >= 0 Then
        Set rCells = Union(Range("A1:I2"), Range("A" & iRow & ":I" & iRow + 1))
        With Worksheets("Résultat")
            iTRow = IIf(.[A1] = "", 1, .Range("A" & Rows.Count).End(xlUp).Row + 1)
            rCells.Copy Destination:=.Range("A" & iTRow)
        End With
    End If
End If
Cells.Delete
'
On Error GoTo 0
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub

À tester...

2wags-2-modif.xlsm (19.28 Ko)


A+

Salut Curulis57,

Le toupet paie Ca fonctionne exactement comme je le veux.

Un très très grand merci pour ton temps et ton aide plus que précieuse.

Bonne journée.

Re bonjour,

J'ai transféré le fichier ci-dessous sur un excel 2013 (autre pc sous windows 7) et du coup, le copier coller se fait même si la valeur est négative.

Est ce que le code est pas compatible avec excel 2013 ?

Merci beaucoup

PS : je viens d'essayer sur un autre pc windows 10 excel 2019 et idem, ça copie quand même les résultats négatifs.
Et sur mon pc d'origine, ça ne fait pas d'erreur.

Merci encore ;)

PS 2 :

Feuille Original qui permet de recevoir le coller avec les données brutes. J'applique une macro pour ne garder que les 4 lignes

Feuille Nettoyé reçoit le copier coller de Orignal

Feuille Résultat devrait afficher que les Net Profit positif.

Bonjour à tous,

1656 c'est négatif ?
eric

Bonjour eriic,

On est d'accord sur ce point c'est plutôt positif ;)

Mais un test avec un négatif et il s'affichera.

J'arrive pas à comprendre que ce fichier avec ce code fonctionne sur un pc et pas sur les deux autres.

Merci

PS : Je viens de me rendre compte que sur l'ordinateur où cela fonctionne, l'affichage des valeurs de la ligne 4 sont aligné à gauche alors que sur les pc où cela ne fonctionne pas, ils sont aligné à droite.
J'ai donc mis les cellules en nombres mais ça change rien.

PS 2 : Si j'introduis le nombre au clavier, il se met bien à droite dans la cellule et à ce moment là, le collage positif fonctionne et le négatif ne s'affiche pas : donc tout est bon.
Le problème est présent que la cellule soit standard ou nombre.

Merci à vous

J'ai trouvé.

Dans les options d'excel, il fallait mettre le séparateur virgule avec un . et non une ,

Donc tout fonctionne parfaitement.

Merci à vous pour votre aide et votre temps.

Bon week end.

Rechercher des sujets similaires à "automatiser suppression copier coller fonction valeur"