Microsoft 365 Fleurissement.

blancolie

XLDnaute Impliqué
Bonjour le forum,

A travers ce fichier j'aimerais retranscrire ce que je rentre dans l'onglet Zone de saisie dans les autres onglets fanfelle, chombart , ververt ou plandanjou. Bien sur, les plantes fournis par fanfelle iront ds l onglet fanfelle etc etc.

Par Formule je sais faire mais le soucis si je modifie un élément ds l onglet Zone de saisie, cela modifie les éléments ds les autres onglets également.

Ce que je cherche mais par formule, je pense pas que cela soit réalisable mais par macro si je pense mais je ne connais rien a cela.

Donc voila j'aimerais que quand j 'ai tout rentrer ds zone de saisie cela puisse rester permanent dans les autres onglets et que je puisse effacer les données de l'onglet Zone de Saisie.

Est il possible dans l'onglet saisie de demander a excel de passer à ligne tout en recopiant les formules quand on valide notre saisie.

dans l'onglet zone de saisie, il y a juste le code de la plante à rentrer et toutes les infos de la plante apparaissent.

merci pour votre aide.
 

Fichiers joints

Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @blancolie :),

Je vois un problème sur votre fichier : Le codage n'est pas fixe :(.

Il suffit de trier, supprimer ou ajouter des lignes pour que le codage soit modifié.

Une nomenclature doit être fixe. Et souvent pas d'autres moyens que du VBA ou une gestion des nomenclatures à la mimine (pénible).

Pour exemple, le fichier en retour avec une colonne Insérée en B. Cette colonne (Codage2) est la colonne A (Codage) copiée en valeur (on a donc éliminé les formules).

On peut trier le fichier selon différentes colonnes (Vivace, contenance, fournisseur, etc), on verra apparaitre des cellules en rouge indiquant que le codage a changé entre le codage actuel par formule (colonne A) et le codage initial par formule (colonne B).

En général, ça aboutit rapidement a un fichier faux et inexploitable si d'autres formules font référence à la colonne codage par formule.

Enfin c'est mon avis.

De toute manière, on n'efface jamais, selon moi, les données de base ou saisies. Pour moi, c'est LA base de données. Le reste n'est que du travail (requêtes) sur la base de données. Il faut donc conserver précieusement la base de données.

nota : je ne vois pas d'onglet "Zone de saisie" dans votre fichier.
 

Fichiers joints

Dernière édition:

blancolie

XLDnaute Impliqué
bonjour mapomme, effectivement je me suis trompé de fichier. le voici. oui mon codage n'est pas fixe. en fait c'est vos qui le creer vous même le codage ?
 

Fichiers joints

blancolie

XLDnaute Impliqué
Le codage est lié à une plante et grâce à ce codage, cela me permet de m'afficher ds l onglet Zone de saisie, la plante , le fournisseur etc etc grâce à l'association d'index et equiv. Cela me permet de gagner du temps.

je ne sais pas si je peux rassembler toutes les formules (qui se trouvent ds plantes/fournisseurs/contenance etc etc ) pour en faire une seule mais le problème c'est la disposition. je ne sais pas si mon explication a été clair.
 
E

eugene92

Guest
Bonjour,
Votre problème est-il résolu ?
Je vous avais proposé une solution qui ne vous convenait pas car il fallait ajouter des colonnes. En quoi cet ajout de colonnes est-il un inconvénient ?
Cordialement.
 

blancolie

XLDnaute Impliqué
Bonjour Eugène92,

disons, j'ai hésité avec votre solution car votre codage était tres intéressant et c'est ce que je recherche. Par contre, comme c'est un fichier qui servira pour le travail, les colonnes pour moi étaient trop nombreuses car en terme de rapidité, c'était emmerdant car faut passer de colonne à colonne. j'aurais dit qu'en terme d'esthétique, a mon goût cela me déplaisait un peu mais je sais qu'on peut y remédier. c'est la rapidité qui me gênait. dommage que vous avez supprimé vos posts. votre codage m'intéresse toujours mais pas avec autant de colonne. s'était bien vu de prendre des lettres du genre , de l'espèce et la première lettre du fournisseur.

Cordialement
 

blancolie

XLDnaute Impliqué
Bonjour et merci Eugène, pour l’écriture des plantes, il existe une nomenclature spécifique qui doit être respectée, donc au niveau du cultivar, il y a des guillemets à mettre car dans cette nomenclature, comment différencier le genre, l espèce le cultivar etc
 

job75

XLDnaute Barbatruc
Bonjour blancolie, mapomme, eugene92,

Le codage par formule est une fausse bonne idée, il faut le supprimer.

Voyez plutôt le fichier joint et ces macros dans le code de la feuille "Recherche et choix" :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim critere$, tablo, resu(), i&, n&
Application.EnableEvents = False 'désactive les évènements
If [B2] = "" Then [C2] = "": GoTo 1
If Not Intersect(Target, [B2]) Is Nothing Then [C2] = ""
critere = LCase(Left([B2], 1) & Chr(1) & "*" & CStr([C2])) & "*"
tablo = Sheets("Données Techniques").[A2].CurrentRegion.Resize(, 3) 'matrice, plus rapide
ReDim resu(1 To UBound(tablo), 1 To 2)
For i = 2 To UBound(tablo)
    If LCase(tablo(i, 3) & Chr(1) & tablo(i, 1)) Like critere Then
        n = n + 1
        resu(n, 1) = tablo(i, 3)
        resu(n, 2) = tablo(i, 1)
    End If
