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 de colonnes dans plusieurs onglets


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut Comparaison de colonnes dans plusieurs onglets
    bonjour,
    j'ai 6 onglets dont un onglet "sauvegarde".
    les 5 autres onglet sont mis à jour régulierement, ce qui cree des decalages de lignes. les infos saisies ne sont donc plus bonnes.
    J'ai donc decider de consolider tout mes onglets dans un onglet "sauvegarde".
    j'ai donc cree une macro qui compare le numero de client dans l'onglet mis à jour à celui de l'onglet "sauvegarde". Si les numeros clients correspondent, la macro me recopie les données correspondant au client à partir de l'onglet sauvegarde,
    Mon probleme est le suivant, la macro que j'ai réalisé ne compare qu'un onglet à l'onglet "sauvegarde". il me faut encore comparer les 4 autres à l'onglet sauvegarde.
    Malheureusement je suis débutant et je ne sais pas comment faire. Pouvez vous m'aider svp
    voici la macro que j'ai ecris :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    Sub COMPAR()
    Application.ScreenUpdating = False
    'declaration des variables'
    Dim VALEURA As String, i As Integer, x As Integer, valeurB As String
     
     
    'i correspondra au numeros de ligne dans la feuille 1'
    i = 3
     
    'continuer tant que i n'est pas egal à 5000'
    Do While i <> "50"
     
    'donner une valeur de départ à VALEURA, valeura=le contenue de A2'
    VALEURA = range("c" & i).Value
     
    'activer la feuille 2'
    Sheets("sauvegarde").Select
     
    'x correspond au numeros de ligne dans la feuille 2'
    x = 3
     
    'donner une valeur de depart a valeurb'
    valeurB = range("c" & x).Value
     
    'comparer valeura et valeurb, tant que faux incrementer x de 1'
     
    Do While VALEURA <> valeurB
    x = x + 1
    If x = 50 Then GoTo l49
    valeurB = range("c" & x).Value
    Loop
     
     
    'si la cellule Lx = quelque chose alors on copy la ligne'
    If VALEURA = valeurB Then
    range("j" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("J" & i).Select
    ActiveSheet.Paste
     
    Sheets("sauvegarde").Select
    range("k" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("k" & i).Select
    ActiveSheet.Paste
     
    Sheets("sauvegarde").Select
    range("l" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("l" & i).Select
    ActiveSheet.Paste
     
    Sheets("sauvegarde").Select
    range("m" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("M" & i).Select
    ActiveSheet.Paste
     
     
    Sheets("sauvegarde").Select
    range("n" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("n" & i).Select
    ActiveSheet.Paste
     
    Sheets("sauvegarde").Select
    range("o" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("o" & i).Select
    ActiveSheet.Paste
     
    Sheets("sauvegarde").Select
    range("p" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("p" & i).Select
    ActiveSheet.Paste
     
    Sheets("sauvegarde").Select
    range("q" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("q" & i).Select
    ActiveSheet.Paste
     
    Sheets("sauvegarde").Select
    range("r" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("r" & i).Select
    ActiveSheet.Paste
     
    Sheets("sauvegarde").Select
    range("s" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("s" & i).Select
    ActiveSheet.Paste
     
    End If
     
    'on incremente i de 1'
    l49:
    i = i + 1
     
    'on continue les fonction d'avant jusqu'a ce que i=5000'
    Loop
     
    End Sub

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 92
    Par défaut
    Ton code me parait bien complexe.

    Tout d'abord, pour copier une cellule dans une autre il suffit d'une ligne de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, j) = Worksheets("Onglet_01").Cells(x, y)
    Ensuite, comme indiqué au-dessus, il est facile de se déplacer d'onglet à onglet, en rejoutant juste la commande Worksheets(). devant la commande Cells() Il suffit d'indiquer le nom de l'onglet entre les parenthèses, et tout en restant sur l'onglet actif (Sauvegarde dans ton cas), le logiciel va chercher les éléments dans l'autre onglet.

    Par ailleurs, je pense qu'il est préférable d'utiliser la fonction For au lieu de While, le résultat et le même, mais For est plus propre à utiliser.

    Phil.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut
    bonjour,
    merci pour ta réponse.
    Tu veux donc dire que je peux resumer ce bloc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sheets("sauvegarde").Select
    range("k" & x).Select
    Selection.Copy
    Sheets("p11").Select
    range("k" & i).Select
    ActiveSheet.Paste
    en ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheets("sauvegarde").Cells(k, x) = Worksheets("p11").Cells(k,i)
    ??

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 92
    Par défaut
    Tout à fait, mais même encore plus simple, si ton onglet "Sauvegarde" est l'onglet actif, tu n'as même pas besoin de le préciser dans ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheets("sauvegarde").Cells(k, x) = Worksheets("p11").Cells(k,i)
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(k, x) = Worksheets("p11").Cells(k,i)
    Ensuite, tu crées les lignes nécessaire à la comparaison de chaque onglet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cells(k, x) = Worksheets("p11").Cells(k,i)
    Cells(k, x) = Worksheets("p12").Cells(k,i)
    Cells(k, x) = Worksheets("p13").Cells(k,i)
    Phil....

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut
    ca ne marche pas...je pense qu'il y a un probleme dans la declaration de variable.

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Regarde ce que tu écris (ou plutôt regardez ce que vous écrivez)
    range("k" & x) dans le code initial devient Cells(k, x) et la même chose pour range("k" & i) --> Cells(k, i).

    Vous trouvez que range("k" & x) est la même chose que Cells(k, x) ?
    Pour obtenir le même résultat avec Cells, il faudrait écrire Cells(x, 11)

    Ceci n'est pas correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheets("sauvegarde").Cells(k, x) = Worksheets("p11").Cells(k,i)
    D'autant plus qu'initialement tu copies de la feuille "sauvegarde" vers la feuille "p11", ceci devrait mieux fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("p11").Range("K" & i) = Sheets("sauvegarde").Range("K" & x)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/05/2014, 10h47
  2. [Toutes versions] Somme dans plusieurs onglet
    Par eric.leduc dans le forum Excel
    Réponses: 1
    Dernier message: 18/08/2009, 23h12
  3. trier dans plusieurs onglets
    Par bibvba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/03/2008, 11h10
  4. Réponses: 2
    Dernier message: 23/08/2007, 20h45
  5. Comparaison de code dans plusieurs modules
    Par jbaudin dans le forum Access
    Réponses: 2
    Dernier message: 03/10/2005, 11h47

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