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 :

Problème de formules [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut Problème de formules
    Bonjour a tous,

    Après avoir parcourut les différents forums, sites existants,
    je me suis un peu perdu dans toutes les formules que j'ai vu.

    Pouvais vous m'indiquer les formules a utiliser s'il vous plait ?

    Le code suivant n'est Pas Du Tout conforme au langage VBA mais je l'ai ecrit
    pour que vous compreniez simplement son but.
    (Qui est de verifier si une ligne existe dans mes 2 feuilles et filtrer les doublons
    en changeant la date(Colonne B) et le contenu d'une cellule (Colonne F)
    en ne gardant que la version la plus ancienne (pour mettre la ligne a jour))

    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
    Sub Archivage()
     
    Dim i As Integer            ' i = numéro de ligne feuille List
    Dim j As Integer            ' j = numéro de ligne feuille Archive
    j = 1
     
    For i = 2 To 1 + 49
        While i <> 52
     
        If Sheets("List").Cells(i, 1) <> Sheets("Archive").Cells(j, 1) Then
        ' Si A2.List différent de A1.Archive, on passe a A2.Archive
            j = j + 1
     
            If Sheets("Archive").Cells(j, 1) = "" Then
            'Si Aj.Archive = Rien ( ce qui correspond a la fin de la list d'archive),
            '1/ On ajoute la ligne de List a Archive
            Sheets("Archive").Row(j) = Sheets("List").Row(i)
            '2/on passe a A3.List
            i = i + 1
            j = 1
     
            End If
     
        Else:   Sheets("Archive").Cells(j, 6) = Sheets("List").Cells(i, 6)
                Sheets("Archive").Cells(j, 2) = Sheets("List").Cells(i, 2)
        'Si les cellules sont identiques, on donne l'état de "List" a "Archive"
     
        End If
     
    End Sub
    Merci d'avance a ceux qui prendrons le temps de me répondre, de m'aider .

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Bonjour,
    Pour éliminer les doublons en ne gardant que la date la version la plus ancienne tu peux procéder comme suit :
    1. Trier tes données de la plus ancienne à la plus récente : Accueil > Trier et filtrer > Trier de A à Z
    2. Eliminer les doublons grâce à la fonctionnalités d'Excel : Données > Supprimer les doublons

    Ceci est ce que tu peux faire "à la main" sur Excel. Pour connaître le code associé, utilise lenregistreur de macro et adapte le code obtenu.

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    Merci pour ta réponse !

    Ce que je cherche surtout ici c'est comment copier la ligne d'une feuille a une autre.
    Pour trier je le fais a la main, c'est plus simple pour les personnes qui passent après moi .

    La ligne qui me pose problème c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets("Archive").Row(j) = Sheets("List").Row(i)
    car je sais qu'elle est totalement fausse.
    (Normalement le reste du code n'est pas si horrible que ca ..)

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Pour trier je le fais a la main, c'est plus simple pour les personnes qui passent après moi
    Si tu veux ... je ne suis pas sûre que ce soit vraiment plus simple. Par contre, si tu as beaucoup de lignes ce sera plus long !

    Pour transférer les valeurs d'une ligne, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Archive").Rows(j).Value = Sheets("List").Rows(i).Value

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    C'est parfait je te remercie de ton aide et d'avoir répondu aussi vite !

  6. #6
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    Le problème que je rencontre maintenant est que quand ma page "Archive" est vide,
    tout ce passe comme prévu.

    Par contre dès qu'il y a quelque choses dedans Excel passe en mode "Ne repond pas".

  7. #7
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Quand Excel dit "Ne répond" pas, c'est souvent parce que l'exécution du programme prend beaucoup de temps. C'est pour cela que je te proposais de passer par tri puis supression de doublons.

  8. #8
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    Je ne comprend pas en quoi cela peut m'aider de faire le tri via VBA ?

    Je compare quoi qu'il arrive toutes les lignes des 2 feuilles..
    Alors triées ou non toutes les lignes sont comparées quand même non ?

    Peut tu m'expliquer comment m'y prendre depuis ton point de vue ?

    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
    Sub Archivage()
     
    Dim i As Integer            ' i = numéro de ligne feuille List
    Dim j As Integer            ' j = numéro de ligne feuille Archive
    j = 1
     
    For i = 2 To 1 + 49
        While i <> 52
     
        If Sheets("List").Cells(i, 1) <> Sheets("Archive").Cells(j, 1) Then
        ' Si A2.List différent de A1.Archive
     
     
            If Sheets("Archive").Cells(j, 1) = "" Then
            'Si Aj.Archive = Rien ( ce qui correspond a la fin de la list d'archive),
            '1/ On ajoute la ligne de List a Archive
            Sheets("Archive").Rows(j).Value = Sheets("List").Rows(i).Value
            '2/on passe a A3.List
            i = i + 1
            j = 1
     
            Else: j = j + 1
            'Sinon on passe a A2.Archive
            End If
     
        Else:   Sheets("Archive").Cells(j, 6) = Sheets("List").Cells(i, 6)
                Sheets("Archive").Cells(j, 2) = Sheets("List").Cells(i, 2)
        'Si les cellules sont identiques, on donne l'état de "List" a "Archive"
     
        End If
        Wend
        Next
     
    End Sub

  9. #9
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Voici ce que je te proposais de faire "à la main" :
    Nom : elimination doublon.png
