Tableur décalage en fonction d'un critère

Bonjour à tous,

Voici mon problème et je ne sais le résoudre.

Je joins mon fichier et donc :

J'aimerais que lorsque je remplis au fur et à mesure les cellules de la colonne C, le tableau renommer En_crs descend les formules de la colonne U jusqu'à X.(je ne peux pas modifier le tableau de A jusqu' à U)

La solution me permettrait de ne pas définir une plage En_crs trop grande et dés que je saisirais "C" dans les cellules de la colonne C, le tableau En_crs modifie sa plage de données en conséquence.

Merci d'avance pour votre aide,

16fichier-joint.xlsx (74.08 Ko)

Bonsoir,

Merci de rectifier l'erreur dans la formule de la colonne V et joins le fichier à nouveau. Et puis pour tester, un tableau depourvu de données n'est pas idéal.

Bonjour désolé pour l’erreur sur la formule,

J'ai modifié sur le fichier joint,

Vous avez un idée?,

Merci d'avance,

Cordialement,

14fichier-joint.xlsx (76.32 Ko)

Re,

Met le code suivant dans le module de la feuille et teste :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("C:C"), Target) Is Nothing Then
        Range(Target.Offset(-1, 18), Target.Offset(-1, 21)).Copy
        Target.Offset(0, 18).PasteSpecial xlPasteFormulas
        Application.CutCopyMode = xlCopy
    End If
End Sub

Cela fonctionne mais si je mets deux C dans les cellules B220 ET B221 la formule EN X221 met différend de valeur,

Tu peux me dire pourquoi stp,

En tout cas cool le code si je règle ce problème

Merci d'avance,

Re,

Je ne comprends pas ta question. Rejoins le fichier à nouveau avec le résultat que tu attends.

Je te joins le fichier avec l'erreur généré,

Merci pour ton retour,

Cordialement,

10fichier-joint.xlsm (84.37 Ko)
15fichier-joint.xlsm (84.37 Ko)

Je rejoins le fichier car le précédent ne produisait pas la même erreur :

A chaque fois que je rentre une valeur dans les cellules de la colonne C ("P";"C";"S"....) je souhaiterais que les colonnes U à X descendent la formule et que ma plage de données de la table En_crs soit modifié,

Merci pour ton aide et si tu as compri ce que je souhaitais,

Cordialement,

14fichier-joint.xlsm (84.25 Ko)

Bonjour,

Un essai :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n%
    If Not Intersect(Target, Me.Columns("C")) Is Nothing Then
        n = Target.Row - 5
        With Me.ListObjects(1)
            If .DataBodyRange.Rows.Count < n Then
                Do Until .DataBodyRange.Rows.Count = n
                    .ListRows.Add
                Loop
            End If
        End With
    End If
End Sub

Cordialement.

Bonjour,

Merci pour votre retour, cela fonctionne parfaitement

Pourriez vous m'expliquer le code utilisé (que je pourrais ainsi adapté dans d'autres fichiers).

Merci d'avance,

Cordialement,

On aligne simplement le nombre de lignes de données du Tableau en fonction de la ligne d'insertion en C. Les données du tableau commencent ligne 6, on applique donc un correctif de -5 pour comparer avec le nombre de lignes de données du tableau, et on ajoute des lignes jusqu'à atteindre l'égalité.

Merci pour cette explication, le tableau en question est nommé dans la macro : With Me.ListObjects(1) c'est ça?

Comment la macro reconnait que c'est mon tableau nommé En_crs? Serait grâce au fait qu'on colle ce code uniquement sur la feuille engagements?

J'ai une autre question qui me vient en tête, si dans l'hypothèse ou un deuxième tableau viendrai a être nommé , comment pourrais je l’inclure ou l'exclure de la macro?

Merci encore pour cette solution que me va très bien

Il n'y a qu'un tableau sur la feuille... Un autre aurait 2 comme index... Mais tu peux utiliser le nom à la place de l'index.

Comment remplace t-on le nom à la place de l'index ?

J'ai réussi à l'appliquer avec deux tableaux en recopiant ton bloc de code à partir de WIth à End with et en remplaçant (1) par (2).

Merci pour ton retour,

Cordialement,

Re-Bonjour Mr Ferrand,

J'ai essayé d'appliquer le code que tu as écris sur un autre onglet nommé "GD Livre" (ci-joint), il fonctionne mais uniquement si je rajoute dans les cellules de la colonne F un élément ligne par ligne.(comme demandé précédemment donc pas de soucis)

Cependant pour ce fichier, je copie-colle une extraction onglet "Celulles à coller sur GD Livre" donc je ne saisis pas et la plage de données ne se modifie pas.

Aurais tu une solution à me proposer? Devra t-on modifier le code?

Merci d'avance,

Cordialement,

Bonjour,

Je ne vois pas le rapport entre ce fichier et le précédent. Ni ce que tu veux obtenir dans celui-ci.

Il faut indiquer le résultat à obtenir, à partir de quelle situation de départ... de façon clairement ce qui est à réaliser.

Cordialement.

Bonjour merci pour ton retour, je vais tenter d'expliquer plus clairement ce que je souhaiterais

La table "Réel" sur l'onglet GD LIVRE est défini sur la plage "=$A$4:$E$6".

Je souhaiterais que cette table se définisse de "$A$4:$E$"derniere ligne ou la colonne F serait non vide"

Cette colonne F :

  • serait renseigné lors de mon copié collé des éléments de l'onglet "Cellules a coller sur GD Livre" colonne A à X,
  • et correspondrait à la colonne A de l'onglet " Cellules a coller sur GD Livre"

Sur le même principe du fichier précédent ou lorsque je rentre une donnée dans la cellule de la colonne "C" la plage de données s'agrandissait.

Merci pour ton aide,

Cordialement,

Ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n%
    If Not Intersect(Target, Me.Columns("F")) Is Nothing Then
        n = Target.Row + Target.Rows.Count - 5
        With Me.ListObjects(1)
            If .DataBodyRange.Rows.Count < n Then
                Do Until .DataBodyRange.Rows.Count = n
                    .ListRows.Add
                Loop
            End If
        End With
    End If
End Sub

Milles merci,

C'est exactement ce que je voulais,

Le code est sensiblement le même que le précédent, peux tu me dire le principal changement?

Cordialement,

Quand tu fais un collage qui occupe plusieurs lignes, c'est la dernière ligne qu'il faut considérer.

.Row renvoie la première ligne de Target.

.Rows.Count en renvoie le nombre.

La somme des deux -1 fournira la dernière ligne.

On doit ôter 4 à cette ligne pour le décalage tableau.

Donc : n = Target.Row + Target.Rows.Count -5

est l'élément de comparaison avec le nombre de lignes de données du tableau.

Cordialement.

Rechercher des sujets similaires à "tableur decalage fonction critere"