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 :

Besoins d'aide avec fonction vlookup dans une boucle et fonction memoire


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Par défaut Besoins d'aide avec fonction vlookup dans une boucle et fonction memoire
    Bonjour, cela fait une semaine que j'essaye de me former au VBA avec les supports que je trouve sur internet, je suis vraiment débutant, et je me permets de poster car j'aurais besoins d'un peux d'aide, je vous explique mon problème:
    J'ai un tableau ou je dois consigner certain renseignement lors de la réalisation de contrôle de dimensions, dans la colonne H de ce tableau j'ai insérer un choix de norme, si au premier contrôle cette norme est réglé sur NF par exemple, j'ai essayer de créer une macro qui me remplis certaines case pour chaque ligne de contrôle si on rentre une date, et qui inscrit aussi une valeur dans des cases plus loin dans mon tableau pour servir de mémorisation, en effet je souhaite que si lors du contrôle 1 la norme est NF, si 6 mois après on change de Normes dans la colonne H, il faut que le contrôle 2 se remplisse avec la nouvelle normes et que la valeurs précédemment rentrées dans le contrôles 1 ne bouge pas, sauf si on vide manuellement la mémoire correspondante (les cases du bout de mon tableau que j'ai nommé mémoire, an cas d'erreur).J'aurais aussi besoins que cette macro s’exécute lorsque l'on remplis une des cases de date du contrôle et à l'enregistrement du fichier, mais je n'y arrive pas malgré plusieurs essais.
    Je vous faite une copie de mon code en dessous (je viens de voir qu'il ne fallait pas joindre de fichier), si une âme charitable veut bien m'aider ce serait sympa


    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Sub Macro1()
    '
    ' Macro1 Macro
    ' 
    'Private NombreDeLigneDuTableau As Integer
    'Private PremiereLigneDuTAbleau As Integer
    NombreDeLigneDuTableau = Sheets("VP 2017").Range("BC1").Value 
    PremiereLigneDuTableau = Sheets("VP 2017").Range("BC2").Value 
    For i = PremiereLigneDuTableau To PremiereLigneDuTableau + NombreDeLigneDuTableau
    If Not IsEmpty(Cells(i, 16)) Then 
    Cells(i, 56) = 1 
    End If
    If Not IsEmpty(Cells(i, 22)) Then 
    Cells(i, 57) = 1 
    End If
    If Not IsEmpty(Cells(i, 28)) Then 
    Cells(i, 58) = 1 
    End If
    If Not IsEmpty(Cells(i, 34)) Then 
    Cells(i, 59) = 1 
    End If
    If Not IsEmpty(Cells(i, 40)) Then 
    Cells(i, 60) = 1 
    End If
    If Not IsEmpty(Cells(i, 46)) Then 
    Cells(i, 61) = 1 
    End If
    If Cells(i, 56) = 1 Then 
    With Sheets("VP 2017") 
    .Cells(i, 19) = Application.WorksheetFunction.VLookup(Cells(i, 8), Sheets("VP 2017").Range("BW5:BX7"), 2, False) 
    End With
    Cells(i, 56) = 2 
    Else
    GoTo Li35 
    End If
    If Cells(i, 57) = 1 Then 
    With Sheets("VP 2017") 
    .Cells(i, 25) = Application.WorksheetFunction.VLookup(Cells(i, 8), Sheets("VP 2017").Range("BW5:BX7"), 2, False) 
    End With
    Cells(i, 57) = 2 
    Else
    GoTo Li43 
    End If
    If Cells(i, 58) = 1 Then 
    With Sheets("VP 2017") 
    .Cells(i, 31) = Application.WorksheetFunction.VLookup(Cells(i, 8), Sheets("VP 2017").Range("BW5:BX7"), 2, False) 
    End With
    Cells(i, 58) = 2 
    Else
    GoTo Li51 
    End If
    If Cells(i, 59) = 1 Then 
    With Sheets("VP 2017") 
    .Cells(i, 37) = Application.WorksheetFunction.VLookup(Cells(i, 8), Sheets("VP 2017").Range("BW5:BX7"), 2, False) 
    End With
    Cells(i, 59) = 2 
    Else
    GoTo Li59 
    End If
    If Cells(i, 60) = 1 Then 
    With Sheets("VP 2017") 
    .Cells(i, 43) = Application.WorksheetFunction.VLookup(Cells(i, 8), Sheets("VP 2017").Range("BW5:BX7"), 2, False)
    End With
    Cells(i, 60) = 2 
    Else
    GoTo Li67 
    End If
    If Cells(i, 61) = 1 Then 
    With Sheets("VP 2017") 
    .Cells(i, 49) = Application.WorksheetFunction.VLookup(Cells(i, 8), Sheets("VP 2017").Range("BW5:BX7"), 2, False) 
    End With
    Cells(i, 61) = 2 
    Else
    GoTo Li75 
    End If
    Next
    End Sub

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Illisible ‼     Merci de lire et d'appliquer les règles du forum concernant la publication d'un code !

    Sinon utiliser déjà une cellule pour paramétrer la formule.
    Une fois le résultat attendu obtenu, c'est facile pour l'utiliser en VBA :

    Fonctions Excel à la loupe : N°1 - RECHERCHEV()

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Par défaut Bonsoir, merci de m'avoir répondu
    Bonsoir, en effet je viens de lire le fonctionnement du bouton code, je vais modifier mon poste tout de suite.

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    C'est quoi ces GoTo sans labels ?

    Pour essayer de comprendre ton code, je l'ai un peu nettoyé.
    Histoire que ça ne soit pas perdu, je le mets ici (nonobstant les GoTo dont je n'ai pas compris l'utilité, je suppose qu'ils servent à éviter les autres If)
    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 Macro1()
    	Dim Res As Variant
     
    	With Sheets("VP 2017") 
    		For i = .Range("BC2").Value To .Range("BC2").Value + .Range("BC1").Value
    			If Not IsEmpty(Cells(i, 16)) Then Cells(i, 56) = 1 
    			If Not IsEmpty(Cells(i, 22)) Then Cells(i, 57) = 1 
    			If Not IsEmpty(Cells(i, 28)) Then Cells(i, 58) = 1 
    			If Not IsEmpty(Cells(i, 34)) Then Cells(i, 59) = 1 
    			If Not IsEmpty(Cells(i, 40)) Then Cells(i, 60) = 1 
    			If Not IsEmpty(Cells(i, 46)) Then Cells(i, 61) = 1 
     
    			Res = Application.WorksheetFunction.VLookup(Cells(i, 8), .Range("BW5:BX7"), 2, False) 
    			Select Case 1
    			Case Cells(i, 56)
    				.Cells(i, 19) = Res 
    				Cells(i, 56) = 2 
    			Case Cells(i, 57)
    				.Cells(i, 25) = Res 
    				Cells(i, 57) = 2 
    			Case Cells(i, 58)
    				.Cells(i, 31) = Res 
    				Cells(i, 58) = 2 
    			Case Cells(i, 59)
    				.Cells(i, 37) = Res 
    				Cells(i, 59) = 2 
    			Case Cells(i, 60)
    				.Cells(i, 43) = Res
    				Cells(i, 60) = 2 
    			Case Cells(i, 61)
    				.Cells(i, 49) = Res 
    				Cells(i, 61) = 2 
    			End Select
    		Next i
    	End With
    End Sub

  5. #5
    Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Par défaut Merci beaucoup
    Bonjour, merci beaucoup de votre aide, comme dit au dessus je début (vraiment) en VBA et c'est ma première Macro, je ne connais pas toutes les fonctions, mais en effet votre code à l'air plus simple, je vais surtout m'interesser à "Range" que je ne connais pas et "Res", en tout cas un grand grand merci à vous, j'espere qu'avec de la pratique je pourrais faire de même.

  6. #6
    Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Par défaut Merci, mais encore un poil besoins d'aide
    Bonjour, j'ais essayé le code mais malheureusement il ne fonctionne pas au niveau de la ligne Vlookup, je tombe sur une fleche jaune dans l'editeur VBA et ça bloque, du coup j'ais essayé de supprimer RES pour faire directement mais pas mieux, je ne vois pas trop d'ou ça viens?

    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 Test()
     
        With Sheets("VP 2017")
            For i = .Range("BC2").Value To .Range("BC2").Value + .Range("BC1").Value
                If Not IsEmpty(Cells(i, 16)) Then Cells(i, 56) = 1
                If Not IsEmpty(Cells(i, 22)) Then Cells(i, 57) = 1
                If Not IsEmpty(Cells(i, 28)) Then Cells(i, 58) = 1
                If Not IsEmpty(Cells(i, 34)) Then Cells(i, 59) = 1
                If Not IsEmpty(Cells(i, 40)) Then Cells(i, 60) = 1
                If Not IsEmpty(Cells(i, 46)) Then Cells(i, 61) = 1
     
                Select Case 1
                Case Cells(i, 56)
                    .Cells(i, 19) = Application.WorksheetFunction.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                    Cells(i, 56) = 2
                Case Cells(i, 57)
                    .Cells(i, 25) = Application.WorksheetFunction.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                    Cells(i, 57) = 2
                Case Cells(i, 58)
                    .Cells(i, 31) = Application.WorksheetFunction.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                    Cells(i, 58) = 2
                Case Cells(i, 59)
                    .Cells(i, 37) = Application.WorksheetFunction.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                    Cells(i, 59) = 2
                Case Cells(i, 60)
                    .Cells(i, 43) = Application.WorksheetFunction.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                    Cells(i, 60) = 2
                Case Cells(i, 61)
                    .Cells(i, 49) = Application.WorksheetFunction.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                    Cells(i, 61) = 2
                End Select
            Next i
        End With
    End Sub

Discussions similaires

  1. [XL-2007] Problème avec If dans une boucle
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/06/2011, 08h48
  2. Problème avec boutons dans une boucle
    Par CHAP26 dans le forum Flash
    Réponses: 2
    Dernier message: 03/06/2008, 14h28
  3. thread avec return dans une boucle
    Par Tanebisse dans le forum Général Java
    Réponses: 19
    Dernier message: 19/05/2008, 17h42
  4. [VBA-E] pb avec offset dans une boucle
    Par davidlb dans le forum Excel
    Réponses: 4
    Dernier message: 01/04/2007, 09h15
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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