copie avec index et recherche

  • Initiateur de la discussion Initiateur de la discussion VINCEGR
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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. 😕

merci pour votre aide.

bonne journée
@+
VinceGR
 
Dernière édition:
Re : copie avec index et recherche

bonjour mromain,
je viens de retester votre fonction et est-il possible de l'adapter pour masquer les lignes vides des jours.
merci d'avance

Bonjour VINCEGR,

Pas utilisable tel quel non... Il faudrait modifier le code et en faire une macro - pas de fonctions saisies dans les cellules, mais une macro qui fait le traitement et inscrit le résultat dans les cellules.

Maintenant, pour faire une telle chose, il faut toutes les informations nécessaires à la compréhension du problème (cf. on apprend qu'au post #14 qu'il faut renvoyer non pas un mais deux fournisseurs).
Tu devrai expliquer un petit peu mieux ce que tu attends...

Sinon, une remarque plutôt personnelle sur ton fichier : éviter les cellules fusionnées !

En attendant de plus amples explications...
a+
 
Re : copie avec index et recherche

RE mromain,

effectivement j'aurais du expliquer mieux mon souhait. pour plus d'explication:
1) j'ai un tableau ou sont regroupés le planning général comme déja mentionné sur post départ
2) je répartis ce planning sur différentes feuilles pour le faire parvenir aux différents fournisseurs concernés
3) il y a un fournisseur à qui je fourni aussi le planning d'un autre fournisseur avec.

en espérant avoir apporté les infos nécessaires.
@+
 
Re : copie avec index et recherche

RE mromain,

effectivement j'aurais du expliquer mieux mon souhait. pour plus d'explication:
1) j'ai un tableau ou sont regroupés le planning général comme déja mentionné sur post départ
2) je répartis ce planning sur différentes feuilles pour le faire parvenir aux différents fournisseurs concernés
3) il y a un fournisseur à qui je fourni aussi le planning d'un autre fournisseur avec.

en espérant avoir apporté les infos nécessaires.
@+

Re bonjour,

Juste pour info...
As-tu jeté un œil sur le lien de mon précédent post ?

Si tu l'as vu, ne pourrais-tu pas modifier ton fichier afin d'enlever les cellules fusionnées - que ça ressemble à une "BDD".Car les cellules fusionnées sont assez lourdes/chiantes à traiter (que ce soit en formule, ou en macro).

En général, il vaut mieux séparer le "stockage" et la "visualisation" de l'information.
En l'occurrence, sur ton fichier, il faudrait une ligne par évènement (ne pas mettre le détail sur plusieurs lignes) - l'affichage, on verra plus tard...
Rque: Cela te permettrai en plus, d'avoir dans ta "BDD" des données sur plus d'une semaine (pour pouvoir les exploiter, faire des indicateurs, ...).

Qu'en penses-tu ?

a+
 
Re : copie avec index et recherche

RE,

Re bonjour,

Juste pour info...
As-tu jeté un œil sur le lien de mon précédent post ?

Si tu l'as vu, ne pourrais-tu pas modifier ton fichier afin d'enlever les cellules fusionnées - que ça ressemble à une "BDD".Car les cellules fusionnées sont assez lourdes/chiantes à traiter (que ce soit en formule, ou en macro).

En général, il vaut mieux séparer le "stockage" et la "visualisation" de l'information.
En l'occurrence, sur ton fichier, il faudrait une ligne par évènement (ne pas mettre le détail sur plusieurs lignes) - l'affichage, on verra plus tard...
Rque: Cela te permettrai en plus, d'avoir dans ta "BDD" des données sur plus d'une semaine (pour pouvoir les exploiter, faire des indicateurs, ...).

Qu'en penses-tu ?

a+

je suis tout a fait d'accord avec toi aussi j'ai modifié fichier de base en pièce jointe.
merci d'avance
@+
 
Dernière édition:
Re : copie avec index et recherche

Bonjour VINVEGR,

