Recopier des informations d'un autre onglet sous condition et sans case vide

Bonjour,

Je cherche depuis 2 jours et je n’arrive pas à trouver de solution à mon problème de formule sur Excel.
Vous en connaissez surement beaucoup plus que moi donc je fais appel à vos connaissances.

J’ai un fichier avec 2 feuilles: “Base” qui est comme son nom l’indique ma base de donnée et “Résultat” qui est le résultat que je souhaiterais obtenir.

Sur ma feuille “Résultat”, grâce à mon menu déroulant je choisis mon numéro de facture et dessous j’aimerais pouvoir récupérer les informations de ma base en fonction de ce numéro de facture.

Petit plus j’aimerais que quand il n’y a pas de quantité (case vide) pour une référence, que cette ligne de référence n’apparaisse pas et que excel aille chercher tout seul la référence suivante.

Voilà mon fichier:
test.xlsx (10,5 Ko)

Je ne sais pas si j’ai été claire, mais merci à ceux qui essayeront de m’aider.

Bonjour,

T’aider: OUI, mais je pense avec les VRAI conditions
Car là je pense beaucoup plus à un tarif à appliquer par rapport à des clients que pour des N° de Facture

Si, vraiment, c’est par rapport à des N° de Facture, eh bien il faut déjà reprendre tout depuis le départ
-1) une base de données contient des Ref ou Articles unique (et logiquement sans cellules vides)
-2) Une base de données ne contient SURTOUT pas de cellules fusionnées

Bref, une BDD (Base de données) est une feuille que l’on remplit, soit à la main, soit par un USERFORM en VBA pour entrer les infos que l’on désire se servir pour une application.

Donc, vu l’exemple, et vu que l’on ne sait pas tout, (car je suppose que la liste est surement plus longue),
soit on travaille sur Office ACCESS qui lui gère les BDD, où alors il faut beaucoup plus d’infos. :face_with_raised_eyebrow:

Bonjour @GaelleM,
Salut @Mimimathy, :wink:

Voici une proposition par formule feuilles “Base(2) et Résultat(2)”:

Déjà, comme le dit @Mimimathy, pas de cellules fusionnées autant que possible, souvent source d’erreur et / ou de difficulté a faire des formules et / ou du VBA.

J’ai donc remanier les 2 tableaux comportant toutes les références et désignations colonnes “A & B” des 2 feuilles et les colonnes “C, D, E” de a feuille “Base(2)” comportant les factures.

En “C5” feuille “Résultat(2)”.

=SIERREUR(INDEX('Base (2)'!$C$4:$E$14;EQUIV($A5;'Base (2)'!$A$4:$A$14;0);EQUIV('Resultat (2)'!$B$2;Facture;0));"")

Tirer vers le bas autant que nécessaire.

Dans cette situation, on ne peu pas supprimer les lignes vides.

Mais c’est une proposition, à toi de l’adapter si elle te convient, sinon @Mimimathy te fera quelque chose en VBA avec les informations supplémentaires qu’il demande.

Fichier ICI==> GaelleM V1.xlsx (15,6 Ko)

Cordialement.

1 J'aime

Salut MDO

Ouais, c’est déjà la bonne esquisse,
Mais je pense que dans la finalité, le résultat ne doit pas contenir de Qté vide, soit pour l’exemple en image

image

1 J'aime

Re @Mimimathy,

Oui, donc si la proposition convient à @GaelleM, il faudra dans ce cas que tu t’y colle :grin: car je ne sais pas convertir ma formule via le VBA et “en même temps”, comme dirait quelqu’un :roll_eyes: supprimer les lignes vides à chaque recherche de facture dans la cellule “B2”.

Attendons la réponse.

Amicalement.

test.xlsx (40,0 Ko)

Merci pour vos réponses. Il me faudrait vraiment les informations mais sans case vide.
Je vous ai envoyé le vrai fichier avec des données fausses pour que vous puissiez voir sur quoi je vais travailler.
Dans mon idée première, je pensais ne compléter que l’onglet base de facturation et ensuite tous les autres onglets se rempliraient tout seuls.

