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 :

Find cellule différente [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 584
    Par défaut Find cellule différente
    Bonjour,
    J'ai une feuille (1) contenant une base de donnée
    Je souhaite comparer les données d'une feuille(2) à ma bd.
    - Si je trouve des id identiques, je vérifie si la ligne complète est identique. Sinon mise à jour de la bd (code ok)

    - Si des id sont présent dans la feuille (2) et absent de la bd, j'ajoute la/les ligne(s) à la bd. (je ne vois pas trop comment faire)

    Avez vous une idée, pour trouver les lignes présentes dans la feuille 2 et pas dans la bd (sans trier les colonnes de la bd)

    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
     
    Sub Compare()
    Dim i&, Z1$, Identique As Range
     
    With ThisWorkbook.Sheets(1).Range("A2:A6")
     
      For Each o In ThisWorkbook.Sheets(2).Range("A2:A6")
      'noter le N° de ligne
        i = o.Row
        'mémoriser la valeur de la cellule
        Z1 = o.Value
        'cherche les id identiques
        Set Identique = .Find(Z1, LookIn:=xlValues, LookAt:=xlWhole)
        'Si trouvé mémorise le N° de ligne
        If Not Identique Is Nothing Then
        FirstRow = Identique.Row
        MsgBox "ligne identique = " & Identique
            Do
              'Code si identique
              Set Identique = .FindNext(Identique)
              '...Tant qu 'on n'est pas revenu à la ligne de départ
            Loop While Not Identique Is Nothing And Identique.Row <> FirstRow
            'réinitialise la variable avant de changer de ligne
          FirstRow = ""
        End If
        '...cellule de référence (o) suivante
      Next
    End With
    End Sub

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir
    Une question: combien tu as de colonnes?

  3. #3
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 584
    Par défaut
    Bonjour
    Une petite vingtaine

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Vu que tu recherches un ID qui par définition est unique sur une liste, perso, au lieu de Find, j'utiliserais Match et je récupérerais direct le N° de ligne..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MsgBox WorksheetFunction.Match("DT42356,667055533132011", ActiveSheet.Range("A:A"), 0)
    '
    pour le reste , je ne comprend pas la question...
    cordialement,

    Didier

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    En fin de compte, tu désire mettre à jour les données de Feuil1 à partir de Feuil2.
    Tu parcours la colonne des id de Feuil2, si le id existe en Feuil1 tu remplace la ligne correspondante dans Feuil1 par celle de Feuil2, sinon, tu ajoute la ligne de Feuil2 vers la fin de Feuil1.
    Ci-joint proposition
    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
    Dim Sh As Worksheet
    Dim LastLig1 As Long, LastLig2 As Long, i As Long
    Dim c As Range
     
    Application.ScreenUpdating = False
    Set Sh = Sheets("Feuil1")
    LastLig1 = Sh.Cells(Sh.Rows.Count, "A").End(xlUp).Row
    With Sheets("Feuil2")
        LastLig2 = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 2 To LastLig2
            Set c = Sh.Range("A2:A" & LastLig1).Find(.Range("A" & i).Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                .Rows(i).Copy c
                Set c = Nothing
            Else
                LastLig1 = LastLig1 + 1
                .Rows(i).Copy Sh.Range("A" & LastLig1)
            End If
        Next i
    End With
    Set Sh = Nothing

  6. #6
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 584
    Par défaut
    Impeccable, merci beaucoup. Efficace et propre !

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

Discussions similaires

  1. [VBA-E]Nombre de formats de cellule différents trop élevé
    Par Patrice740 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 19/09/2008, 11h09
  2. Compter des cellules différentes
    Par steph05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/07/2007, 05h18
  3. Réponses: 1
    Dernier message: 19/04/2007, 10h14
  4. Comparer la chaine de caractère de deux cellules différentes
    Par idir.17 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/03/2007, 14h48
  5. [PEAR][Spreadsheet] PHP/EXPORT EXCEL : nombre de formats de cellule différents !
    Par joe_le_mort dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 27/10/2005, 17h21

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