Affichages : 164
Taille : 69,7 Ko
    La fonctionnalité "suppression des doublons" supprime les doublons en gardant la première occurence. Du coup, si tu tries ta plage du plus ancien au plus récent en amont, la suppression de doublons ne gardera que la valeur la plus ancienne.
    Je sais pas trop si tu veux garder la plus ancienne ou la plus récente, mais il suffit d'adapter ton tri : du plus ancien au plus récent pour garder le plus ancien ou du plus récent au plus ancien pour garder le plus récent.
    Ensuite, pour avoir le code attaché, tu utilises l'enregistreur de macro et tu adaptes ce que tu obtiens. Ce sera beaucoup plus rapide à l'exécution que de comparer les lignes une à une.
    Essaie déjà d'obtenir le code correspondant avec l'enregistreur de macro, puis reviens si tu as encore des problèmes.

  10. #10
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    Ah oui je comprend mieux pourquoi tu veux faire comme ca !

    Le problème est que j'aimerais gérer les doublons entre 2 feuilles,
    or avec ta méthode il faudrait que je rassemble ses feuilles et que
    j'effectue mon tri ensuite.

    J'aimerais remplacer les lignes existante
    dans ma feuille "Archive" par les lignes de ma feuille "List" si
    elles sont identiques ( si la première cellule des 2 lignes sont indentiques)
    et juste ajouter a la suite les nouvelles lignes.

    Je garde ta solution sous le coude quand même !

  11. #11
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    up
    Je me permet de relancer la discussion car mon problème ne se résout pas..

    La partie me posant problème est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Archive").Cells(j, 6) = Sheets("List").Cells(i, 6)
    La partie copy/paste marche bien quand ma feuille de destination est vide mais Excel passe en mode
    "Ne répond pas" lorsque je lance le code une 2nde fois (la page non vide vous l'aurez compris)

    Mais si quelqu'un veut repenser le code il n'y a pas de problème (surtout que je ne suis pas sûr que
    le code marche).

    J'ai essayé la méthode proposée par Riaolle mais le tri automatique ne met pas mes dates dans le bon ordre .

    Merci pour vos retours.

  12. #12
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Pourrais-tu nous transmettre le code obtenu avec la méthode tri+élimination des doublons. Qu'entends tu par "le tri ne met pas les dates dans le bon ordre" ?
    Sinon, dans ton code, essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Archive").Cells(j, 6).Value = Sheets("List").Cells(i, 6).Value
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Archive").Cells(j, 6) = Sheets("List").Cells(i, 6)

  13. #13
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    J'ai déjà essayé le ".Value" mais cela ne change rien.

    Le tri ne met pas les dates dans le bon ordre :
    Mes date sont sous le format jj/mm/aaaa et quand j'utilise le tri comme tu me l'a suggéré,
    les dates son triées par rapport au numéro du jour avant tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    01/06/2017*
    01/06/2017*
    02/05/2017*  (il classe selon le jour avant tout, puis s'il il 
    02/06/2017*  a différent mois il met le plus petit nombre avant) 
    02/06/2017*  
    02/06/2017*
    03/05/2017*
    et voila le code obtenu via l'enregistreur de macro en suivant tes instructions
    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
    Sub Macro1()
     
        Columns("B:B").Select
        ActiveWorkbook.Worksheets("List").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("List").Sort.SortFields.Add Key:=Range("B1"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("List").Sort
            .SetRange Range("A1:F50")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Columns("A:I").Select
        ActiveSheet.Range("$A$1:$I$50").RemoveDuplicates Columns:=1, Header:=xlNo
    End Sub

  14. #14
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Hmmmm c'est bizarre ... tes dates sont bien au format date ? C'est pas un format texte par hasard ? Parce que de mon côté, j'ai exactement le même code et ça marche ...
    Après, pour ton "Excel ne répond plus", je n'ai plus vraiment d'idées ... Je pense vraiment que ça vient du fait que la double boucle est trop longue.

  15. #15
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    Mes dates sont surement au format texte car quand j'importe les données du site je recois ca "Date : date"

  16. #16
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Du coup, essaie en ajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns("B:B").NumberFormat = "dd/mm/yyyy"
    Avant de faire le tri.

  17. #17
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    je viens de rajouter ca dans mon code mais je n'ai toujours pas le bon ordre ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Cells.Replace What:="Date : ", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Columns("B:B").NumberFormat = "dd/mm/yyyy"

  18. #18
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 706
    Par défaut
    Bon là, je sèche ... Désolée.

  19. #19
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    merci d'avoir essayé

  20. #20
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Bonjour,

    Normalement en faisant la conversion des dates via le menu data -> Text to Columns , le tri fonctionne correctement.
    Utilise l'enregistreur de macro pour obtenir le code vba.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Excel Problème de formule
    Par jbidou88 dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 12/05/2006, 11h20
  2. PRoblème de formule dans Excel
    Par jbidou88 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/05/2006, 10h35
  3. problème de formulation d'une requête
    Par seiryujay dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/08/2004, 18h13
  4. Problème de formulation de requète
    Par tellitocci dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/06/2004, 06h05
  5. [EXCEL-OLE] Problème de formule
    Par qi130 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 13/10/2003, 19h49

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