Fonction Vlookup et memoire dans un fichier
Bonjour, je débute en excel et j'ai besoins de faire une macro qui s’exécute au remplissage d'une case et qui rempli automatiquement les cases dans une autre colonne puis qui change une case qui sert de mémoire pour effectuer cette recherche qu'une seule fois par enregistrement, en effet la fréquence pouvant changer entre deux enregistrements, la case fréquence peux être modifié manuellement, mais les enregistrements précédent doivent rester enregistrés avec la norme du jour de leur enregistrement, malheureusement aprs plusieurs essais je n'y arrive pas et je bloque , je joint le fichier si une âme charitable veux bien m'aider SVP, je precise que je n'ai pas encore mis la fonction de démarrage de la macro au remplissage d'une case je n'y suis pas arrivé.
Bonjour,
proposition d'adaptation de ton code
Sub NormeAutoVP2017()
'
' Remplissage automatique des normes pour chaque ligne de chaque enregistrement si une date est rentrée
' sur la case date de chaque enregistremen et et mémorisation avec un 2 dans les cases des colonnes BD à BI
' que la norme a été réglée pour chaque enregistrement pour qu'elle ne soit pas modifiée plus tard lors de l'exécution
' de la macro pour les enregistrements futurs si on change la valeur dans la colonne H sauf si on remet la mémoire à 0
' manuellement en cas de besoin
Dim i As Long, col As Long
With Sheets("VP 2017")
For i = .Range("BC2").Value To .Range("BC2").Value + .Range("BC1").Value
If .Cells(i, 8) <> "" Then
norme = Application.WorksheetFunction.VLookup(.Cells(i, 8), .Range("BX5:BY7"), 2, False)
End If
For col = 1 To 6
If Not IsEmpty(.Cells(i, 10 + col * 6)) Then
If .Cells(i, 55 + col) <> 2 Then 'mise à jour déjà effectuée ?
.Cells(i, 55 + col) = 2
.Cells(i, 13 + col * 6) = norme
End If
End If
Next col
Next i
End With
End SubBonjour, merci de m'avoir répondu, malheureusement votre code ne fonctionne pas, et je ne peu pas tenter de le corriger car de plus je ne le comprends pas.
Bonjour,
voici une adaptation de ton code (écriture moins simplifiée par rapport à ma proposition précédente). sur base de ce que j'ai compris qu'il fallait faire.
à savoir
parcourir toutes les lignes (ligne 6 à 206)
pour chaque ligne
parcourir les colonnes 16,22,28,34,40,46
si ces colonnes ne sont pas vides et qu'il n'y a pas un 2 dans la colonne 56, puis 57, ...
mettre la norme en colonne 19, puis 23, ...
mettre 2 en colonne 56, puis 57, ... pour indiquer que la mise à jour a été faite
c'est ce que font les 2 codes que j'ai proposés (à savoir le code ci-dessus et le code ci-dessous).
Sub NormeAutoVP2017()
'
' Remplissage automatique des normes pour chaque ligne de chaque enregistrement si une date est rentrée sur la case date de chaque enregistremenet et mémorisation avec un 2 dans les cases des colonnes BD à BI que la normes à été réglé pour chaque enregistrement pour qu'elle ne soit pas modifiée plus tard lors de l'execution de la macro pour les enregistrement futurs si on change la valeur dans la colonne H sauf si on remets la mémoire à 0 manuellement en cas de besoins
Dim i As Integer
With Sheets("VP 2017")
For i = .Range("BC2").Value To .Range("BC2").Value + .Range("BC1").Value
If Not IsEmpty(Cells(i, 16)) And .Cells(i, 56) <> 2 Then
.Cells(i, 19) = Application.WorksheetFunction.VLookup(.Cells(i, 8), .Range("BX5:BY7"), 2, False)
.Cells(i, 56) = 2
End If
If Not IsEmpty(Cells(i, 22)) And .Cells(i, 57) <> 2 Then
.Cells(i, 25) = Application.WorksheetFunction.VLookup(.Cells(i, 8), .Range("BX5:BY7"), 2, False)
.Cells(i, 57) = 2
End If
If Not IsEmpty(Cells(i, 28)) And .Cells(i, 58) <> 2 Then
.Cells(i, 31) = Application.WorksheetFunction.VLookup(.Cells(i, 8), .Range("BX5:BY7"), 2, False)
.Cells(i, 58) = 2
End If
If Not IsEmpty(Cells(i, 34)) And .Cells(i, 59) <> 2 Then
.Cells(i, 37) = Application.WorksheetFunction.VLookup(.Cells(i, 8), .Range("BX5:BY7"), 2, False)
.Cells(i, 59) = 2
End If
If Not IsEmpty(Cells(i, 40)) And .Cells(i, 60) <> 2 Then
.Cells(i, 43) = Application.WorksheetFunction.VLookup(.Cells(i, 8), .Range("BX5:BY7"), 2, False)
.Cells(i, 60) = 2
End If
If Not IsEmpty(Cells(i, 46)) And .Cells(i, 61) <> 2 Then
.Cells(i, 49) = Application.WorksheetFunction.VLookup(.Cells(i, 8), .Range("BX5:BY7"), 2, False)
.Cells(i, 61) = 2
End If
Next i
End With
End SubOUi, merci en effet j'ai réussis à la faire fonctionner, il fallait juste enlever :".worksheetfunction" dans la ligne Vlookup et ça fonctionne bien, maintenat il faut que je trouve comment lancer la macro automatiquement quand on rendre une date dans unes des colonnes de dates.