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 :

VBA - Excel - comparaison de deux feuilles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut VBA - Excel - comparaison de deux feuilles
    Bonjour,

    Bon, ma question va certainement paraitre toute simple, mais bon, je suis perdue là, alors s'il vous plait, aidez-moi !!!
    Voilà, j'ai deux feuilles excel :
    Feuil1 :
    Nom 1976 1979 1990
    1,3 DP 1 1
    4,5 EX 1 1


    Feuil2 :
    Nom 1976 1979 1996
    4,5 EX 1 1
    8,9 TH 1 1

    Et j'aimerais obtenir en feuil3,
    Nom 1976 1979
    4,5 EX 1 1
    C'est à dire que les champs communs entre feuil1 et feuil2.

    J'avais penser à du VBA, mais j'ai du mal à concevoir mon algo, sinon, jai essayé avec un filtre élaboré mais il ne fonctionne que sur le nom, pas sur les années (j'ai peut-ête loupé une étape !!!).

    Merci de votre aide.

    Céline (ben oui, parce que des céline y'en a plein alors que toto, c'est plus rare )

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour le principe :
    Tu lis ligne par ligne les données de la première colonne de ta feuille 1
    Pour chaque ligne, tu recherches la donnée correspondante dans feuille 2
    - Si elle existe, tu vérifies que la donnée de la colonne 2 de la feuille 2 correspond à la donnée de la colonne 2 de la feuille 1
    - Si oui, tu incrémentes le N° de ligne de la feuille 3 et tu copies les données sur ce nouveau N° de ligne.
    - Si non, tu passes à la ligne suivante feuille1
    Pour la recherche, tu as deux solutions : si tu peux trier les données des feuilles 1 et 2, tu peux lire ta feuille 2 ligne par ligne. Sinon, utilise Find (F1...)
    Pour ma part, comme il n'est pas toujours possible de trier les données, je préfère utiliser Find.
    Fais quelque chose et montre-nous si tu as des difficultés
    A+

  3. #3
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    OK, merci, on dirait que je suis partie puor du VBA. C'est pas gagné !!!

    Bon, j'essaie et si je galère, je reviens

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Par défaut
    Sans VBA le résultat ne sera pas exactement le même. Tu garderas des cellules vides.
    Cela dépend combien de fois tu comptes répéter l'opération. Si c'est du one-shot, tu peux utiliser des fonctions excel. Sinon il faudra du VBA comme indiqué par ouskel'n'or.
    En gros dans la feuille 3, cellule C3, on met la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SI(Feuil2!C3=""; ""; SI(ESTERREUR(RECHERCHEH(Feuil2!C3; Feuil1!3:3; 1; FAUX)); ""; Feuil2!C3))
    (Il faudra adapter les fonctions selon le langage d'Excel)
    Et il suffit d'étendre cette formule sur la Feuil3 sur la même plage que celle utilisée dans la Feuil2. Tu ne verras alors apparaître que les cellules de la feuil2 qui sont dans la feuil1 sur la même ligne (attention aux espaces superflux).
    En esperant que ca t'aidera...

  5. #5
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    Bonjour ! et merci pour votre aide.
    En fait, c'est un peu plus compliqué car je ne compare pas les fichiers lignes à lignes, je n'ai pas le meme nombre d'enregistrement entre la feuille 1 et la feuille 2, c'eut été trop facile !!!
    En fait, il faut d'abord que je recherche dans la feuille 2, les lignes où j'ai les meme noms que dans la feuille 1, ensuite, que je récupérer les années qui sont en commun, puis que je regarde si il y a un "1" pour le meme nom à la meme année. Oui, en fait, ça se résume à ça : "il faut que je trouve les cases où il y a un "1" pour le meme nom à la meme année".

    J'avoue que je galère complètement. Je suis totalement perdue. Mais je ne désespère pas, je vais bien trouver une solution.

    Est-ce que quelqu'un pourrait juste m'indiquer comment sélectionner mes années de la feuille 1 en fonction des années présentes dans ma feuille 2, ça m'aiderait beaucoup. Les champs concernant les années se situent en ligne 1, à partir de C1.
    Merci.

    Céline

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Par défaut
    Je vois que tu veux vraiment le faire en VBA.
    Voici une methode possible :
    ¤ Faire une copie exacte de la Feuil2 en Feuil3
    ¤ Pour chaque année de la Feuil2, si elle n'est pas dans la Feuil1, supprimer complètement la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    line1 = 1 ' line1 étant la ligne ou se trouve les années
    col1 = 1  ' col1 étant la colonne ou se trouve les noms
    For i = 255 to col1 Step -1
    	annee = Feuil3.Cells(line1, i)
    	If annee <> "" Then
    		If Feuil1.Range(line1 & ":" & line1).Find(annee) Is Nothing Then
    			Feuil3.Cells(1, i).EntireColumn.Delete
    		End If
    	End If
    Next i
    Attention : selon le format de tes données, il faudra peut-être ajouter des paramètres à la fonction Find
    Rem. On fait une boucle For avec un Step -1 car, quand tu supprimes une colonne, cela les décale vers la gauche. 255 = nbr de colonnes max (mais on peut faire plus rapide).
    ¤ Faire la même chose sur les noms, sauf que l'on parcoure cette fois-ci les lignes et on recherche le nom dans la 1ere colonne de la Feuil1.
    Attention : pour les noms, ne pas commencer la boucle à 255, mais à Feuil1.UsedRange.Rows.Count + Feuil1.UsedRange.Row, càd le numéro de la dernière ligne utilisée.

    Rem. Si dans la Feuil1 et la Feuil2, la cellule en haut à gauche n'est pas identique, terminer la 1ere boucle For à line1 + 1, et la 2eme à col1 + 1.

    En esperant que ca va t'aider.

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

Discussions similaires

  1. VBA-Excel Comparaison 2 feuilles
    Par PiuPiu dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/10/2007, 18h05
  2. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  3. [VBA]excel comparaison de chaine de caractere
    Par ogenki dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2006, 15h32
  4. [VBA Excel] Remettre toute une feuille par défaut
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/12/2005, 16h56
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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