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

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

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

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    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 sénior
    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
    Points : 18 677
    Points
    18 677
    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, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

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

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    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 sénior 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
    Points : 32 866
    Points
    32 866
    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
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

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

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

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    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
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    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

  7. #7
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut


    Bonjour,

    retirer .WorksheetFunction afin de juste conserver Application.VLookup
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

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

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Merci de la réponse mais malheureusement toujours pas ça
    JE vous remercie d'avoir regardé, j'ai essayé mais ça ne fait pas ce que je veux, si je change la valeur de la colonne 8, la fonction Vlookup ce relance sur la colonne dont la date est déja rempli et dont la case mémoire correspondante est passé à 2 et ne devrais pas, et malheureusement ça ne marche pas sur les colonnes suivantes, je joints la modif de code, je vous proposerez bien le fichier mais je crois savoir que c'est interdit sur le forum. En fait j'ai une norme qui peu changer en colonne 8, puis sur les colonnes 16,22,28,34,40 et 46, a chaque fois que l'on rentre une date de contrôle, je cherche à effectuer la fonction VLookup sur la case de la ligne correspondante 3 colonne à coté , colonne 19 si une date dans la colonne 16, colonne
    25 si une date dans la colonne 22 etc..., en même temps lorsqu'une date est rentrée dans une des colonnes 16,22,28,34,40 et 46, la macro rentre la valeur 1 dans les colonnes 56,57,58,59,60 et 61 qui servent de mémoire, et la fonction Vlookup ne se lance que si cette mémoire est à 1, une fois que la macro s'est executée sur une des cases elle inscrit la valeur 2 dans la mémoire correspondante, pour qu'au prochain lancement la valeurs déjà enregistrée dans les colonnes 19,25,31,37,43 et 49 ne change pas même si on modifie la valeur dans la colonne 8 si les cases mémoire ont une valeur 2, sauf si on les remets manuellement à 0.

    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
      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
     
                        If Cells(i, 56) = 1 Then
                            .Cells(i, 19) = Application.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                            Cells(i, 56) = 2
                        If Cells(i, 57) = 1 Then
                            .Cells(i, 25) = Application.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                            Cells(i, 57) = 2
                        If Cells(i, 58) = 1 Then
                            .Cells(i, 31) = Application.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                            Cells(i, 58) = 2
                        If Cells(i, 59) = 1 Then
                            .Cells(i, 37) = Application.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                            Cells(i, 59) = 2
                        If Cells(i, 60) = 1 Then
                            .Cells(i, 43) = Application.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                            Cells(i, 60) = 2
                        If Cells(i, 61) = 1 Then
                            .Cells(i, 49) = Application.VLookup(Cells(i, 8), .Range("BX5:BY7"), 2, False)
                            Cells(i, 61) = 2
                     Next i
                End With
            End Sub

  9. #9
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Delludo Voir le message
    si je change la valeur de la colonne 8, la fonction Vlookup ce relance sur la colonne dont la date est déja rempli et dont la case mémoire correspondante est passé à 2 et ne devrais pas,
    Etant donné que tu ne dis pas à la macro qu'elle ne doit pas toucher aux cellules qui sont passées à "2", elle ne peut pas le deviner (et nous non plus).

    J'ai l'impression que ton problème ne vient pas de l'instruction VLookup mais de l'algorithme de ton code.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

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

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

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Merci de votre réponse
    Enn effet je pensais a tord que la fonction Vlookup ne exécuterais que si la valeur de la cellule était à 1 comme demandé au dessus de la fonction, c'est pour cela que juste après je passais la valeur à 2 pour que cela ne le fasse plus mais à priori ce n'est pas la bonne méthode.

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