XL 2016 Prendre des valeurs en colonne lorsque l'on tire la formule vers la droite

Cassandre16

XLDnaute Nouveau
Bonjour,

J'ai dans une feuille excel des valeurs inscrites en colonne de cette manière:
Fournisseur 1
Fournisseur 2
...
Fournisseur N

Dans une autre feuille de calcul, il faudrait que je retrouve ces fournisseurs en ligne, de cette manière:
Fournisseur 1 Fournisseur 2 ... Fournisseur N

Le but n'est pas de faire un copier coller car j'aimerais que lorsque les valeurs en colonne sont modifiées, les valeurs en ligne sur l'autre feuille le soient aussi.
J'ai essayé la fonction décaler mais je ne parviens pas à la faire fonctionner.

Je vous remercie par avance pour votre aide!
Bonne journée
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Cassandre,

bienvenue sur le site XLD ! :)

sans vouloir jouer les Cassandre, tu risques fort de ne pas avoir beaucoup de réponses si tu ne joins pas de fichier Excel exemple (sans données confidentielles) ! 😭 pour faire cela, tu pourras utiliser le bouton "Joindre un fichier" qui est situé en bas à gauche d'un post en cours d'édition.

bonne chance ! 🍀

soan
 

soan

XLDnaute Barbatruc
Inactif
@Cassandre16

c'est bon, c'est plus la peine de joindre un fichier ; je t'ai trouvé une solution ! 😊

* ouvre le fichier joint ; tu peux voir que "Feuil2" est vide.

* va sur "Feuil1" ; c'est le même désert : vide aussi ! 😭

* en A1, tape : "Fournisseur 1" ; va voir sur "Feuil2", puis revient sur "Feuil1".

* en A2, tape : "Fournisseur 2" ; va voir sur "Feuil2", puis revient sur "Feuil1".

* en A3, tape : "Fournisseur 3" ; va voir sur "Feuil2", puis revient sur "Feuil1".

* en A4, tape : "Fournisseur 4" ; va voir sur "Feuil2", puis revient sur "Feuil1".

* en A5, tape : "Fournisseur 5" ; va voir sur "Feuil2", puis revient sur "Feuil1".

etc... alors ? c'est ok ? ça te convient ? 😉

regarde aussi ce qui se passe si tu supprimes le nom d'un Fournisseur
avec la touche Suppression. (toujours sur "Feuil1")

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. 😀



code VBA de "Feuil1" (13 lignes) :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim chn$
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 1 Then Exit Sub
    chn = .Value
    With Worksheets("Feuil2").Cells(1, .Row)
      If chn = "" Then .ClearContents Else .Value = chn
    End With
  End With
End Sub

soan
 

Pièces jointes

  • Exo Cassandre16.xlsm
    15.2 KB · Affichages: 1
Dernière édition:

Cassandre16

XLDnaute Nouveau
@Cassandre16

c'est bon, c'est plus la peine de joindre un fichier ; je t'ai trouvé une solution ! 😊

* ouvre le fichier joint ; tu peux voir que "Feuil2" est vide.

* va sur "Feuil1" ; c'est le même désert : vide aussi ! 😭

* en A1, tape : "Fournisseur 1" ; va voir sur "Feuil2", puis revient sur "Feuil1".

* en A2, tape : "Fournisseur 2" ; va voir sur "Feuil2", puis revient sur "Feuil1".

* en A3, tape : "Fournisseur 3" ; va voir sur "Feuil2", puis revient sur "Feuil1".

* en A4, tape : "Fournisseur 4" ; va voir sur "Feuil2", puis revient sur "Feuil1".

* en A5, tape : "Fournisseur 5" ; va voir sur "Feuil2", puis revient sur "Feuil1".

etc... alors ? c'est ok ? ça te convient ? 😉

regarde aussi ce qui se passe si tu supprimes le nom d'un Fournisseur
avec la touche Suppression. (toujours sur "Feuil1")

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. 😀



code VBA de "Feuil1" (13 lignes) :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim chn$
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 1 Then Exit Sub
    chn = .Value
    With Worksheets("Feuil2").Cells(1, .Row)
      If chn = "" Then .ClearContents Else .Value = chn
    End With
  End With
End Sub

soan
Bonjour Soan,

Merci beaucoup pour tes réponses et ton aide!
Le souci est que je n'y connais rien en macro, alors je vais me contenter de faire un copier coller...

Pourrais-tu l'appliquer à ce fichier? Il s'agit d'une copie de mon fichier initial mais sans les données confidentielles, j'aurai juste à copier coller la macro.

Je te remercie :)

Cassandre
 

Cassandre16

XLDnaute Nouveau
@Cassandre16