Voici une essai avec une macro au niveau du Workbook.
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim zoneFournisseurs As Range, nomFourn() As String, iFourn As Long, searchC As Range, memAdr As String, iL As Long
    
    'ne pas traiter les onglets GENERAL et Liste
    If Sh.Name = "GENERAL" Or Sh.Name = "Listes" Then Exit Sub
    
    'récupérer le nom de l'onglet composé de noms de fournisseurs (1 ou plusieurs
    ' séparés par un tiret "-") dans un tableau
    nomFourn = Split(Sh.Name, "-")
    
    'effacer les données
    Sh.Range("2 : " & Sh.Rows.Count).Clear
    iL = 1
    
    'récupérer la "zone fournisseur" de l'onglet général (colonne C)
    With ThisWorkbook.Sheets("GENERAL")
        Set zoneFournisseurs = .Range("C1", .Range("C" & .Rows.Count).End(xlUp))
    End With
    
    'boucler sur chaque fournisseur (nom de l'onglet)
    For iFourn = LBound(nomFourn) To UBound(nomFourn)
        'rechercher dans la zoneFournisseurs
        Set searchC = zoneFournisseurs.Find(nomFourn(iFourn), , xlValues, xlWhole)
        'si une cellule est trouvée
        If Not searchC Is Nothing Then
            memAdr = searchC.Address
            Do
                iL = iL + 1
                searchC.EntireRow.Copy Sh.Range("A" & iL)
                Set searchC = zoneFournisseurs.FindNext(searchC)
            Loop Until memAdr = searchC.Address
        End If
    Next iFourn
End Sub
A chaque fois qu'on active une feuille (si ce n'est pas l'onglet GENERAL ou l'onglet Listes) la macro efface toutes les lignes et récupère les infos du(des) fournisseur(s) en question.

a+
 

Pièces jointes

Dernière édition:
Re : copie avec index et recherche

bonjour mromain,

c'est "monstrueux" comme solution et ca donne une solution clair au tableau.
est-il possible de rajouter un classement automatique par jours lorsque nous avons 2 fournisseurs concernés et sur l'exemple d'un planning de semaine si une journée aucune intervention ou si férié l'indiqué.
merci encore pour ton aide
@+
 
Re : copie avec index et recherche

bonjour mromain et le forum,
je reviens vers vous pour le code vba que j'ai adapté avec succès pour une nouvelle application sauf que j'ai rajouté une liste avec une ligne total et lors de la création des onglets j'ai un bog

"impossible de modifier le contenu de totaux de liste"

comment le solutionner?

merci pour votre aide
@+
 
Re : copie avec index et recherche

Bonjour VINCEGR,

Désolé pour l'attente...


est-il possible de rajouter un classement automatique par jours lorsque nous avons 2 fournisseurs concernés
Pour ce, modifie le code comme ça :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim zoneFournisseurs As Range, nomFourn() As String, iFourn As Long, searchC As Range, memAdr As String, iL As Long
    
    'ne pas traiter les onglets GENERAL et Liste
    If Sh.Name = "GENERAL" Or Sh.Name = "Listes" Then Exit Sub
    
    'récupérer le nom de l'onglet composé de noms de fournisseurs (1 ou plusieurs
    ' séparés par un tiret "-") dans un tableau
    nomFourn = Split(Sh.Name, "-")
    
    'effacer les données
    Sh.Range("2 : " & Sh.Rows.Count).Clear
    iL = 1
    
    'récupérer la "zone fournisseur" de l'onglet général (colonne C)
    With ThisWorkbook.Sheets("GENERAL")
        Set zoneFournisseurs = .Range("C1", .Range("C" & .Rows.Count).End(xlUp))
    End With
    
    'boucler sur chaque fournisseur (nom de l'onglet)
    For iFourn = LBound(nomFourn) To UBound(nomFourn)
        'rechercher dans la zoneFournisseurs
        Set searchC = zoneFournisseurs.Find(nomFourn(iFourn), , xlValues, xlWhole)
        'si une cellule est trouvée
        If Not searchC Is Nothing Then
            memAdr = searchC.Address
            Do
                iL = iL + 1
                searchC.EntireRow.Copy Sh.Range("A" & iL)
                Set searchC = zoneFournisseurs.FindNext(searchC)
            Loop Until memAdr = searchC.Address
        End If
    Next iFourn
    
    'trier les données par date
    Sh.Range("A2:E" & iL).Sort Sh.Range("A2"), xlAscending
