Nommer une cellule variable
Bonjour à tous,
Ca fait une journée que je cherche sur le net sans succès.
Je débute en vba.
J'aimerais savoir si il est possible de nommer la cellule active, d'y faire référence dans mes formules puis à la fin de la boucle renommer la nouvelle cellule active. Ainsi de suite jusqu'à la fin de la boucle.
Car aujourd'hui je suis obligé d'écrire une code très répétitif à cause de la position de cette cellule qui varie de 1 à chaque itération.
Merci d'avance.
Bonjour
Avec le fichier on y verrait plus clair
Merci de votre réponse rapide. Malheureusement je n'ai pas le droit de poster à partir de mon pc de travail, ni d'envoyer des fichiers. Car les règles de sécurité de mon entreprise me l'interdire.
A mieux je peux récrire le code à la main via mon téléphone.
On peut essayer comme ça.
Sub formule()
'
' formule Macro
'
'
ActiveCell.Offset(3, 0).Select
'Récupérer le statut de l'OF
ActiveCell.FormulaR1C1 = _
"=IFERROR(VLOOKUP(R[-3]C,'COM027 841'!C5:C10,6,FALSE),""Absent du COM027 841"")"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If ActiveCell.FormulaR1C1 = "Absent du COM027 841" Then
Exit Sub
End If
' Récupérer le statut de la première opération
ActiveCell.Offset(-1, 2).Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(IF(VLOOKUP(R[-2]C[-2]&""-""&R[-2]C,'COM027 841'!C1:C28,28,FALSE)=0,"""",VLOOKUP(R[-2]C[-2]&""-""&R[-2]C,'COM027 841'!C1:C28,28,FALSE)),""Non trouvé"")"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Si TE récupérer la date de pointage
If ActiveCell.FormulaR1C1 = "TE" Then
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
"=RIGHT((LEFT(VLOOKUP(R[-3]C[-2]&""-""&R[-3]C,'COM027 841'!C1:C30,30,FALSE),14)),6)"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(-1, 0).Select
End If
Si non TE récupérer le commentaire
If ActiveCell.FormulaR1C1 = "EC" Or ActiveCell.FormulaR1C1 = "ARR" Or ActiveCell.FormulaR1C1 = "" Then
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
"=IF(VLOOKUP(R[-3]C[-2]&""-""&R[-3]C,'COM027 841'!C1:C30,30,FALSE)=0,"""",VLOOKUP(R[-3]C[-2]&""-""&R[-3]C,'COM027 841'!C1:C30,30,FALSE))"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(-1, 0).Select
End If
'Si non trouvé
If ActiveCell.FormulaR1C1 = "Non trouvé" Then
ActiveCell.Offset(1, 0).Select
Selection.ClearContents
ActiveCell.Offset(-1, 0).Select
End If
Récupérer le statut de la seconde opération
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(IF(VLOOKUP(R[-2]C[-3]&""-""&R[-2]C,'COM027 841'!C1:C28,28,FALSE)=0,"""",VLOOKUP(R[-2]C[-3]&""-""&R[-2]C,'COM027 841'!C1:C28,28,FALSE)),""Non trouvé"")"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Si TE récupérer la date de pointage
If ActiveCell.FormulaR1C1 = "TE" Then
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
"=RIGHT((LEFT(VLOOKUP(R[-3]C[-3]&""-""&R[-3]C,'COM027 841'!C1:C30,30,FALSE),14)),6)"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(-1, 0).Select
End If
Si non TE récupérer le commentaire
If ActiveCell.FormulaR1C1 = "EC" Or ActiveCell.FormulaR1C1 = "ARR" Or ActiveCell.FormulaR1C1 = "" Then
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
"=IF(VLOOKUP(R[-3]C[-3]&""-""&R[-3]C,'COM027 841'!C1:C30,30,FALSE)=0,"""",VLOOKUP(R[-3]C[-3]&""-""&R[-3]C,'COM027 841'!C1:C30,30,FALSE))"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(-1, 0).Select
End If
Si non trouvé
If ActiveCell.FormulaR1C1 = "Non trouvé" Then
ActiveCell.Offset(1, 0).Select
Selection.ClearContents
ActiveCell.Offset(-1, 0).Select
End If
' Récupérer le statut de la Troisième opération
ActiveCell.Offset(-2, 1).Select
If ActiveCell.FormulaR1C1 = "Ordre suivant" Then
Exit Sub
End If
ActiveCell.Offset(2, 0).Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(IF(VLOOKUP(R[-2]C[-4]&""-""&R[-2]C,'COM027 841'!C1:C28,28,FALSE)=0,"""",VLOOKUP(R[-2]C[-4]&""-""&R[-2]C,'COM027 841'!C1:C28,28,FALSE)),""Non trouvé"")"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Si TE récupérer la date de pointage
If ActiveCell.FormulaR1C1 = "TE" Then
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
"=RIGHT((LEFT(VLOOKUP(R[-3]C[-4]&""-""&R[-3]C,'COM027 841'!C1:C30,30,FALSE),14)),6)"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(-1, 0).Select
End If
'Si non TE récupérer le commentaire
If ActiveCell.FormulaR1C1 = "EC" Or ActiveCell.FormulaR1C1 = "ARR" Or ActiveCell.FormulaR1C1 = "" Then
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
"=IF(VLOOKUP(R[-3]C[-4]&""-""&R[-3]C,'COM027 841'!C1:C30,30,FALSE)=0,"""",VLOOKUP(R[-3]C[-4]&""-""&R[-3]C,'COM027 841'!C1:C30,30,FALSE))"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(-1, 0).Select
End If
'Si non trouvé
If ActiveCell.FormulaR1C1 = "Non trouvé" Then
ActiveCell.Offset(1, 0).Select
Selection.ClearContents
ActiveCell.Offset(-1, 0).Select
End IfVoila un bout de code, qui se répète 40 fois pour le moment. Je ne peux pas faire de boucle à cause de : (R[-2]C[-2]. A chaque fois que je change d'opération je dois changer le-2 en-3 par exemple car je fais toujours référence à la même cellule. Je ne peux pas faire de boucle à cause de : (R[-2]C[-2].
A priori en remplaçant le "-2" en variable ça devrait devenir possible
J'ai regardé le code et là sans fichier ni explications pour comprendre ce que c'est censé faire je passe mon tour.
Désolé.
Oui je sais que c'est pas très lisible.
Cette macro sert à mettre à jour à partir d'un autre onglet l'avancement d'opération au sein d'un ordre de fabrication. Un of est composé de 3 ou 80 opérations. J'utilise donc la cellule contenant le numéro d'of que je concatene avec le numéro d'opération. Ce qui me donne ma clé pour la recherche v.
L numéro d'opération est toujours 2 cellule au dessus de la cellule contenant la formule de la recherche v. Mais la cellule contenant le numéro d'of est toujours deux cellules au dessus de la cellule contenant la formule mais au niveau des colonnes pour la première opération elle est à-2 pour la seconde à-3....etc
Comment on créer une variable ? Et comment on l'incorpore dans une formule ?
Avant de pouvoir aller plus loin quelques observations
ActiveCell.FormulaR1C1 = _
"=IFERROR(VLOOKUP(R[-3]C,'COM027 841'!C5:C10,6,FALSE),""Absent du COM027 841"")"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If ActiveCell.FormulaR1C1 = "Absent du COM027 841" Then
Exit Sub
End IfCa ça ne peut pas marcher. Vous demander de renvoyer la valeur qui se trouve en colonne 6 d'une plage qui ne comporte qu'une seule colonne (C5:C10)
Vous écrivez dans la cellule une formule que vous écrasez aussitôt. Pourquoi ne pas écrire directement la valeur
ActiveCell = Application.IfError(Application.VLookup(ActiveCell.Offset(-3, 0).Value, _
Sheets("COM027 841").Range("C5:I10"), 6, 0), "Absent du COM027 841")
If ActiveCell.FormulaR1C1 = "Absent du COM027 841" Then Exit SubComment sont structurées vos données?
Sont elles ou peuvent elles être sous forme de tableau structuré?
Le décalage des colonnes semble se faire vers la gauche.
Bonjour,
Oui mon code est vraiment bancal car je suis débutant et que j'utilise l'enregistreur macro.
Vous dites que ça ne peut pas fonctionner or ça fonctionne bien chez moi. Les valeurs sont bien retournées.
Voic comment mon fichier est organisé :
Le numéro d'of apparaît une fois dans la première colonne, le nombre d'opération est variable comme vous pouvez le voir (en orange). Les cases à renseigner sont les grises. Donc à chaque fois que je change d'opération le numéro d'of s'éloigne d'une colonne.
Bonjour
J'ai reproduit votre tableau et je commence à mieux comprendre.
Dans le même esprit pourriez vous faire une image du résultat attendu?
Bon ben après avoir passé un bon moment sur votre problème j'arrive à la conclusion que sans le fichier c'est impossible de s'y retrouver dans le code. Du moins pour moi. Donc, à moins que vous ne trouviez une solution pour poster le fichier , j'abandonne.
Désolé
Merci de votre patience.
J ne peux pas désolé.
J vais essayer de continuer à creuser merci encore.