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 :

Méthode find sur deux tableaux puis calcul avec itération


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut Méthode find sur deux tableaux puis calcul avec itération
    bonjour le forum

    bon je sais que la méthode .find est souvent demandée sur le site et qu'il y a des tutos mais je pense que ma demande est particulière c'est pourquoi je me permets de créer ce post
    voilà le résumé de mon besoin
    j'ai deux fichiers, à l'aide d'une macro j'importe un fichier dans l'autre avec une création d'onglet (comptage)
    une fois cela terminé je dois chercher dans le fichier importé une valeur issu de la colonne A puis rechercher celle ci dans la colonne A de l'onglet (stock)
    dès que la valeur est trouvée je souhaite soustraire à la cellule situé à deux colonnes (offset...) la valeur issue de la 3ème colonne de l'onglet comptage
    et ainsi de suite
    et en tout dernier il me faudrait la somme des valeurs trouvées dans l'onglet comptage pour la soustraire à la dernière ligne de mon tableau stock
    voici le début de mon code, excuser mon amateurisme
    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
    
    Sub test()
    
    'RECUPERATION DE MON CLASSEUR COMPTAGE
    ceclasseur = ActiveWorkbook.Name
    'Récupération fichier
        Filt = "Excel Files (*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm"
        Title = "Selectionnez un Fichier Excel a Importer : "
        choix = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title)
        If choix = False Then
        MsgBox "Aucun fichier choisi"
        Exit Sub
        End If
    Workbooks.Open Filename:=choix
    nom = Dir(choix)
     
    Workbooks(nom).Activate
    Cells.Copy
    Workbooks(ceclasseur).Activate
    ActiveWorkbook.Worksheets.Add
    ActiveSheet.Name = "comptage propublic"
    Range("A1").PasteSpecial (xlPasteValues)
     
    Application.DisplayAlerts = False
    Workbooks(nom).Close
    Application.DisplayAlerts = True
    
    'DEBUT DE MON CODE POUR COMPARAISON
    With Worksheets("STOCK").Range("B2:E500")
      Set c = .Find("FDC01", LookIn:=xlValues)
      If Not c Is Nothing Then
        firstAddress = c.Address
        Do
                With Worksheets("comptage propublic").Range("A1:D500")
                Set d = .Find(c, LookIn:=xlValues)
                If Not d Is Nothing Then
                dAddress = d.Address
                Do
                
                Set d = .FindNext(d)
                Loop While Not d Is Nothing And d.Address <> dAddress
                End If
    
          Set c = .FindNext(c)
        
        Loop While Not c Is Nothing And c.Address <> firstAddress
      
      End If
    End With
    
    End Sub
    merci pour votre aide ou piste

    david

  2. #2
    Membre chevronné
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Par défaut
    Regarde les cours que tu peux trouver sur les dictionnaires ("Scripting.dictionary")
    ca résoudra ton problème et c'est indispensable a connaitre

    par exemple
    https://tahe.developpez.com/tutoriel...=page_3#LIII-R

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    bonjour à tous

    merci pour ta répons sogedic mais je ne vois pas trop le rapport avec la méthode .find

    j'ai réussi à trouver ce code sur un autre forum, il me convient parfaitement
    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
     
     
    Sub Comparaison()
    'Evite de voir les opérations intermédiaire sur les fichiers
    'Application.ScreenUpdating = False
    'déclarations des variables
    Dim i As Integer
    Dim j As Integer
    Dim Trouve As Integer
        i = 2 'initialisation du compteur à 2 car la ligne 1 contient l'en-tête de chaque donnée
        While (Sheets("comptage propublic").Cells(i, 1).Value <> "")    ' tant que dans le fichier test la cellule en (ligne i, colonne B) n'est pas vide
            j = 3
            Trouve = 0 'cette variable sert d'indicateur si c'est à 0 on a rien trouvé ou 1 on a trouvé la cellule correspondante
            While (Sheets("STOCK").Cells(j, 2).Value <> "") And (Trouve = 0)
                'si la cellule du fichier test2 correspond à celle de test alors
                If Sheets("STOCK").Cells(j, 2).Value = _
                Sheets("comptage propublic").Cells(i, 1).Value Then
                Trouve = 1
                'On copie le code à la ligne actuelle dans une nouvelle colonne
                    Sheets("STOCK").Cells(j, 6).Value = _
                    Sheets("comptage propublic").Cells(i, 3).Value + 1
                    Sheets("STOCK").Cells(j, 7).Value = _
                    (Sheets("STOCK").Cells(j, 4).Value - Sheets("STOCK").Cells(j, 6).Value)
                    Total = Total + Sheets("STOCK").Cells(j, 6).Value
                    Ligne = Cells(Rows.Count, 2).End(xlUp).Row '
                    Cells(Ligne, 6) = Total
                    Cells(Ligne, 7) = (Cells(Ligne, 4) - Cells(Ligne, 6)) - 1
                'sinon on passe à la ligne suivante de test2
                Else
                j = j + 1
                End If
            Wend
            i = i + 1
        Wend
    'Application.ScreenUpdating = true
    End Sub
    si d'autres solutions plus simples existent, je suis preneur
    merci encore

    david

Discussions similaires

  1. [Core] La méthode find sur Hibernate
    Par developpCathy dans le forum Hibernate
    Réponses: 5
    Dernier message: 16/08/2011, 15h06
  2. [XL-2007] tri de correspondance sur deux tableaux
    Par vgrenet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/03/2011, 15h52
  3. recherche sur deux tableaux
    Par lisandro69100 dans le forum Excel
    Réponses: 1
    Dernier message: 20/12/2010, 09h59
  4. suprimer une ligne identique sur deux tableaux
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/03/2009, 09h22
  5. [Tableaux] Travail sur deux tableaux à 2 dimensions
    Par BigBarbare dans le forum Langage
    Réponses: 4
    Dernier message: 11/05/2006, 17h25

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