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
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.
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
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
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.
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.
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
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) ?
Oups, j’ai foiré l’exemple d’Excel.
La liste des fournisseurs dans Sheet1 va de B41 à AE41 (il y a 30 fournisseurs écrits à la suite en ligne et je voudrais qu’ils apparaissent en colonnes dans Sheet2.
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.