recherche d'une donnée sans bouton

micky

XLDnaute Nouveau
bonjour a tous,
j'ai un petit soucis, je vous explique:
j'ai une liste déroulante de Nom dans la cellule B2 de la feuille "menu".
Pour chaque Nom, une feuille du classeur existe ayant le même Nom.
je voudrais qu' a chaque fois que je sélectionne un nom différent,
Excel se rend dans la feuille correspondante au Nom et copie la dernière case de la colonne D et me l'a colle dans la cellule E4 de ma feuille "menu".
pouvez vous m'aider avec un code vba pour ca?

encore merci
 

ROGER2327

XLDnaute Barbatruc
Re : recherche d'une donnée sans bouton

Bonjour micky.


pouvez vous m'aider avec un code vba pour ca?
Ce ne devrait pas être trop difficile... ...en ayant sous la main un classeur de travail.
Personnellement, je suis feignant aussi : pas envie de fabriquer le support de A à Z.​


Bonne journée.


ℝOGER2327
#7047


Jeudi 12 Sable 141 (Sainte Choupe, mère de famille - fête Suprême Quarte)
22 Frimaire An CCXXII, 0,7962h - bruyère
2013-W50-4T01:54:39Z
 

ROGER2327

XLDnaute Barbatruc
Re : recherche d'une donnée sans bouton

Bonjour à tous.


Un essai. je n'ai traité que :
  1. le problème posé dans le message #1 ;
  2. le code du bouton valider l'encaissement.
Le code est dans Feuil1 (onglet Encaissement).
Il est entièrement paramétré et, par conséquent, facilement adaptable.
VB:
Private Sub Worksheet_Change(ByVal Cible As Range)
Dim Client$, Encours$, SoldeClient$

'========= Paramètres à adapter :

'1. dans cette feuille :
Client = "F8"
Encours = "G8"

