IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Traitement de données en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2021
    Messages : 8
    Par défaut Traitement de données en VBA
    Bonjour le forum,

    J'essaye en vain de réaliser un traitement de données sur une base, dans cette dernière j'ai la même donnée en positif et en négatif dans deux lignes différentes (-500 en G30 et 500 en G78 par exemple) mais dans la même colonne (colonne G), (sur 1000 lignes y'en a 300/350 dans ce cas). La vocation étant de sélectionner ces deux lignes et de les couper coller et les mettre dans un autre onglet si elles présentent le même montant de signe différent en G.

    Je n'arrive pas à trouver un moyen et je serais vraiment reconnaissant de votre aide.

    Bien à vous



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Sub Traitementdata()
     
    Dim i As Integer
     
    Dim j As Integer
     
    Dim Col As String
     
    Dim EX As Variant
     
    Dim VE As Variant
     
    Dim nb_lignes As Integer
     
    Col = "G"
     
    nb_lignes = 2000
     
        For i = 2 To nb_lignes
     
            For j = 2 To nb_lignes
     
                EX = Cells(i, Col)
     
                VE = -1 * (Cells(j, Col))
     
                    If EX = VE Then
     
                      EX.Row.Cut
     
                      Sheets("Test").Paste
     
                      VE.Row.Cut
     
                      Sheets("Test").Paste
     
                    End If
     
             Next j
     
         Next i
     
    End Sub

  2. #2
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2019
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2019
    Messages : 53
    Par défaut
    Bonsoir à tous
    Bonsoir valjean0

    Je ne sais pas si tu as trouvé, mais je te propose ceci au cas où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub traitement_01()
     
    Dim c As Range
    Dim firstAddress As String
    Dim firstlign As Integer
    Dim mavar As String
    Dim Rg_Ligne As Range, Rg_Total As Range
    Dim tablo(2000)
    Dim num As Boolean
     
    'Dim test
     
    For i = 2 To 2000
    'test = num
        Set Rg_Total = ActiveSheet.Range("A2:G2")
     
        With Worksheets("Feuil1").Range("G:G")
            mavar = Range("G" & i)
            Set c = .Find(mavar, LookIn:=xlValues, Lookat:=xlPart) '
            If Not c Is Nothing Then
                firstAddress = c.Address
                firstlign = c.Row
                Do
                    If mavar = WorksheetFunction.ImAbs(c.Value) Then
                        If c.Row <> firstlign Then
                            tablo(c.Row) = c.Row
                            num = True
                        End If
                    End If
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
            If num = True Then tablo(firstlign) = firstlign    ' : Range("G" & firstlign).Clear
        End With
     
        num = False
    Next i
     
    For x = 2 To 2000
        If tablo(x) <> "" Then
            Set Rg_Ligne = ActiveSheet.Range("A" & tablo(x) & ":G" & tablo(x))
            Set Rg_Total = Application.Union(Rg_Total, Rg_Ligne)
        End If
    Next x
     
    Rg_Total.Copy Sheets("Feuil2").Range("a1")
     
    Rg_Total.EntireRow.Delete
     
    End Sub
    Bien entendu, il faut l'adapter.

    Tu nous dis

    Eric

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2021
    Messages : 8
    Par défaut
    Bonjour Eric,

    Merci de ton aide, j'ai essayé ta version de la macro et ça marche plus ou moins.

    Cela rapatrie des valeurs dont les doublons ne sont pas présents en négatif dans la colonne G.

    Merci bien;

    Valjean,

  4. #4
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2019
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2019
    Messages : 53
    Par défaut
    Re

    Je n'ai peut-être pas compris exactement la demande !

    Faut-il que les deux nombres soient de signe contraire obligatoirement ? Sont-ils nommés plusieurs fois dans le colonne, c'est-à-dire 1 ou plusieurs fois 500 et 1 fois ou + -500 ?

    Pourrais-tu mettre juste la colonne "G" en fichier joint pour que l'on puisse tester ?

    A+
    Eric

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Pour ma part, je gèrerais 2 tables de données (tableaux structurés)

    Processus

    1 - Balayer les cellules du corps de cellules d'une colonne en partant de la dernière
    2 - Si la condition est remplie pour supprimer l'enregistrement alors
    Alimenter une variable tableau
    Supprimer l'enregistrement (ListRows)
    3 - En fin de balayage, reverser la variable tableau sur le tableau structuré en destination

    C'est ce processus que j'utilise pour mes applicatifs affectés d'un back-up d'archives, par exemple

    Revenir si cette piste est envisageable pour le cas présenté.

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2021
    Messages : 8
    Par défaut
    Bonjour Eric,

    Les données sont nommées une seule fois en négatif et une fois ou plusieurs fois en positif (une seule fois à prendre uniquement).

    Ci-joint la colonne G.

    Merci de ton aide.
    Fichiers attachés Fichiers attachés

  7. #7
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2019
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2019
    Messages : 53
    Par défaut
    Re

    Sur le fichier communiqué, il y a certains nombres en négatif qui sont répétés avec les mêmes nombres en positif également cités plusieurs fois. Que doit-on faire ? Y a t il un critère ? on prend le premier ? le deuxième ? ......

    Merci de nous éclairer.

    A+
    Eric

Discussions similaires

  1. Traitement Données avec VBa Excel
    Par gabi300 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/02/2019, 08h31
  2. Traitement de données VBA / Maximum
    Par Hector1991 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/06/2018, 01h50
  3. Traitement d'erreur dans VBA
    Par charleshbo dans le forum VBA Access
    Réponses: 9
    Dernier message: 10/02/2006, 14h03
  4. traitement des données avant envoie dans MySQL
    Par italiasky dans le forum SQL Procédural
    Réponses: 13
    Dernier message: 07/02/2006, 22h50
  5. Programmation pour traitement de données
    Par benbois dans le forum Langages de programmation
    Réponses: 16
    Dernier message: 19/10/2005, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo