Appel de cellule dans un OFFSET

Bonjour

Je souhaite créer un tableau récapitulatif d'autre tableau placé dans d'autres sheets. Pour cela je déclare en range l'avant dernière ligne de chacun de ces tableaux, chacun fait une ligne et 12 colonne, mais la position verticale de ce range change.

capture

Du coup dans VBA je tape ce code pour récupérer l'avant dernière ligne de chaque sheets pour les mettre dans un tableau et faire un recap.

i = 4
Do
    a = Cells(i, 4).Value
    Sheets("charge " & a).Activate
    b = "depart" & a
    c = "arrivee" & a
    d = "charge" & a
    x = Application.CountA(Range("C:C")) + 3
    ActiveWorkbook.Names.Add Name:=b, RefersToR1C1:="=OFFSET(d!RxC6,0,0,1,12)"
    ActiveWorkbook.Names.Add Name:=c, RefersToR1C1:="=OFFSET(charge_groupe!RiC3,0,0,1,12)"
    Sheets(d).Range(b).Value = Sheets("charge_groupe").Range(c).Value
    i = i + 1
Loop Until IsEmpty(Cells(i, 4))

Mais bien sur je n'arrive pas a faire varier les cellule RxC6 et RiC3 des OFFSET du coup le code ne fonctionne pas.

Je viens donc chercher votre aide.

Bonjour,

Si l'objectif est d'utiliser le contenu de tes variables, il faut les sortir des guillemets. La présence de guillemets est réservé au texte, qu'Excel ou VBA n'interprètent donc pas.

Un exemple :

"=OFFSET(d!RxC6,0,0,1,12)"
'devient
"=OFFSET(" & d & "!R" & x & "C6,0,0,1,12)"

Merci Pedro22

J'ai bien essayé ta modification mais malheureusement j’obtiens un message d'erreur:

erreur de compilation :

Attendu : fin d'instruction

Merci Pedro22

J'ai bien essayé ta modification mais malheureusement j’obtiens un message d'erreur:

erreur de compilation :

Attendu : fin d'instruction

Peux tu joindre le code complet que tu as testé ?

i = 4
Do
    a = Cells(i, 4).Value
    Sheets("charge " & a).Activate
    b = "depart" & a
    c = "arrivee" & a
    d = "charge" & a
    x = Application.CountA(Range("C:C")) + 3
    ActiveWorkbook.Names.Add Name:=b, RefersToR1C1:="=OFFSET("&d&"!R"&x&"C6,0,0,1,12)"
    ActiveWorkbook.Names.Add Name:=c, RefersToR1C1:="=OFFSET(charge_groupe!R"&i&"C3,0,0,1,12)"
    Sheets(d).Range(b).Value = Sheets("charge_groupe").Range(c).Value
    i = i + 1
Loop Until IsEmpty(Cells(i, 4))

Ajoute des espaces autours des "&".

A part ça je ne vois pas d'erreur dans le code, sur quelle ligne se présente le message d'erreur ?

les deux avec les OFFSET

ça a marché avec les espaces.

Maintenant j'ai une erreurs sur la ligne d'en dessous.

Que cherche tu exactement à faire ? Tes plages nommées b et c correspondent à plusieurs cellule je crois, donc cette instruction ne peux fonctionner :

Sheets(d).Range(b).Value = Sheets("charge_groupe").Range(c).Value

Pourquoi passer par des plages nommées ?

Les longueurs et largeurs des plage que je veut copier sont toujours les memes.

Mais pas au même endroit. Par exemple sur la feuille 1 ce sera en ligne 2, sur la feuille 2 en ligne 5

Pourquoi ne pas faire directement des copier coller ?

Voilà un code à tester d'après ce que j'ai compris (mais sans fichier sous les yeux, ce n'est pas évident !) :

Sub Test()

Dim i As Long, a As Integer, b As String, x As Long

For i = 4 To Range("D" & Rows.Count).End(xlUp).Row
    a = Cells(i, 4).Value
    b = "charge" & a
    With Sheets(b)
        x = Application.CountA(.Range("C:C")) + 3
        .Range("E" & x & ":P" & x + 1).Value = Sheets("charge_groupe").Range("C" & i & ":N" & i + 1).Value
    End With
Next i

End Sub

J'ai réussi, mon erreur était un espace que j'avais oublier dans un nom.

il y a pas mal de copier coller a faire. c'est plus rapide avec une macro.

Rechercher des sujets similaires à "appel offset"