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 :

Comparer un tableau [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Par défaut Comparer un tableau
    Bonjour à tous,

    Je débute tout juste sur Visual Basic, je m'en sers pour faire des macros pour Excel. J'aurai besoin d'un peu d'aide, je vous explique mon problème :

    Je souhaite faire une macro qui copie des cases d'une feuille de saisie vers une feuille de données à la première ligne vide. Mais je souhaite intégrer des contrôles dont un qui vérifie que les informations que l'on va entrer dans la feuille de données n'existe pas déjà (date et valeurs), en l’occurrence ici c'est A et B que je souhaite comparer. Pour ce faire, j'utilise une boucle for avec le test logique suivant :

    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
     
    Dim A("date", "limonsrougesval", "limonsrougester", "sablesargileuxval", "sablesargileuxter", "argilesbleuesval", "argilesbleuester", "002-Découverture", "gresbleusval", "gresbleuster", "sterilesgisementval", "sterilesgisementter", "terrilprovisoireval", "terrilprovisoireter")
    Dim B(Sheets("002").Range("A26:M26"))
    Dim i As Integer
    i = 0
        For Counter = 26 To 10000 ' Cette boucle cherche la première ligne vide dans la première
            i = i + 1            ' colonne.
                If premièrecasedutableau = "" And A <> B And  date <> "" Then
                   CopieDonnees W,X,Y,Z
                   Exit For
                ElseIf A = B Then
                                                            ' Si les deux tableaux sont identiques
                        Dim Reponse
                        Response = MsgBox("Ces valeurs existent déjà. Souhaitez-vous écraser les donnés?", vbYesNo + vbCritical + vbDefaultButton2, "Attention")
     
                            If Response = vbYes Then    ' L'utilisateur a choisi Oui.
     
                                CopieDonnees W,X,Y,Z
     
                                Exit For
     
                            Else    ' L'utilisateur a choisi Non.
                                Exit For        ' Quite la boucle
                            End If
                ElseIf date = "" Then
                    Dim Reponse
                    Response = MsgBox("Il manque la date !", vbInformation + vbOK + vbDefaultButton1, "Attention")
                Else
                End If
        Next Counter
     
    End Sub
    La question est la suivante :
    je souhaite comparer A et B qui serait des tableau comportant une date ainsi que des valeurs. Comment puis-je faire pour comparer ces deux tableaux ?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Par défaut
    Bonjour

    J'ai fait autrement pour finir. J'ai utilisé la procédure Test() suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Test()
    Dim j As Boolean
        If A = B _
        And C = D _
        And E = F Then
            j = True
        Else
            j = False
        End If
        j
    End Sub
    J'utilise ensuite ma fonction Test() dans ma procédure "maître".

    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
     
    Private Sub CommandButton2_Click()
     
    Dim i As Integer
    Dim Counter As Integer
    i = 0
        For Counter = 26 To 10000 ' Cette boucle cherche la première ligne vide dans la première
            i = i + 1            ' colonne.
                If premièrecasedutableau = "" And Test() = False And  date <> "" Then
                   CopieDonnees W,X,Y,Z
                   Exit For
                ElseIf Test() = True Then
                                                            ' Si les deux tableaux sont identiques
                        Dim Reponse
                        Response = MsgBox("Ces valeurs existent déjà. Souhaitez-vous écraser les donnés?", vbYesNo + vbCritical + vbDefaultButton2, "Attention")
     
                            If Response = vbYes Then    ' L'utilisateur a choisi Oui.
     
                                CopieDonnees W,X,Y,Z
     
                                Exit For
     
                            Else    ' L'utilisateur a choisi Non.
                                Exit For        ' Quite la boucle
                            End If
                ElseIf date = "" Then
                    Dim Reponse
                    Response = MsgBox("Il manque la date !", vbInformation + vbOK + vbDefaultButton1, "Attention")
                Else
                End If
        Next Counter
     
    End Sub
    J'ai toujour un problème, lorsque j'exécute la macro, il me dit la chose suivante :

    Erreur de compilation
    Sub, Fonction ou Property attendu

    en me soulignant j. Je ne comprends pas très bien pourquoi. Auriez-vous une idée d'ou cela pourrai venir ?

    Cordialement

    Rafalemirage

  3. #3
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    sans avoi regardé plus loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
    Dim j As Boolean
        If A = B _
        And C = D _
        And E = F Then
            j = True
        Else
            j = False
        End If
        j
    End Sub
    ce n'est pas une fonction et le J qui est tout seul comme un grand m'étonne
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Dans ta subroutine test les variable A et B ne sont pas déclaré, a moins que A et B soit déclaré comme publique de plus ton apelle de ta subroutine n'est pas corecte (comme tu le dit tu l'utilise comme une fonction ce qui est différent des subroutine en vba)

    essaye d'en faire une fonction
    exemple simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function test(A() as variant, B() as variant) as boolean 
    if A=B then
       test=true
    else 
       test= false
    end if
    end sub
    Et lors de l'appelle

    ps pour tes déclaration de variable je te conseillerais de regarde c'est deux tuto
    http://mhubiche.developpez.com/Access/variables/
    http://silkyroad.developpez.com/VBA/LesVariables/

    J'espère que cela t'aidera

    Edit Bonjour casefayere, j'ai eu un peu de mal a retrouver mes liens et je nai pas rafraichi

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Par défaut
    Merci pour vos réponses rapides.

    En fait, les lettres A, B, C ... de mon exemple correspondent à des cellules d'une feuille Excel. J'ai mis A, B, C pour ne pas surcharger mais, par exemple :

    A = Sheets("Saisie").Range("date")

    et

    B = Sheets("002-Découverture").Range("A26")

    Du coup, je vois pas bien comment transformer ma subroutine test en fonction etant donnée que les A, B, C, ... ne varients pas et sont en fait des "constantes".

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 81
    Par défaut
    Re bonjour,

    J'ai modifié mon Sub en Function comme cela :

    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
     
    Function Test() As Boolean
     
     
        If Sheets("Saisie").Range("date") = Sheets("002-Découverture").Range("A26") _
        And Sheets("Saisie").Range("limonsrougesval") = Sheets("002-Découverture").Range("B26") _
        And Sheets("Saisie").Range("limonsrougester") = Sheets("002-Découverture").Range("C26") _
        And Sheets("Saisie").Range("sablesargileuxval") = Sheets("002-Découverture").Range("D26") _
        And Sheets("Saisie").Range("sablesargileuxter") = Sheets("002-Découverture").Range("E26") _
        And Sheets("Saisie").Range("argilesbleuesval") = Sheets("002-Découverture").Range("F26") _
        And Sheets("Saisie").Range("argilesbleuester") = Sheets("002-Découverture").Range("G26") _
        And Sheets("Saisie").Range("gresbleusval") = Sheets("002-Découverture").Range("H26") _
        And Sheets("Saisie").Range("gresbleuster") = Sheets("002-Découverture").Range("I26") _
        And Sheets("Saisie").Range("sterilesgisementval") = Sheets("002-Découverture").Range("J26") _
        And Sheets("Saisie").Range("sterilesgisementter") = Sheets("002-Découverture").Range("K26") _
        And Sheets("Saisie").Range("terrilprovisoireval") = Sheets("002-Découverture").Range("L26") _
        And Sheets("Saisie").Range("terrilprovisoireter") = Sheets("002-Découverture").Range("M26") Then
            Test = True
        Else
            Test = False
     
        End If
     
    End Function
    Maintenant j'ai une autre erreur qui s'affiche, c'est une erreur d'execution '1004' : Erreur définie par l'application ou par l'objet.

    Je vois pas d'ou ca peut venir.

  7. #7
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    là j'ai un doute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Saisie").Range("limonsrougesval") = Sheets("002-Découverture").Range("B26")
    tu veux tester quoi?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparer deux tableau
    Par themadmax dans le forum C#
    Réponses: 12
    Dernier message: 13/03/2008, 13h38
  2. Réponses: 3
    Dernier message: 08/02/2008, 20h37
  3. Comparer deux tableau virtuel
    Par PrinceMaster77 dans le forum ASP
    Réponses: 1
    Dernier message: 19/02/2007, 23h40
  4. comparer 2 tableau de int avec marge d erreur
    Par jerome86600 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 17/07/2006, 14h31
  5. comparer 2 tableau de int avec marge d erreur
    Par jerome86600 dans le forum Visual C++
    Réponses: 0
    Dernier message: 14/07/2006, 13h02

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