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 script VB pour comparateurs sur plusieurs feuille


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Problème de script VB pour comparateurs sur plusieurs feuille
    Bonjour à tous,

    Je débute et j'ai pour objectifs de travaillé un fichier excel d'une volumétrie importante.

    J'ai pu lire sur votre aide (soit dit en passant fort utile) que l'on pouvait scripté en VB dans les macros pour faire certain job.
    Première question ais je bien compris .

    Deuxième question j'ai écrit un bout de code qui si j'ai bien compris le tutoriel me permettrais de Comparer chaque Cellule de la colonne A de ma feuille1 avec toutes les cellules de ma colonne A de ma feuille2. Si on ne trouve pas de corrélation entre Cellule (i,A) de la feuille1 avec une des valeurs de la Colonne A de la feuille2, alors j'écris le contenu de la Feuille1.Cells(i,A) dans la feuille 4.
    Et j'incrémente le tout.

    A dire comme çà , celà semble facile, personnellement je n'y arrive pas. Je sollicite votre précieuse aide parce que la je sèche

    Dans la logique le code serait:
    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
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim j As Integer
    Dim posteAD As Variant
    Dim PosteAS As Variant
    Dim Resultat As Variant
    Dim sheetAD As Excel.Worksheet
    Dim sheetAS As Excel.Worksheet
    Dim sheetVi As Excel.Worksheet
    Dim sheetRe As Excel.Worksheet
     
    Dim appExcel As Excel.Application
    Dim sheet As Excel.Worksheet
    'Récupération de la feuille s'appellant Feuille1
    Set sheetAD = appExcel.ActiveWorkbook.Sheets("Feuille1")
    'Récupération de la feuille s'appellant Feuille2
    Set sheetAS = appExcel.ActiveWorkbook.Sheets("Feuille2")
    'Récupération de la feuille s'appellant Feuille3
    Set sheetVi = appExcel.ActiveWorkbook.Sheets("Feuille3")
    'Récupération de la feuille s'appellant Resultat
    Set sheetRe = appExcel.ActiveWorkbook.Sheets("Resultat")
     
     
    i = 1
    j = 1
     
    For i = 1 To 52345
     
            For j = 1 To 52345
            If Not sheetAD.ceels(i, A) Like sheetAS.Cells(j, A) Then
            sheetRe.Cells(i, A) = sheetAD.ceels(i, A)
            Next j
            'Peut être faut il un endif ?
    Next i
    Merci encore de votre aide

  2. #2
    Membre confirmé
    Avatar de erfindel
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 498
    Points : 489
    Points
    489
    Par défaut
    Oui les macros peuvent faire des choses

    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
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim j As Integer
    Dim posteAD As Variant
    Dim PosteAS As Variant
    Dim Resultat As Variant
    Dim sheetAD As Excel.Worksheet
    Dim sheetAS As Excel.Worksheet
    Dim sheetVi As Excel.Worksheet
    Dim sheetRe As Excel.Worksheet
     
    Dim appExcel As Excel.Application
    Dim sheet As Excel.Worksheet
    'Récupération de la feuille s'appellant Feuille1
    Set sheetAD = appExcel.ActiveWorkbook.Sheets("Feuille1")
    'Récupération de la feuille s'appellant Feuille2
    Set sheetAS = appExcel.ActiveWorkbook.Sheets("Feuille2")
    'Récupération de la feuille s'appellant Feuille3
    Set sheetVi = appExcel.ActiveWorkbook.Sheets("Feuille3")'Ne sert pas normal ?
    'Récupération de la feuille s'appellant Resultat
    Set sheetRe = appExcel.ActiveWorkbook.Sheets("Resultat")
     
     
    i = 1
    j = 1
     
    For i = 1 To 52345
            
            For j = 1 To 52345
             If Not sheetAD.ceels(i, A) Like sheetAS.Cells(j, A) Then 'pourquoi pas = ?
                 sheetRe.Cells(i, A) = sheetAD.ceels(i, A)
            End if  'Peut être faut il un endif ? OUI !
            Next j       
    Next i
    D'après ce que j'ai compris tu compares chaque cellule de ta feuille1 colonne A à TOUTES les cellules de la feuille2 de la colonne A.

    C'est bien le but ?

    Si ou alors :
    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
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim j As Integer
    Dim posteAD As Variant
    Dim PosteAS As Variant
    Dim Resultat As Variant
    Dim sheetAD As Excel.Worksheet
    Dim sheetAS As Excel.Worksheet
    Dim sheetVi As Excel.Worksheet
    Dim sheetRe As Excel.Worksheet
     
    Dim appExcel As Excel.Application
    Dim sheet As Excel.Worksheet
    'Récupération de la feuille s'appellant Feuille1
    Set sheetAD = appExcel.ActiveWorkbook.Sheets("Feuille1")
    'Récupération de la feuille s'appellant Feuille2
    Set sheetAS = appExcel.ActiveWorkbook.Sheets("Feuille2")
    'Récupération de la feuille s'appellant Feuille3
    Set sheetVi = appExcel.ActiveWorkbook.Sheets("Feuille3")'Ne sert pas normal ?
    'Récupération de la feuille s'appellant Resultat
    Set sheetRe = appExcel.ActiveWorkbook.Sheets("Resultat")
     
    i = 1
    j = 1
     
    For i = 1 To 52345
     
            For j = 1 To 52345
             If sheetAD.ceels(i, A) = sheetAS.Cells(j, A) Then 'Si égale a une cellule on quitte la boucle
                 Exit For
             end if
            Next j   
    	if j = 52345 then sheetRe.ceels(i,A) = SheetAD.cells(i,A)
    Next i

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Tu as parafaitement compris le projet! Quel talent, un jour j'y arriverais oh oui un jour...

    Non sinon je dois vous ennuyer 2 minutes de plus parce qu'en fait comme vous avez pu le voir, et c'était en desespoir de cause, j'avais affecté ce script à un boutton.
    Cependant en fait je n'ai pas besoin de cette fonction. La feuille 3 pour le moment ne servira pas, je n'ai pas encore créer l'extraction automatique pour cette page. (Mais bien vu de l'avoir vu )
    Par conséquent je Copie colle le code dans une Macro nommée Find:

    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 Find()
    Dim i As Integer
    Dim j As Integer
    Dim posteAD As Variant
    Dim PosteAS As Variant
    Dim Resultat As Variant
    Dim sheetAD As Excel.Worksheet
    Dim sheetAS As Excel.Worksheet
    Dim sheetVi As Excel.Worksheet
    Dim sheetRe As Excel.Worksheet
     
    Dim appExcel As Excel.Application
    Dim sheet As Excel.Worksheet
    'Récupération de la feuille s'appellant Feuille1
    Set sheetAD = appExcel.ActiveWorkbook.Sheets("Feuille1")
    'Récupération de la feuille s'appellant Feuille2
    Set sheetAS = appExcel.ActiveWorkbook.Sheets("Feuille2")
    'Récupération de la feuille s'appellant Feuille3
    Set sheetVi = appExcel.ActiveWorkbook.Sheets("Feuille3")'Ne sert pas normal ?
    'Récupération de la feuille s'appellant Resultat
    Set sheetRe = appExcel.ActiveWorkbook.Sheets("Resultat")
     
    i = 1
    j = 1
     
    For i = 1 To 52345
     
            For j = 1 To 52345
             If sheetAD.ceels(i, A) = sheetAS.Cells(j, A) Then 'Si égale a une cellule on quitte la boucle
                 Exit For
             end if
            Next j   
    	if j = 52345 then sheetRe.ceels(i,A) = SheetAD.cells(i,A)
    Next i
    J'obtients une erreur de code 91:
    Variable objet ou vartable de block with non définie.
    Pourant j'ai bien définie mes variables sheetAD, sheetAS, sheetVi et sheetRe

    Merci infiniement pour toutes l'aide que vous m'apporter. Vive l'entraide!!!

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous,

    Après avoir planché sur le mode Débug, j'ai finis par trouvé la solution.
    Le fichier étant gros j'ai fait trier les 2 liste pour gagner du temps. Mais je songe à faire une dictomie à l'occasion pour gagner en traitement.
    en tout cas voici le code final.
    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
     
    Sub Find()
    Dim i As Long
    Dim j As Long
    Dim h As Long
    Dim k As Long
    Dim EndCellFeuille1 As Long
    Dim EndCellFeuille2 As Long
     
     
    Sheets("Feuille2").Select
    EndCellFeuille2 = Feuille1Cell.SpecialCells(xlLastCell).Row
    Sheets("Feuille1").Select
    EndCellFeuille1 = Feuille1Cell.SpecialCells(xlLastCell).Row
     
    h = 2
    k = 2
    For i = 2 To EndCellFeuille2
     
            For j = k To EndCellFeuille1
             If Sheets("Feuille2").Cells(i, 1).Value = Sheets("Feuille1").Cells(j, 1).Value Then 'Si égale a une cellule on quitte la boucle
                 k = j
                 Exit For
             End If
            Next j
        If j = EndCellFeuille1 + 1 Then
            Sheets("Resultat").Cells(h, 1).Value = Sheets("Feuille2").Cells(i, 1).Value
            h = h + 1
        End If
    Next i
     
    End Sub

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

Discussions similaires

  1. script sh pour telnet sur windows 2003
    Par Carhod dans le forum Unix
    Réponses: 3
    Dernier message: 02/08/2008, 16h21
  2. Migration sunopsis v4/ODI problème du script jython pour FTP
    Par gusy78 dans le forum ODI (ex-Sunopsis)
    Réponses: 1
    Dernier message: 30/07/2008, 14h21
  3. SUNOPSIS/ODI problème de script Jython pour FTP
    Par bmontandon dans le forum ODI (ex-Sunopsis)
    Réponses: 2
    Dernier message: 01/10/2007, 14h02
  4. problème de script php pour revenir à la page précédente
    Par mandyben dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/09/2006, 10h12
  5. Réponses: 6
    Dernier message: 27/04/2006, 10h41

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