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 :

Comparaison données entre deux feuilles [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é
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 59
    Par défaut Comparaison données entre deux feuilles
    Bonjour !

    Petit blocage sur une comparaison de donné afin de copier des valeurs.

    J'ai 2 feuilles différentes :
    - "HISTORIQUE_JOUR" -> Je cherche à afficher le nombre de besoins dans la colonne Besoins
    - "Besoins" -> Données remplies par l'utilisateur

    Je voudrais que les besoins de la feuille "Besoins" se retranscrive sur l'autre feuille (sans prendre en compte les doublons)

    J'ai fait un code mais qui ne marche pas vraiment...

    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
    Private Sub CommandButton15_Click()
    Application.ScreenUpdating = False
        Dim PlCol_1 As Range
        Dim PlCol_2 As Range
        Dim CelCol_1 As Range
        Dim CelCol_2 As Range
     
    Sheets("HISTORIQUE_JOUR").Select 'Bidouille pour éviter une erreur qui m'obligeait à réaliser le Set d'une feuille en ayant cette meme feuille active
            Set PlCol_2 = Sheets("HISTORIQUE_JOUR").Range(Cells(8, 9), Cells(Rows.Count, 9).End(xlUp))
    Sheets("Besoins").Select 'Idem que com précédent
            Set PlCol_1 = Sheets("Besoins").Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
     
         For Each CelCol_2 In PlCol_2
             Set CelCol_1 = Sheets("Besoins").Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)).Find(CelCol_2, , xlValues, xlWhole)
            If Not CelCol_1 Is Nothing Then
                 CelCol_2.Offset(, 3).Value = CelCol_1.Offset(, 1).Value
             End If
         Next CelCol_2
    Application.ScreenUpdating = True
    End Sub
    Voici un fichier joint (La disposition est faite exprés) : Comparaison.xls

    Avez vous une idée pour corriger le code ?

    Merci d'avance !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si j'ai bien compris le besoin, ton code est plutôt bien à quelques détails près.
    Pour info, la bidouille que tu mentionnes n'en n'est pas une mais une syntaxe obligatoire. Par contre il n'est pas nécessaire de repréciser le nom de la feuille avant Range(.
    Vois, le code ci-dessous et je te laisse chercher les différences avec le tien.
    Bien sûr, reviens sur le forum si tu as un souci.

    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
        Application.ScreenUpdating = False    Dim PlCol_1 As Range
        Dim PlCol_2 As Range
        Dim CelCol_1 As Range
        Dim CelCol_2 As Range
     
        Sheets("HISTORIQUE_JOUR").Select
        Set PlCol_2 = Range(Cells(2, 9), Cells(Rows.Count, 9).End(xlUp))
        Sheets("Besoins").Select
        Set PlCol_1 = Range(Cells(2, 1), Cells(Rows.Count, 2).End(xlUp))
        For Each CelCol_2 In PlCol_2
            Set CelCol_1 = Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)).Find(CelCol_2, , xlValues, xlWhole)
            If Not CelCol_1 Is Nothing Then
                CelCol_2.Offset(, 3).Value = CelCol_1.Offset(, 1).Value
            End If
        Next CelCol_2
        Application.ScreenUpdating = True
    Cordialement.
    Jean-Claude

  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
    Perso, je traduis par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    .....
    With Sheets("HISTORIQUE_JOUR")
      Set PlCol_2 = .Range(.Cells(2, 9), .Cells(.Rows.Count, 9).End(xlUp))
    End With
    With Sheets("Besoins")
      Set plcol_1 = .Range(.Cells(2, 1), .Cells(.Rows.Count, 2).End(xlUp))
      For Each CelCol_2 In PlCol_2
        Set CelCol_1 = plcol_1.Find(CelCol_2, , xlValues, xlWhole)
        If Not CelCol_1 Is Nothing Then
          CelCol_2.Offset(, 3).Value = CelCol_1.Offset(, 1).Value
        End If
      Next CelCol_2
    End With
    .....
    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 confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 59
    Par défaut
    Bonjour !

    Merci beaucoup jcDSoft et casefayere, ca fonctionne nickel sur le fichier exemple.


    Question : Si je veux lancer ce code en cliquant sur un bouton d'action, je mets le code dans le bouton d'action ou bien dans un module ? Parce que sur mon fichier original, le code que vous m'avez passé ne fonctionne pas... Donc je suis en train de me demander si je n'ai pas fait une erreure dans le paramétrages des Sub, Objet ou Procédure.

    Merci encore et bonne journée !

  5. #5
    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,

    tu as le choix, ou tu entres le code dans l'évènement "Click" du bouton, ou tu mets le code dans un module dont la procédure sera appelée par ton bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    nomprocedure
    End Sub
    dans le module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub nomprocedure()
    .......
    End Sub
    Si ça ne fonctionne pas sur ton fichier original, c'est qu'il y a une erreur quelque part, alors expliques-toi bien

    Bon courage
    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...)

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 59
    Par défaut
    C'est bon j'ai trouvé...

    ...Erreur ridicule : j'avais plusieurs colonnes masquées donc le Offset (, 3) faisait référence à une colonne masquée.

    Merci pour vos réponse !

    Problème résolu

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

Discussions similaires

  1. [XL-2010] Transferts de données entre deux feuilles qui marche à moitié
    Par ElPibeOro dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/05/2013, 13h28
  2. [XL-2010] Transferts de données entre deux feuilles
    Par ElPibeOro dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 30/04/2013, 17h04
  3. [XL-2010] Transférer des données entre deux feuilles et les placer à des lignes spécifiques
    Par ElPibeOro dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2013, 14h25
  4. [XL-2003] Rechercher des donnée entre deux feuilles
    Par mimil49 dans le forum Excel
    Réponses: 1
    Dernier message: 06/07/2011, 16h14
  5. Concordances de données entre deux feuilles
    Par lulu24100 dans le forum Excel
    Réponses: 7
    Dernier message: 07/08/2007, 11h55

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