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 If
Voila 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 If

Ca ç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 Sub

Comment sont structurées vos données?

capture3

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é :

partie 3

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.

Rechercher des sujets similaires à "nommer variable"