XL pour MAC Simplifier une formule et la recopier

Baldu

XLDnaute Nouveau
Bonjour,

Je suis débutant mais je cherche à créer un classeur pour me faciliter la tâche...
J'ai donc créé:

- Une feuille d'Inventaire composée d'une colonne Matériel (avec tous les articles), suivi de 60 colonnes représentant les points (lieux) d'inventaire.

- Une feuille des Totaux composée d'une colonne Matériel, suivi d'une colonne Quantité et d'une colonne Références. Avec une formules Somme qui renvoi bien les totaux de chaque articles de chaque points (lieux) de la feuille d'inventaire.

- Une feuille de Visite composée de plusieurs colonnes dont une nommée Matériel à poser où je souhaite que les infos de l'inventaire se recopient sous forme de texte (nombre et désignation de l'article) pour chaque points (lieux) tout en ne mettant rien si l'article n'est pas présent.

J'ai donc créé cette formule (raccourcie pour l'exemple mais qui se répète jusqu'à C49):
=SI(Inventaire!C2<>"";Inventaire!C2&" "&Inventaire!A2&"; ";"")
&SI(Inventaire!C3<>"";Inventaire!C3&" "&Inventaire!A3&"; ";"")

La formule fonctionne mais maintenant j'aimerais savoir s'il est possible de la simplifier et aussi comment la recopier automatiquement vers tous les points (lieux) du tableau de visite.

J'ai essayé avec la poignée de recopie mais elle crée ce type de formule:
=SI(Inventaire!C3<>"";Inventaire!C3&" "&Inventaire!A3&"; ";"")
&SI(Inventaire!C4<>"";Inventaire!C4&" "&Inventaire!A4&"; ";"")

alors qu'il me faudrait ce type là:
=SI(Inventaire!D2<>"";Inventaire!D2&" "&Inventaire!A2&"; ";" ")
&SI(Inventaire!D3<>"";Inventaire!D3&" "&Inventaire!A3&"; ";" ")

Le problème vient à mon avis du fait que les infos de l'inventaire sont en ligne (à l'horizontale) et que je veux les recopier en colonne (à la verticale)

J'espère avoir été assez clair et vous remercie par avance de votre aide...
 
Solution
Bonjour Baldu, _Thierry,

Le VBA paraît indispensable, voyez le fichier joint et cette fonction VBA :
VB:
Function Joindre(vecteur1 As Range, vecteur2 As Range, sep As String) As String
Dim i As Long
For i = 1 To vecteur1.Count
    If vecteur2(i) <> "" Then Joindre = Joindre & sep & vecteur2(i) & " " & vecteur1(i)
Next
Joindre = Mid(Joindre, Len(sep) + 1)
End Function
Le code doit être placé impérativement dans un module standard.

Entrez cette formule en Visite!C2 et tirez-la vers le bas :
Code:
=Joindre(Inventaire[Matériel];DECALER(Inventaire[Matériel];;LIGNE()-1);"; ")
Il ne devrait pas y avoir de problème sur MAC.

A+

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Baldu

Oui c'est bien ça les références absolues surtout quand on drague ensuite !

=IF(Inventaire!$C$2<>"";Inventaire!$C$2& " " & Inventaire!$A$2;"")
= On Vérouille tout , la formule draguée aura le même résultat partout

=IF(Inventaire!C$2<>"";Inventaire!C$2& " " & Inventaire!A$2;"")
On Vérouille les Lignes

=IF(Inventaire!G2<>"";Inventaire!G2& " " & Inventaire!$A2;"")
Et donc un mixte pour le cas présent, on vérouille la Colonne que pour A...

Astuce du Jour ! Quand on a la cellule selectionnée dans la Barre de Formule

1595158053489.png

Et que l'on click sur C2 dans la Formule on peut presser la touche de fonction F4 et on a les Options Absolues qui changent à chaque pression du F4...

Bonne découverte !
@+Thierry
 

Baldu

XLDnaute Nouveau
Merci @_Thierry ,

Du coup en faisant:
=SI(Inventaire!S$2<>"";Inventaire!S$2&" "&Inventaire!$A$2&"; ";" ")
&SI(Inventaire!S$3<>"";Inventaire!S$3&" "&Inventaire!$A$3&"; ";" ")
Les lignes sont bien verrouillées ce qui fait une recopie à l'identique mais je voudrais que les colonnes S s'incrémentent à chaque ligne de recopie.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
As tu regardé mon test au moins ?
Je ne mets pas de Dollars dans S du tout...
@+Thierry

Dans ce cas c'est C2 mais idem pas de $

EDIT 14H03 Je viens de regarder le fichier fourni, oui sur Table (Tabelau) ca pose problème on dirait bien, il ne sait pas interpréter les références absolues... Là je donne ma langue au chat, sans VBA je ne vois pas et en plus tu es sur Mac...
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Baldu, _Thierry,

Le VBA paraît indispensable, voyez le fichier joint et cette fonction VBA :
VB:
Function Joindre(vecteur1 As Range, vecteur2 As Range, sep As String) As String
Dim i As Long
For i = 1 To vecteur1.Count
    If vecteur2(i) <> "" Then Joindre = Joindre & sep & vecteur2(i) & " " & vecteur1(i)
Next
Joindre = Mid(Joindre, Len(sep) + 1)
End Function
Le code doit être placé impérativement dans un module standard.

Entrez cette formule en Visite!C2 et tirez-la vers le bas :
Code:
=Joindre(Inventaire[Matériel];DECALER(Inventaire[Matériel];;LIGNE()-1);"; ")
Il ne devrait pas y avoir de problème sur MAC.

A+
 

Pièces jointes

  • Joindre(1).xlsm
    40.3 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
311 710
Messages
2 081 781
Membres
101 817
dernier inscrit
carvajal