tu as écrit : « Pourrais-tu l'appliquer à ce fichier ? ... »

mais tu n'as pas joint de fichier dans ton post #4 !

soan

Pardon! Le voici.

Le 1er fournisseur est en B41 dans Sheet 1, il doit apparaître en E9 (cellules fusionnées) dans Sheet 2 et idem dans Sheet 3.
Et je voudrais que quand j'étire vers la droite dans les Sheet 2 et 3, les autres fournisseurs suivent.

Merci :)
Cassandre
 

Pièces jointes

  • Exo Cassandre16_2.xlsx
    12.6 KB · Affichages: 3

soan

XLDnaute Barbatruc
Inactif
@Cassandre

j'ai été très long à cause des nombreuses différences avec mon fichier
exemple de départ !

* les feuilles ont un nom anglais ; exemple : "Sheet1" au lieu de "Feuil1".

* sur "Sheet1" : les fournisseurs sont en colonne B et pas en colonne A ;
de plus, la liste des fournisseurs commence en ligne 41 au lieu de 1.

* sur "Sheet2" et "Sheet3" : les fournisseurs sont en ligne 9 et pas en ligne 1 ;
de plus, il y a des fusions de cellules sur cette ligne 9 !

toutes ces différences cadrent bien avec ce que tu as indiqué dans ton post #6,
mais ça m'a obligé à faire plusieurs modifications dans mon code VBA initial
➯ un simple copier / coller du code VBA initial n'aurait jamais pu aller ! 😉


* sur "Sheet3" : c'est vide ; va sur "Sheet2" : c'est vide aussi.

* va sur "Sheet1" : à part les numéros de la colonne A, c'est vide aussi
car j'ai effacé tous les noms des fournisseurs fictifs.

je te laisse faire tous les tests : saisies, suppressions, vérifications. 😜



avec ce que j'ai fait, ce n'est pas besoin d'étirer à droite dans "Sheet2" et
"Sheet3" puisque la copie se fait automatiquement au bon endroit. :)



code VBA de Feuil1 (Sheet1) (19 lignes) :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim chn$, lig&, col%
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 2 Then Exit Sub
    lig = .Row: If lig < 41 Then Exit Sub
    chn = .Value: col = (lig - 41) * 5 + 5
    With Worksheets("Sheet2").Cells(9, col)
      If chn <> "" Then .Value = chn _
        Else .Resize(, 5).ClearContents
    End With
    With Worksheets("Sheet3").Cells(9, col)
      If chn <> "" Then .Value = chn _
        Else .Resize(, 5).ClearContents
    End With
  End With
End Sub

soan
 

Pièces jointes

  • Exo Cassandre16_2.xlsm
    19.5 KB · Affichages: 1
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Cassandre16, soan,

Formule en E9 à tirer vers la droite :
Code:
=""&INDEX(Sheet1!$B:$B;41+(COLONNES($E9:E9)-1)/5)
""& c'est pour le cas où la cellule en Sheet1 est vide.

A+
 

Pièces jointes

  • Exo Cassandre16_2.xlsx
    14.1 KB · Affichages: 3

Cassandre16

XLDnaute Nouveau
Bonjour Cassandre16, soan,

Formule en E9 à tirer vers la droite :
Code:
=""&INDEX(Sheet1!$B:$B;41+(COLONNES($E9:E9)-1)/5)
""& c'est pour le cas où la cellule en Sheet1 est vide.

A+

Bonjour job75,

Je te sollicite à nouveau pour un problème similaire. Je dois prendre des données d'une feuille en lignes lorsque je tire la formule vers le bas dans une autre feuille cette fois.
N'étant pas du tout à l'aise avec la formule INDEX, j'ai quand même essayé de traficoter la formule que tu m'as donnée pendant des heures mais je m'avoue vaincue...

Je te joins un nouveau fichier. Peux-tu me donner la formule pour que lorsque je l'étire vers le bas de F67 à F96 (Sheet 2), je retrouve les données de B41 à B70 (Sheet 1) ?

Je te remercie par avance,

Cassandre
 

Pièces jointes

  • Excel_Cassandre16.xlsx
    10.3 KB · Affichages: 1

Cassandre16

XLDnaute Nouveau
Bonjour job75,

Je te joins l'excel corrigé, je me suis mal exprimée.
En fait, je voudrais que les scores de la ligne 111 en Sheet1 (toutes les 3 cellules en commencant par D111), aillent en colonnes en G à la suite (à partir de G67) en Sheet2.

Voilà j'espère que c'est clair!

Merci par avance
Cassandre
 

Pièces jointes

  • Excel_Cassandre16.xlsx
    9.8 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
311 713
Messages
2 081 806
Membres
101 819
dernier inscrit
lukumubarth