Next
'---restitution---
1 With [B4] '1ère cellule de restitution
     If n Then .Resize(n, 2) = resu
     .Offset(n).Resize(Rows.Count - n - .Row + 1, 2).ClearContents 'RAZ en dessous
End With
Columns(3).AutoFit 'ajustement largeur
Application.EnableEvents = True 'réactive les évènements
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row > 3 And Cells(Target.Row, 2) <> "" Then
    Cancel = True
    [C2] = Cells(Target.Row, 3)
ElseIf Target.Row = 2 Then
    If [B2] = "" Or Application.CountIf(Range("C4:C" & Rows.Count), [C2]) = 0 Or [D2] = "" Then Exit Sub
    Cancel = True
    With Sheets(CStr([B2]))
        .Cells(.Rows.Count, 1).End(xlUp)(2).Resize(, 2) = [C2:D2].Value
        .Columns(1).AutoFit
        .Activate
    End With
End If
End Sub
A+
 

Fichiers joints

blancolie

XLDnaute Impliqué
c'est pas mal comme fichier. par contre on passe un temps fou de faire un par un. par contre i me faut la présentation comme montré. cela va être envoyé aux fournisseurs.
 

blancolie

XLDnaute Impliqué
Bonjour, le codage se crée automatiquement par rapport au plantes mais il faut lui rajouter devant la lettre F=fanfelle(fournisseur de fleurs annuelle/bisannuelle) ou C=chombart( vivaces) V=ververt (bulbes) ; P=plandanjou (arbustes/arbres/vivaces )
 

blancolie

XLDnaute Impliqué
le codage doit se faire par macro ? mon fichier est une base de donnée qui doit me permettre à travers les autres onglets de faire mes demandes de devis. Grace à la zone de saisie, il me faut un codage, on voit cela dans tout les devis de fleurs que je reçois. devant la plante, il y a un codage.

Cela me permet de rentrer les informations plus vite.
 

blancolie

XLDnaute Impliqué
Comment ça un temps fou ? Il suffit d'entrer en C2 les 2 ou 3 premières lettres de la plante...
on valide une plante et cela rentre, si on veut rentrer une deuxième plante, il faut refaire la manipulation mais c'est pas mal comme idée, je trouve. poussons un peu plus loin l'idée, il me faut les contenants ( chez certains fournisseurs, on peut pas les choisir car cela dépend de la plante , ex Fanfelle), les massifs car il faut les répertorier par massifs pour la livraison. c'est pour cela que dans mon fichier et l'onglet fanfelle;, il y a 2 tableaux : 1 qui répertorie les plantes par massifs et l'autre qui sert de devis.
 

job75

XLDnaute Barbatruc
Avec un bouton on évite les doubles-clics, voyez ce fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B:C]) Is Nothing Then Exit Sub
Dim critere$, tablo, resu(), i&, n&
Application.EnableEvents = False 'désactive les évènements
If [B2] = "" Then [C2] = "": GoTo 1
If Not Intersect(Target, [B2]) Is Nothing Then [C2] = ""
critere = LCase(Left([B2], 1) & Chr(1) & "*" & CStr([C2])) & "*"
tablo = Sheets("Données Techniques").[A2].CurrentRegion.Resize(, 3) 'matrice, plus rapide
ReDim resu(1 To UBound(tablo), 1 To 3)
For i = 2 To UBound(tablo)
    If LCase(tablo(i, 3) & Chr(1) & tablo(i, 1)) Like critere Then
        n = n + 1
        resu(n, 1) = tablo(i, 3)
        resu(n, 2) = tablo(i, 1)
    End If
Next
'---restitution---
1 If FilterMode Then ShowAllData 'si la feuille est filtrée
With [B5] '1ère cellule de restitution
     If n Then .Resize(n, 3) = resu
     .Offset(n).Resize(Rows.Count - n - .Row + 1, 3).ClearContents 'RAZ en dessous
End With
Columns(3).AutoFit 'ajustement largeur
With UsedRange: End With 'actualise la barre de défilement verticale
Application.EnableEvents = True 'réactive les évènements
End Sub

Sub Transfert()
Dim n&, w As Worksheet
With [A4].CurrentRegion.Resize(, 4)
    n = Application.CountIf(.Columns(4), ">0")
    If [B2] = "" Or n = 0 Then Exit Sub
    If MsgBox("Transférer " & n & " ligne" & IIf(n = 1, " ?", "s ?"), 36, "Transfert") = 7 Then Exit Sub
    Application.ScreenUpdating = False
    Set w = Sheets(CStr([B2])) 'feuille du fournisseur
    .AutoFilter 4, ">0" 'filtre automatique
    Intersect(Range("C5:D" & Rows.Count), .Cells).Copy w.Cells(w.Rows.Count, 1).End(xlUp)(2) 'copier-coller
    .AutoFilter 'désactive le filtre
End With
w.Columns(1).AutoFit 'ajustement largeur
w.Activate
[B2] = "" 'RAZ
End Sub

Sub RAZ()
'---pour les feuilles des fournisseurs---
With ActiveSheet
    If .[A3] = "Plante" Then .Range("A4:B" & .Rows.Count).Delete xlUp
End With
End Sub
Si vous voulez récupérer plus de colonnes ce n'est pas difficile d'adapter.

A+
 

Fichiers joints

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas