[XLS] lien entre 2 feuilles & ajout de ligne

jay_rom -  
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai besoin d'aide concernant un tableau excel constitué de 2 feuilles.

Sur la première feuille, les données sont triées verticalement avec des informations sur 4 colonnes (+ ou -).

Sur la seconde feuille, les données récupérées de la première feuille sont regroupées par "bloc" de données de 4 cellules (en carré) dont les 2 cellules supérieures sont fusionnées.

Cette seconde feuille est organisée de manière à avoir 4 "bloc" sur la même ligne (sur les 2 même ligne en faite), chaque bloc étant séparé de son voisin par un colonne vierge.
Chaque ligne de bloc est séparée de la précédente par un ligne vierge.

Voici ce que je souhaite ainsi que le problème :
Je souhaite pouvoir insérer des données sur la feuille 1 (via l'ajout d'une ligne).
Lorsque j'ajoute une ligne vierge, voici la répercussion sur la feuille 2 : Sont modifiées uniquement les références aux cellules concernées alors que je voudrais que les références change de cellules plutôt que les cellules changent de références. Vous me suivez ?

prenons un exemple :
J'ai 3 (A,B,C) lignes sur ma feuille 1 qui sont référencées sur la feuille 2 par les bloc 1, 2 et 3.
--- 1A, 2B, 3C ---
Si j'insère une ligne entre la ligne A et B sur la feuille 1, les références de infos des lignes A, C & D sont référencées sur les blocs 1, 2, 3... (B étant une nouvelle ligne vierge)
--- 1A, 2C, 3D ---
Je souhaite que le bloc 2 reste vierge en attendant d'ajouter les bonnes informations. (de la nouvelle ligne B)

Comment puis-je décaler les infos d'un bloc et empêcher le décalage des infos dans le bloc ?

En espérant avoir été suffisamment clair,
Merci d'avance,
Cordialement,
Jay
A voir également:

9 réponses

gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
bonjour

Je suppose que les données de tes "blocks" sont récupérées par une formule : =Feuil1!A2 etc

Dans ce cas, il faudrait remplacer tes formules par =INDIRECT("Feuil1!A2")
et cela te permettra d'introduire d'autres lignes automatiquement et même d'en supprimer.
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
bonjour

Si tu as pas un certain nombre de formules à faire tu peux utiliser cette petite macro :
Public Sub mod_indirect()
Dim sel As Range
Const test = "=F"
Const form = "=INDIRECT("""
For Each sel In UsedRange.Cells
    If Left(sel.Formula, Len(test)) = test Then
        sel.Formula = form & Mid(sel.Formula, 2) & """)"
    End If
Next sel
End Sub

Tu remplaces "=F" par le début de ta formule même si c'est plus long ("=Dbase" par exemple).
0
jay_rom
 
Ok, la première solution m'intéresse beaucoup, je vais tester ça.

Merci beaucoup :)
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
bonjour

La seconde solution n'est utile que pour te transformer en automatique tes formules.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jay_rom
 
Petit soucis, dans une cellule, j'ai mis =SI(ref="","",contenu) pour avoir un champ blanc si la cellule de référence est vide. Avec INDIRECT devant, j'ai une erreur de référence (cellule marquée ?ref avec coin rouge en haut à gauche de la cellule)

J'ai essayé avec INDIRECT dans les conditions du SI... je n'ai pas d'erreur mais quand j'ajoute une ligne vierge entre les ligne 2 et 3 (feuille 1), la cellule liée dans la feuille 2 (bloc 3) devient blanche (ce que je veux) mais la cellule du bloc 4 garde la valeur de la ligne 4 de la feuille 1, alors que je veux qu'elle prenne la valeur de l'ancienne ligne 3 (qui est passé ligne 4 du coup)... En gros, la valeur de la ligne 3 disparait.

Je veux que les valeurs de la feuille 2 se décalent d'un bloc à chaque fois que j'insère une ligne vierge dans la feuille 1.

Merci du soutien ;)
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
bonjour

La fonction INDIRECT donne toujours un résultat si la formulation de ta cellule est correct.

- si la cellule visée est documentée tu as son contenu : pas de souci.

- si la cellule visée est vide tu obtiens zéro.

2 solutions dans ce cas :

. soit tu décoches l'affichage des zéros dans menu outils / options / onglet affichage

. soit tu contrôles ta formule :
=SI(INDIRECT("Feuil1!E1")=0;"";INDIRECT("Feuil1!E1"))

Dans les 2 cas, la valeur va se décaler si insères ou supprime une ligne.
0
jay_rom
 
Excuse-moi, je n'ai probablement pas été clair.

En fait, quand j'ajoute une ligne, les infos des blocs changent pour s'adapter à la nouvelle position de la source.
(si source passe de A1 à A2, le bloc point vers A2 après insertion de ligne, alors que je veux que le bloc continue de pointer vers A1)
En gros, je voudrais faire pointer un bloc vers une cellule plutôt que vers le contenu de cette cellule. (Cette formulation est peut-être plus explicite ? merci de m'aider à réfléchir d'avantage ;))
0
jay_rom
 
Je veux qu'un bloc pointe vers une cellule plutôt que vers son contenu. Quelles que soient les opérations ultérieures... C'est possible de faire pointer une référence sur une cellule 'absolue' ? (c'est-à-dire que si une ligne est insérée à la place de la source, le bloc pointe vers la nouvelle ligne (de mêmes coordonnées du coup))

Désolé, je précise ma pensée au fur et à mesure :/
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
bonjour

Il me semble que c'est ce que fait la formule proposée mais je n'ai peut-être pas compris alors je t'ai fait un petit exemple, à toi de voir si c'est correct ou non.

http://www.cijoint.fr/cjlink.php?file=cj200903/cijKvlldpl.xls
0