End Sub
si une journée aucune intervention ou si férié l'indiqué.
Ça, c'est plus compliqué à faire...

Sinon, pour la ligne de total, tu pourrai la mettre sous la ligne de titre et figer les volets à partir de la ligne 3. Cela te permettrai d'avoir la somme qui se met à jour à chaque ajout de données et de l'avoir toujours visible.

a+
 
Dernière édition:
Re : copie avec index et recherche

bonjour mromain,
merci pour réponse j'ai essayé d'adapter ligne total sous la ligne de titre mais lors de la création d'un nouvel onglet ne reprend pas la ligne total.
j'ai créé une liste dans l'onglet "Général" et quand je copie cet onglet pour le renommer avec le nom du "fourn" tout se retrouve déplacer !!!
est -il possible de lier un n° tel avec un nom d'onglet et quand j'imprime ma feuille
comme suivant model joint 'sauf qu'il me met le nom de l'onglet au milieu de la feuille ???
merci d'avance
@+
 

Pièces jointes

Re : copie avec index et recherche

Re bonjour,

J'ai modifié le code pour prendre en compte le fait qu'il y ait 2 "lignes de tires". J'ai également rajouté une feuille à ne pas traiter. Cette feuille nommée Modele, est destinée à servir de "modèle fournisseur".
Modifie le code de ton fichier avec celui-ci ; rajoute une feuille (nommée Modele) et crée dessus la "mise en page" des onglets fournisseurs que tu souhaite avoir.
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim zoneFournisseurs As Range, nomFourn() As String, iFourn As Long, searchC As Range, memAdr As String, iL As Long
    
    'ne pas traiter les onglets GENERAL et Liste
    If Sh.Name = "GENERAL" Or Sh.Name = "Listes" Or Sh.Name = "Modele" Then Exit Sub
    
    'récupérer le nom de l'onglet composé de noms de fournisseurs (1 ou plusieurs
    ' séparés par un tiret "-") dans un tableau
    nomFourn = Split(Sh.Name, "-")
    
    'effacer les données
    Sh.Range("3 : " & Sh.Rows.Count).Clear
    iL = 2
    
    'récupérer la "zone fournisseur" de l'onglet général (colonne C)
    With ThisWorkbook.Sheets("GENERAL")
        Set zoneFournisseurs = .Range("C1", .Range("C" & .Rows.Count).End(xlUp))
    End With
    
    'boucler sur chaque fournisseur (nom de l'onglet)
    For iFourn = LBound(nomFourn) To UBound(nomFourn)
        'rechercher dans la zoneFournisseurs
        Set searchC = zoneFournisseurs.Find(nomFourn(iFourn), , xlValues, xlWhole)
        'si une cellule est trouvée
        If Not searchC Is Nothing Then
            memAdr = searchC.Address
            Do
                iL = iL + 1
                searchC.EntireRow.Copy Sh.Range("A" & iL)
                Set searchC = zoneFournisseurs.FindNext(searchC)
            Loop Until memAdr = searchC.Address
        End If
    Next iFourn
    
    'trier les données par date
    Sh.Range("A2:E" & iL).Sort Sh.Range("A2"), xlAscending
End Sub
De plus, il faut que tu sois plus explicite... Tu as la même formule partout (et elle renvoie 0 partout) du coup, je n'arrive pas à comprendre le résultat que tu attends (est-ce qu'il faut renvoyer le nombre de lignes concernant le-les fournisseur-s de l'onglet partout ?).
est -il possible de lier un n° tel avec un nom d'onglet et quand j'imprime ma feuille
comme suivant model joint 'sauf qu'il me met le nom de l'onglet au milieu de la feuille ???
Une fois de plus, je ne comprends pas grand choses...

Fait ces modifs, prépare un bel onglet modèle et renvoie le fichier.

a+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
564
Réponses
7
Affichages
331
Réponses
4
Affichages
181
Retour