copie avec index et recherche

VINCEGR

XLDnaute Occasionnel
bonjour le forum, :)
je vous joins un fichier avec mon souci.
je souhaite utiliser les fonctions index et recherche mais je n'y arrive pas j'ai toujours message d'erreur. :confused:

merci pour votre aide.

bonne journée
@+
VinceGR
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : copie avec index et recherche

Bonjour VINCEGR,

Avant de s'attaquer au problème ; sur ton fichier exemple, pourquoi y a-t-il plusieurs lignes vides entre chaque "entrées" de ta "BDD" ?
Si c'est parce que le détail prends plusieurs lignes, Peut-il y avoir des lignes vides (pas terrible) ?

a+
 

VINCEGR

XLDnaute Occasionnel
Re : copie avec index et recherche

bonjour le forum,
le report se fait en créant des espaces sur les feuilles copiées et je souhaite une suite dans la recopie sans créer laisser d'espaces.
est-ce possible ?
merci pour votre aide
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : copie avec index et recherche

Bonjour VINCEGR, JHA,

Une autre solution avec une formule personnalisée (VBA) à coller dans un module.
Niveau utilisation, il suffit de saisir =RecupInfoFournisseur() dans chaque cellule des "tableaux fournisseurs".
La fonction vérifie si la cellule (d'où est saisie la fonction) correspondante sur la feuille "GENERAL" contient des informations du fournisseur (nom de l'onglet d'où est saisie la fonction). Elle renvoie l'info en fonction.
VB:
Public Function RecupInfoFournisseur() As String
'déclaration des variables
Dim nomOnglet As String, adresseCellule As String, nomOngletGeneral As String, nomFornLigneCour As String

    'nom de l'onglet contenant toutes les infos
    nomOngletGeneral = "GENERAL"
    
    'récupérer le nom de l'onglet de la cellule où la fonction est inscrite
    nomOnglet = Application.Caller.Parent.Name
    'récupérer l'addresse de la cellule où la fonction est inscrite
    adresseCellule = Application.Caller.Address
    'récupérer le nom du fournisseur sur l'onglet général de la ligne de la cellule où la fonction est inscrite
    With ThisWorkbook.Sheets(nomOngletGeneral)
        'si la cellule "C<ligne>" correspont au nom de l'onglet de la cellule où la fonction est inscrite
        If .Range("C" & Application.Caller.Row).Text = nomOnglet Then
            'renvoyer le texte affiché dans la cellule (de l'onglet général) correspondante à la cellule où la fonction est inscrite
            RecupInfoFournisseur = .Range(adresseCellule).Text
            Exit Function
        'sinon, si le dernier fournisseur inscrit correspont au nom de l'onglet de la cellule où la fonction est inscrite
        ElseIf .Range("C" & Application.Caller.Row).Text = "" And .Range("C" & Application.Caller.Row).End(xlUp).Text = nomOnglet Then
            'renvoyer le texte affiché dans la cellule (de l'onglet général) correspondante à la cellule où la fonction est inscrite
            RecupInfoFournisseur = .Range(adresseCellule).Text
            Exit Function
        End If
    End With
    
End Function
Edit :

Par contre, si les données sont nombreuses (ainsi que le nombre de fournisseurs), cela risque de prendre beaucoup de temps (cette formule, inscrite dans beaucoup de feuilles du classeur - une par fournisseurs - se recalculera à chaque changement de cellules...). Si tu optes tout de même pour cette manière, ilserait préférable de ne mettre qu'une seule feuille "de consultation" avec une liste de validation (contenant les fournisseurs de la feuille "GENERAL") dans une cellule, et le déclenchement d'une macro reprenant ce principe à chaque changement de cette cellule (en fonction donc du fournisseur sélectionné).

Cela allègerai ton fichier (et accessoirement on nombre plus ou moins conséquent d'onglets).

a+
 
Dernière édition:

VINCEGR

XLDnaute Occasionnel
Re : copie avec index et recherche

bonjour JHA et mromain,
un grand merci pour votre aide.

je n'arrive pas à recopier la formule matricielle toujours message #valeur. pouquoi ? quelle est mon erreur ?


pour le recupinfofournisseur la mise à jour ne se fait pas suivant une modif du fichier il faut renoter la fonction et est-il possible d'adapter la fonction avec un classement et un masque des lignes non remplies ?

merci d'avance
 

Pièces jointes

  • testcopiefeuill resultat.zip
    29.6 KB · Affichages: 25

JHA

XLDnaute Barbatruc
Re : copie avec index et recherche

Re,
tu dois copier la formule en B38 uniquement
=DECALER(INDEX(GENERAL!$B$38:$B$54;PETITE.VALEUR(SI(GENERAL!$C$38:$C$54="fourn2";LIGNE(INDIRECT("1:"&LIGNES(GENERAL!$B$38:$B$54))));LIGNES($1:1)));;COLONNE()-2)
puis la valider par Ctrl+Maj+Entrée

Ensuite tu recopies vers la droite et le bas

JHA
 

VINCEGR

XLDnaute Occasionnel
Re : copie avec index et recherche

re,
j'ai compris mon erreur le résultat correspond à mon souhait et je vous en remercie.
le seul "bémol", je souhaiterais pouvoir adapter cette formule dans d'autre circontance mais je n'ai pas tout compris avec les histoires de :
- décaler
- petite.valeur
- ligne
- indirect
- index
- colonne
possédez-vous une méthode qui permet d'utilisr au mieux ces fonctions ?

@+
:)
 

VINCEGR

XLDnaute Occasionnel
Re : copie avec index et recherche

RE JHA,
je viens d'essayer la formule en l'adaptant comme suit mais maintenant la fonction ne marche plus

puis-je apporter cette modification ?

=DECALER(INDEX(GENERAL!$B$4:$B$20;PETITE.VALEUR(SI(OU(GENERAL!$C$4:$C$20=$D$1;GENERAL!$C$4:$C$20=$D$2);LIGNE(INDIRECT("1:"&LIGNES(GENERAL!$B$4:$B$20))));LIGNES($1:2)));;COLONNE()-2)

ou comment l'adapter ?

@+
 

JHA

XLDnaute Barbatruc
Re : copie avec index et recherche

Re,

si tu veux afficher toutes les valeurs sans espaces, je te proprose:
=DECALER(INDEX(GENERAL!$B$4:$B$20;PETITE.VALEUR(SI(GENERAL!$C$4:$C$20<>"";LIGNE(INDIRECT("1:"&LIGNES(GENERAL!$B$4:$B$20)))); LIGNES($1:1)));;COLONNE()-2)

JHA
 

VINCEGR

XLDnaute Occasionnel
Re : copie avec index et recherche

re,
non ce n'est pas toutes les valeurs mais je dois regrouper 2 fournisseurs sur la même feuille et j'ai adapté formule en mettant fourn1 en d1 et fourn2 en d2 mais j'ai au total une dizaine de fournisseur
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 347
Membres
103 526
dernier inscrit
HEC