Ce sont les cases jaunes où j’aimerais mettre des formules pour que je ne sois pas obligé de tout retaper à chaque fois.
Je n’ai pas encore fait l’onglet Chiffre d’affaires, mais je ne pense pas que les formules soient très compliquées.

Re @GaelleM,

Je renonce, d’autant qu’on est bien loin de la demande initiale et que cela ne fait que confirmer le doute de @Mimimathy.

Désolé et bon courage pour la suite…

Cordialement.

Merci d’avoir essayé.
Les vrais conditions sont bien celles que je donne
Et les listes ne seront pas plus longue que celle données.

Bonne journée.

Bonjour,
J’essaie d’apporter un peu d’eau au moulin, avec une remarque sur la “Base”, qui n’en ai pas une,j’imagine même pas la maintenance.
Mon conseil serai d’avoir tout d’abord une liste : une colonne par TYPE d’information,et une ligne par information concrète, comme l’explique MDO.

La 1ere question est plutot : Comment entrez vous les données?
Car avec votre approche, vous obligez la presence d’une ref dans une facture où elle n’a rien a faire.

Est-ce envisageable de changer la base comme ceci ?

1 J'aime

Bonjour,
Je ne peux pas supprimer ma référence car elle est obligatoire.
Je ne veux pas faire mes saisies sous le format que vous proposez car cela triplerait le temps de saisie d’une facture.
Je peux enlever la colonne des désignations que je pourrais retrouver facilement par contre.
Je peux également créer un onglet supplémentaire si cela peut aider et je le cacherais par la suite.

Re,

Voilà avec une petite macro, en modifiant le N° de facture le reste s’affiche

La macro :

Option Explicit


Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("F2")) Is Nothing Then 'Sur Chgt cellule F2
    Dim i%, j%, col%, NoFact$
    
    NoFact = Cells(2, 6).Value 'N° Facture
    col = Application.WorksheetFunction.Match(NoFact, Feuil4.Rows(3), 0) 'N° de la colonne
    j = 18
    
    Feuil5.Range("B18:F34").ClearContents 'Efface les données
    For i = 10 To 24 'Boucle sur les produits si case non vide
      If Feuil4.Cells(i, col).Value <> "" Then
        Cells(j, 2) = Feuil4.Cells(i, 1)
        Cells(j, 3) = Application.WorksheetFunction.Index(Feuil3.Range("B4:B18"), _
          Application.WorksheetFunction.Match(Feuil5.Cells(j, 2), Feuil3.Range("A4:A18"), 0))
        Cells(j, 5) = Feuil4.Cells(i, col)
        Cells(j, 6) = Application.WorksheetFunction.Index(Feuil3.Range("C4:C18"), _
          Application.WorksheetFunction.Match(Feuil5.Cells(j, 2), Feuil3.Range("A4:A18"), 0))
        j = j + 1
      End If
    Next i
  End If
End Sub

test (15).xlsm (44,9 Ko)

Restera à voir le calcul avec TVA
La feuille chiffre d’affaire est renseignée

1 J'aime

Hello,
Un exemple avec une formule (matricielle forcément).
Ton modèle de données facilite la saisie, mais complexifie la recherche.
J’ai essayé de l’éclater pour qu’il fois le plus lisible.
En gros on reconstitueles num de ligne dans lesquels la quantité est saisie, et les numero des colonnes de la factures correspondante, apres c’est juste un indirect adresse pour afficher le contenu correspondant
soluce1

Fichier exemple : test exemple.xlsx (12,9 Ko)

Bonjour,

Merci beaucoup Mimimathy, je n’ai rien compris à ton truc mais cela fonctionne super bien. Je crois que je vais essayer de me pencher un peu sur ces histoires de Macro car on peut faire plein de truc cool avec apparemment. Merci beaucoup de ton temps passé.

Merci beaucoup également à WildDigiSoft, cela fonctionne aussi et c’est de mon niveau pour comprendre. Donc je vais me pencher dessus.

Bonne semaine à tous les deux.