XL 2010 Associer ligne avec nom de la cellule

MelissaJoubert

XLDnaute Junior
Bonjour à tous ,

J'ai un problème sur mo fichier excel, je n'arrive pas a creer le macro qu'il me faut.
Je vous met en lien mon fichier car ce sera plus facile pour vous de m'aider :)

Alors voila, on va s'interesser seulement a l'ongelt feuil2 et feuil4.
J'aimerai associer les lignes de mon tableau dans l'ongelt feuil4 au numero qui a dans la cellule.
Par exemple 2017 est associé a toute les case suivant la ligne.

Pck ce que j'aimerai faire c'est que lorsque je vais dans l'ongelt feuil2, et que je rentre 2017 dans la cellule D21, toute les donnée du tableau feuil4 associer a 2017 ce met dans les emplacement spécifique sur la tableau de la feuil2

J"espere que vous comprenez mon problème :D

Merci en tout cas pour votre aide
 

Pièces jointes

  • test6 (1).xlsm
    72.6 KB · Affichages: 29

MelissaJoubert

XLDnaute Junior
Dans ce cas, pourrais-tu indiquer sur Feuil2 les informations provenant automatiquement de Feuil4, en rouge par ex ?

Par exemple pour le premier cadre ça serait les cellules suivantes :
- F21 pour le nom du projet
- G21 pour la ville
- H21 pour la surface
- I21 pour sho sha
- K21 pour nombre
- L21 pour typologie
- M21 pour la date devis
- R21 pour sous traitant

Voila :D
 

MelissaJoubert

XLDnaute Junior
En faite le tableau de la feuil2 peut etre répété autant de fois que je veux, je ne sais pas combien il va en avoir.


Private Sub Worksheet_Change(ByVal Target As Range)
'au changement d'un numéro de tableau en colonne D,
'cherche les infos correspondantes dans la feuille "Données", pour les recopier

Application.EnableEvents = False

If Target.Column = 4 And Target.Interior.ColorIndex = 2 Then 'colonne D sur une cellule coloré en blanc
'on cherche la position du tableau dans la feuille données
With Sheets("feuil4").Range("A:A")
'MsgBox Target.Item(1)
Set c = .Find(Target.Item(1)) ', LookIn:=xlValues, XlLookAt:=xlWhole)
On Error Resume Next
If Not c Is Nothing Then
If c.Value <> "" Then
'recopie du tableau
.Range("B" & c.Row & ":F" & c.Row + 4).Copy Destination:=Target.Offset(0, 1) 'va comprendre pourquoi il faut mettre B et F pour copier CG......?????
Else
Target.Offset(0, 1).Resize(4, 5).ClearContents 'si numéro pas trouvé: on efface
End If
Else
Target.Offset(0, 1).Resize(4, 5).ClearContents 'si numéro pas trouvé: on efface
End If
End With
End If

Application.EnableEvents = True
End Sub


J'avais fais ce code mais le problème c'est que la je copie colle le tableau comme il est sauf que dans mon cas la le tableau n'est pas de la même forme donc il faudrait selectionner par colonne ou je ne sais pas


Merci pour ton aide, j'espere que tu comprend mon problème :)
 

CISCO

XLDnaute Barbatruc
Bonjour

Je te demandais tout ça car on doit pouvoir faire ça tout simplement avec des formules matricielles, donc à valider avec Ctrl+maj+entrer.

Pour le nom du projet
Code:
INDEX(Feuil4!B$1:B$4;MIN(SI(Feuil4!A$3:A$4=Feuil2!D21;LIGNE($3:$4))))

Pour le nom de la ville
Code:
INDEX(Feuil4!C$1:C$4;MIN(SI(Feuil4!A$3:A$4=Feuil2!D21;LIGNE($3:$4))))

et ainsi de suite, en mettant à la place des $4 le n° de la dernière ligne utilisée sur Feuil4, par exemple
Code:
INDEX(Feuil4!C$1:C$100;MIN(SI(Feuil4!A$3:A$100=Feuil2!D21;LIGNE($3:$100))))

Une fois fait le premier petit tableau, il suffit de copier coller autant de fois que désiré.

Par macro, cela serait encore plus simple pour l'utilisateur final, mais vu mon niveau en VBA...

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonsoir

Bien sûr que cela fonctionne, tant que tu mets à la place des $4 un nombre > ou = au n° de la dernière ligne de Feuil4. Si besoin est, on peut utiliser des plages dynamiques, dont la hauteur s'adapte automatiquement au nombre de lignes de ta Feuil4.

@ plus
 

CISCO

XLDnaute Barbatruc
Bonsoir

Regardes dans la pièce jointe, les formules matricielles dans Feuil2!F21 et dans Feuil2!G21 (à valider avec les 3 touches Ctrl+maj+entrer, ce qui fait apparaitre les accolades {} dans la barre de formule), ainsi que dans le gestionnaire de noms, les plages dynamiques définies avec les noms nomprojet, année et ville.
Pour bien comprendre à quoi correspond ces plages, sélectionnes en une dans le gestionnaire de noms. Cliques dans le bas de la fenêtre "Gestionnaire de noms" sur la formule la définissant, en dessous de "Fait référence à". Excel mettra en évidence la plage correspondante en l'entourant avec des pontillés. Ici, il ni y a que 4 lignes, mais s'il y en a plus, Excel sélectionnera automatiquement l'ensemble.
plage dynamique ville.JPG


Pour en définir d'autres, utilises le même type de formule en utilisant EQUIV("zz" si la colonne contient du texte, EQUIV(9^9... si elle contient des nombres.

A toi de faire de même dans H21, I21, K21 et ainsi de suite.

@ plus

P.S : J'ai défusionné B1 et D1 (les cellules fusionnées sont souvent source de pb si on les utilise dans des formules, donc, il faut mieux les éviter), et j'ai centré sur plusieurs colonnes (dans la fenêtre format- --> Alignement) les noms projet et surface.
 

Pièces jointes

  • test6 (1).xlsm
    87.5 KB · Affichages: 27
Dernière édition:

Discussions similaires

Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 107
Messages
2 085 358
Membres
102 874
dernier inscrit
Petro2611