'2. dans les feuilles "clientsx"
SoldeClient = "D"
'================================

  If Not Intersect(Cible, Range(Client)) Is Nothing Then
    On Error Resume Next
    With Worksheets(Range(Client).Value)
      If Err.Number Then
        Range(Encours).Value = Empty
        MsgBox "Tabernacle !" & vbLf & vbLf _
          & "Le client """ & Range(Client).Value & """ n'existe pas.", vbCritical, "Liste des clients foireuse..."
      Else
        Range(Encours).Value = .Cells(.Rows.Count, SoldeClient).End(xlUp).Value
      End If
    End With
    On Error GoTo 0
  End If

End Sub

Sub Bouton2_Cliquer()
Dim Client$, Encaissement$, EncaissementClient$, Encours$, Date1$, Date2$, SoldeClient$

'========= Paramètres à adapter :

'1. dans cette feuille :
Date1 = "E8"
Client = "F8"
Encaissement = "G11"
Encours = "G8"

'2. dans les feuilles "clientsx"
Date2 = "A"
EncaissementClient = "C"
SoldeClient = "D"
'================================

  On Error Resume Next
  With Worksheets(Range(Client).Value)
    If Err.Number Then
      MsgBox "Jésus, Marie, Joseph !" & vbLf & vbLf _
        & "Le client """ & Range(Client).Value & """ n'existe pas.", vbCritical, "Liste des clients foireuse..."
    Else
      With .Cells(.Rows.Count, Date2).End(xlUp).Offset(1)
        .Value = Range(Date1).Value
        .Offset(, Columns(EncaissementClient).Column - Columns(Date2).Column).Value = Range(Encaissement).Value
        .Offset(, Columns(SoldeClient).Column - Columns(Date2).Column).FormulaR1C1 = "=IF(ROW()>2,IF(RC[-2]=0,IF(RC[-1]=0,0,R[-1]C-RC[-1]),R[-1]C+RC[-2]-RC[-1]),RC[-2]-RC[-1])"
      End With
      Range(Encours).Value = Range(Encours).Value - Range(Encaissement).Value
      Range(Encaissement).Value = Empty
    End If
  End With
  On Error GoTo 0

End Sub


Bonne journée.


ℝOGER2327
#7049


Jeudi 12 Sable 141 (Sainte Choupe, mère de famille - fête Suprême Quarte)
22 Frimaire An CCXXII, 5,8689h - bruyère
2013-W50-4T14:05:07Z
 

Pièces jointes

  • Copie de support.xlsm
    57.7 KB · Affichages: 39

micky

XLDnaute Nouveau
Re : recherche d'une donnée sans bouton

desolé,
honnêtement je n'ai pas bien compris ton point de vue...
je comprend bien l'utilisation des userform ect... mais comment j'avoir l'historique des ventes et encaissements de plusieurs clients dans une seul feuille ? je sais pas. mais c'est clair que c'est plus simple. meme pour mes futures macros que j'aurai a faire dans le fichier.
effectivement kingfadhel la premiere cellule pose probleme.

merci
 
Dernière édition:

micky

XLDnaute Nouveau
Re : recherche d'une donnée sans bouton

suite au vba de ROGER2327, j'ai pu adapter et faire aussi les entrées (livraison/facturation).
par contre j'aurais voulu l'adapter pour afficher aussi l'historique, c'est a dire les 3 ou 4 ou 5 dernieres lignes de la feuille client.
seulement comment:
Range(Encours).Value = .Cells(.Rows.Count, SoldeClient).End(xlUp).Value ceci me renvoi a la derniere ligne
comment je pourrais demander l'avant derniere ? celle d'avant ect...
ou il faut une approche completement differente ?
 

micky

XLDnaute Nouveau
Re : recherche d'une donnée sans bouton

kingfadhel, merci pour les ameliorations "mise a jour du solde effectué".:)
par contre il beug toujours lorsque je rentre la premiere ligne de la liste deroulante !
je supose que c'est parceque la ligne en question ne correspond a aucune feuille ?
ceci étant, solutionnant ce petit bug, votre code serai parfait !
 
Dernière édition:

micky

XLDnaute Nouveau
Re : recherche d'une donnée sans bouton

bonjour,
je sollicite encore votre aide
j'ai modifié le code de Roger2327, afin d'avoir un historique du client dans la feuille encaissement du fichier.
le code doit remonter de 5 lignes et les afficher.
seulement, si le client n'a pas 5 lignes en historique, la ca me raconte un peu n'importe quoi...
pouvez vous y jeter un œil ?

merci
 

Pièces jointes

  • gestionclient2.xlsm
    64.5 KB · Affichages: 34

ROGER2327

XLDnaute Barbatruc
Re : recherche d'une donnée sans bouton

Re...


(...)
pouvez vous y jeter un œil ?
(...)
Les deux, même.
Vous aimez vous compliquer la vie, on dirait...
Essayez ceci :​
VB:
Private Sub Worksheet_Change(ByVal Cible As Range)
Dim i%, j%, x%, u(), v(1 To 5, 1 To 4)
Dim Client$, Encours$, SoldeClient$, Date3$, Date4$

'========= Paramètres à adapter :

'1. dans cette feuille :
Client = "F8"
Encours = "G8"
Date4 = "E17"

'2. dans les feuilles "clientsx"
SoldeClient = "D"
Date3 = "A"
'================================

  If Not Intersect(Cible, Range(Client)) Is Nothing Then
    On Error Resume Next
    With Worksheets(Range(Client).Value)
      If Err.Number Then
        Range(Encours).Value = Empty
        MsgBox "Veuillez selectionner un client.", vbCritical, "Liste des clients foireuse..."
      Else
        Range(Encours).Value = .Cells(.Rows.Count, SoldeClient).End(xlUp).Value
        x = .Cells(Rows.Count, Date3).End(xlUp).Row - 1
        If x > 1 Then
          u = .Range(.Cells((x - 2 + Abs(x - 6)) / 2, 1), .Cells((x + 2 + Abs(x - 2)) / 2, 4)).Value
          For i = UBound(u) To 1 Step -1: For j = 1 To 4: v(UBound(u) + 1 - i, j) = u(i, j): Next j, i
        End If
        Range(Date4).Resize(UBound(v, 1), UBound(v, 2)).Value = v
      End If
    End With
    On Error GoTo 0
  End If

End Sub
Je n'ai pas regardé les autres procédures.​


Bonne journée.


ℝOGER2327
#7057


Vendredi 13 Sable 141 (Saint Flaive, concierge - fête Suprême Quarte)
23 Frimaire An CCXXII, 1,3549h - roseau
2013-W50-5T03:15:06Z
 

Pièces jointes

  • gestionclient2bis.xlsm
    64.7 KB · Affichages: 40

ROGER2327

XLDnaute Barbatruc
Re : recherche d'une donnée sans bouton

Re...


Roger2327, merci bien.
c'est parfait !
effectivement, j'aime me compliquer la vie, mais c'est parce que je serai pas le seul a utiliser le fichier...
Heureux que cela fonctionne. Toutefois, en relisant le code, j'y trouve une erreur : la variable x est mal typée ; il faut la déclarer x$ (entier long) et non x%.

D'autre part, votre classeur serait plus léger s'il n'y avait pas de formule dans la colonne SOLDE des onglets clientsx. S'il n'y a pas de raison cachée qui s'y oppose, il vaudrait mieux que le calcul fût fait par la procédure Worksheet_SelectionChange.
Une façon simple de le faire à partir de l'existant est de remplacer​
VB:
        .Offset(, Columns(SoldeClient).Column - Columns(Date2).Column).FormulaR1C1 = "=IF(ROW()>2,IF(RC[-2]=0,IF(RC[-1]=0,0,R[-1]C-RC[-1]),R[-1]C+RC[-2]-RC[-1]),RC[-2]-RC[-1])"
par​
VB:
        With .Offset(, Columns(SoldeClient).Column - Columns(Date2).Column)
          .FormulaR1C1 = "=IF(ROW()>2,IF(RC[-2]=0,IF(RC[-1]=0,0,R[-1]C-RC[-1]),R[-1]C+RC[-2]-RC[-1]),RC[-2]-RC[-1])"
          .Value = .Value
        End With
À vous de voir...​


Bonne journée.


ℝOGER2327
#7058


Vendredi 13 Sable 141 (Saint Flaive, concierge - fête Suprême Quarte)
23 Frimaire An CCXXII, 4,4685h - roseau
2013-W50-5T10:43:28Z
 

Discussions similaires

  • Question
Microsoft 365 excel 365
Réponses
3
Affichages
227
Réponses
4
Affichages
139

Membres actuellement en ligne

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 019
dernier inscrit
BenKmc