Voilà les sousis reviennent suite à de nouvelles infos on me demande de rajouter une fonction sur dans mon program et la je cale !
Oui on me demande de rajouter la possiblitée de rappeler les fiches clients dèja enregistrées pour les complèter . Mon problème c'est quelle se divises sur quatres feuilles différantes .
Ses quatres feuilles se divisent comme cela:
1-de la Ref Client "C001"à"C053"
2-de la Ref Client "C0055" à "C088"
3-de la Ref Client "C089" à "C111"
4 Et les Ref client ("C018","C040"),("C034,"C103"),("C038,"C051"et"C098") qui font l'objet d'un groupage .
je voudrais savoir si il est possible de faire une macro qui permetrait de faire les opèrations suivantes :
1-faire une recherche sur les quatres feuilles par la RefClient pour retouver la fiche?
2- Selectionner la plage allant de B":G" (à complèter par les numèros de lignes où la fiche est placée Ex: si la fiche rechercher est place dans la feuille7 entre la 100 ème et la 129 ligne la plage sera B101:G127 )
3- Copier la plage et la coller dans la plage B5:G27 de la feuille 1
4 Une fois cette plage completée la selectionner est la copier et la coller dans la plage de dèpart (Si on prend l'exemple précédent on colle en B101:G127 en feuille 7 .
5- On efface la zone B5:G29 de la première feuille pour revenir au dèpart .
Toute ces opèration se ferais par l'intermediaire d'un ComandButon nommé "MODIFIER" .
Ci_joint je mets un dossier contentant une aproche shèmatiques des opèrations citèe ci-dessus .
En espèrant que mes explications soient suffisament claire je vous dis merçi d'avence et à bientôt sur se fil .
BR44
Comme prèvue par mon dernier message je vous joint un nouveaux dossier composé deux deux classeurs le premier apellé client pour la liaison le deuxième nome F.xls dans le quel se treouve le program et les informations demandées .
En espèrant que vous trouverez plus claire que le prècèdent .
Vous remerciant par avances je vous dit à plus et me tient à votre disposition pour toutes questions que vous vous posez .
Br44
voici le code pour le bouton "MODIFIER LES FICHES":
Code:
Private Sub CommandButton12_Click() 'Boutton"MODIFIER LES FICHES
[B][COLOR="Blue"]Dim trouverefc As Range[/COLOR][/B]
If RefClient = "" Then
MsgBox "Tapez la RefClient Rechercher"
Exit Sub
End If
If RefClient.Value >= "C001" And RefClient.Value <= "C054" Then
With Sheets("T1")
Set trouverefc = .Cells.Find(RefClient.Value, LookIn:=xlValues)
If Not trouverefc Is Nothing Then
.Range(trouverefc.Offset(2, 0), trouverefc.Offset(24, -5)).Copy Sheets("Détail").Range("B5")
Sheets("Détail").Range("G3").Value = RefClient.Value
Sheets("Détail").Range("C3").Value = Mois.Value
End If
End With
ElseIf RefClient.Value >= "C055" And RefClient.Value <= "C088" Then
With Sheets("T2")
Set trouverefc = .Cells.Find(RefClient.Value, LookIn:=xlValues)
If Not trouverefc Is Nothing Then
.Range(trouverefc.Offset(2, 0), trouverefc.Offset(24, -5)).Copy Sheets("Détail").Range("B5")
Sheets("Détail").Range("G3").Value = RefClient.Value
Sheets("Détail").Range("C3").Value = Mois.Value
End If
End With
ElseIf RefClient.Value >= "C089" And RefClient.Value <= "C111" Then
With Sheets("T3")
Set trouverefc = .Cells.Find(RefClient.Value, LookIn:=xlValues)
If Not trouverefc Is Nothing Then
.Range(trouverefc.Offset(2, 0), trouverefc.Offset(24, -5)).Copy Sheets("Détail").Range("B5")
Sheets("Détail").Range("G3").Value = RefClient.Value
Sheets("Détail").Range("C3").Value = Mois.Value
End If
End With
End If
End Sub
Question? quand tu auras plusieurs mois pour la même refclient, les feuilles T1 T2 et T3 vont avoir beaucoup de ligne non?
Il faut savoir que cette macro ne gère pas plusieurs mois pour la même refclient, en fait elle récupère les données pour le premier refclient trouvé.
Merçi beaucoup pour cette macro chapeau bas Mister SKOOBI .
Pour répondre à t'as question : le problème de selection du mois ne se pose pas ,car j'ai prèvu un boutton pour Archiver mes données une fois le mois terminés les feuilles s'effaceront automatiquement après copie vers se fichier . s'est aussi par se fichier que se fera l'impression de toutes les factures .
Bon le temps d'ètudier et de tester et je te tient au courant de la suite .
Aprés avoir testé ta macros qui fonctionne trés bien je fais un point sur se qui reste à faire .
Observation : Je supose que le faite que "Mois.Value" soit une liste de choix dans l'UserForm empêche son affichage dans la feuille "détail" voir ta ligne de code :
Sheets ("détail").Range ("C3").Value =Mois.Value Pas d'affichage ?
Voilà un point de fait
A voir : peut-on affiche le N° de la facture lie à la fiche ?
A la validation il faudrait que le N° de facture ne s'acrèmente pas si possible ?
Enfin peut_on renvoyer les infos modifiées ,dans la feuille "T1" à l'endroit où de trouve la fiche ? (afin déviter les doublons ) .
Voilà les points qui reste à voire .
Je reflichi sur les solutions à apporter :
1° je pourrais crèer un nouvel Userform pour les modifs ,basé sur le principal mais avec un bouton "Valider les modif " . Où si c'est possible un sous-Formulaire ?
2° Pour le renvoies des données sachant que les fiches (Ensemble "Détail"+"Facture") sont constituées de 79 lignes sur 7 colonnes et qu'elles se trouveront au même endroit , peut-être qu'avec une formule du style:
If RefClient.Value= ""Then
For i=1 To 1500 Step 79
Sheets("Détail") .Range("B5:G29") .value .Copy
pour la suite " ta macro" qui enverait la plage Aprés l'avoirs trouvé en :
Sheets("T1") .Range(B":G")
Bon voilà où j'en suis , je prèpare ça et je le post sur le fil .
Je te souhaite une bonne soirée et te dis à bientôt et merçi encore pour le coup de main . A plus Br44
BR44 quelques questions
A quoi servent les pages 'AnnexFacture1' et 'AnnexFacture' il me sembe que tu copies 'AnnexFacture1' à la suite de 'Facture' ?
Les feuilles T1,T2,T3 et GroupageClients servent à visualiser les pages ou seulement au stockage ?
Si uniquement stockage peut-on envisager une autre manière de stockage ?
Le découpage (Tel numéro dans telle page) est il important ?
Beaucoup de problèmes lors des copies avec les cellules fusionnées (A Bannir)
je te propose de garder le même userform sur ce principe:
1- en cliquant sur "modifier les fiches"
a- la variable "trouverefc" dans la macro va permettre d'éviter de faire des doublons.
b- les cases F1, F2 sont automatiquement récupérées en choisissant la journée
2- cliquer sur "valider la fiche" (que j'appelerai à ta place valider la journée )
Là il faudrait mettre un garde-fou, c'est-à-dire qu'il faudrait griser le bouton "modifier les fiches" pour ne pas perdre les nouvelles saisies en cours comme ceci:
Code:
CommandButton12.Enabled=False
A mettre dans le code du bouton "valider les fiches".
3- puis tu clique sur le bouton tournée correspondant.
Attention: une fois cliqué sur "modifier les fiches" il ne faut pas fermer le userform pour modifier le tableau et y retourner pour valider les modifications sous peine d'avoir un doublon (c'est pour celà que la ligne de la journée est récupérée dans le userform).
Ce principe marche pour la "tournée 1".
Il faudra que tu modifies les 2 autres code (j'ai plus le temps)
Private Sub CommandButton4_Click() 'Boutton "TOURNEE 2"
et
Private Sub CommandButton10_Click() 'Boutton"Tournée 3"
sur le même principe que le code
Private Sub CommandButton2_Click() 'boutton "TOURNEE 1"
Voilà, c'est fini ouffff.
.....Ou presque quand je vois les autres boutons.....
Edit:
je viens de m'apercevoir que le nom du client est récupéré dans le fichier C.xls.
J'ai supprimer la liaison entre les 2 fichiers. En effet, ce serait mieux si tu mettais ce tableau des clients dans un onglet du fichier F.xls non?
1) A quoi servervent les "AnnexFacture1" et"AnnexFacture 2" ?
Réponse : Comme tu la bien vu elles sont effectivement placées à la suite de la facture . Il s'agit de facture consernant des prestions supplèmentaire que l'on fait pour certain client en plus . La prestation ètant un forfait mensuel dont le montant est fixe . Voilà pourquoi j'ai placé cette facture à la suite de la "facture" des clients consernés puisqu'il ne sont qu'au nombre de deux .
2) Les feuilles T1,T2,T3 et GroupageClients servent à visualiser les pages ou seulement au stockage ?
Rèponse: Oui mais pas seulement elle permettent aussi la visaulisation des factures pour le mois en court . Elles sont ensuites envoyées dans un fichier "archive" pour y êtres stocker .
3) Le découpage (Tel numéro dans telle page) est il important ?
Rèponse: Oui car il dètermine l'ordre dans la quelle les clients sont rammassés . Les feuilles "T","T2" et "T3" détermine aussi les tournées de ramassage par ordre gèographique . La feuille "GroupagesClients " elles est purment fait pour la facturation . il s'agit d'un groupage des clients qui ont une facture commune mais des points de rammassage différant .
En se qui conserne la fusion des cellules c'est qui ma parut le plus simple pour conserver le format de base des feuilles "Factures "et "Détail " ,mais Merçi pour le conseil je tiendrais compte dans le futur .
Skoobi : Merçi pour le fichier je n'ais pas eu le temps de le regarder mais je te tient au courant des que possible .
En espèrant avoir rèpondu à t'es questions je vous dis à plus sur se fil .
BR44
arff, juste un petit soucis de soustraction .
Les 2 modifications à faire dans le bouton "tournée 1":
Code:
Private Sub CommandButton2_Click() 'boutton "TOURNEE 1"
'J'enregistre les fiches pour la "T1"
If Range("G3").Value >= "C001" And Range("G3").Value <= "C054" Then
If Range("G3").Value = "C001" Then
L = 1
Else: L = 3
End If
'si une modification n'est pas en cours
If trouverefc Is Nothing Then
Sheets("Détail").Range("1:29").Copy Sheets("T1").Range("A65536").End(xlUp)(L)
Sheets("Facture").Range("1:50").Copy Sheets("T1").Range("A65536").End(xlUp).Offset(1, 0)
Else
'si une modification est en cours
Sheets("Détail").Range("A1:G29").Copy trouverefc.Offset(-2, -6)
Sheets("Facture").Range("A1:G49").Copy trouverefc.Offset([B][COLOR="Red"][SIZE="3"]27[/SIZE][/COLOR][/B], -6)
End If
End If
'J'envoie "l'AnnexFacture1"vers la feuille"T1"
If Range("G3").Value = "C054" Then
'si une modification n'est pas en cours
If trouverefc Is Nothing Then
Sheets("AnnexFacture1").Range("1:50").Copy Sheets("T1").Range("A65536").End(xlUp).Offset(1, 0)
Else
'si une modification est en cours
Sheets("AnnexFacture1").Range("A1:G49").Copy trouverefc.Offset([B][COLOR="Red"][SIZE="3"]73[/SIZE][/COLOR][/B], -6)
End If
End If
End Sub
Je te souhaite de bonnes fêtes de fin d'année car je ne serais plus là pendant quelque jours.
ce petit message pour faire un point de la situation .
1°) le program fonctionne sauf pour une petite chose suivante:
Ma formule Excel qui sert de liaison entre mon fichier "Facture" et mon fichier "Clients" se dèclace aprés les modification se qui provoque une erreur "NA!" lors de l'affichage de l"addresse du client .
Je voulais savoire si il serait possible de modifier la ligne de program qui suit pour qu'elle ne copie que le "formats" et les "valeures "sans la formule ? :
2°) J'ai mis la même procèdure en place pour la feuille "GroupageClients" et la la macro me fais une multicopie des clients selectionnés . donc là je ne vois pas comment faire pour le rectifier ?
Bon voilà où j'en suis en se lendemain de fête qui j'èspère ses bien passè . Je vous souhaite donc bon rèveillon de fin d'année à tous et toutes et vous dis à bienôt sur se fil .
Merçi à tous ceux qui lirons et rèponderont à se fil
Br44
Merçi pour la rapidité de ta rèponse . Aprés avoir testé ta solution j'ai maintenant une erreure "1004 " "Zonne de collage differente de celle copié" et cela copie toujour la formule ce qui à pour consequence d'annuler toutes les adresses clients (Celle en cours + toutes les autres ) en affichant "NA!" .
la cause de cette erreure est situé au niveau de " .PasteSpecial xlPasteValues"
Bizzarie du fait que j'ai procédé de la même manière pour la partie avant modification et que ça marche ?
Ci-dessous la partie de la macro complète :
Private Sub CommandButton2_Click() 'boutton "TOURNEE 1"
'J'enregistre les fiches pour la "T1"
If Range("G3").Value >= "C001" And Range("G3").Value <= "C054" Then
If Range("G3").Value = "C001" Then
L = 1
Else: L = 3
End If
'si une modification n'est pas en cours
If TrouveRefC Is Nothing Then
Sheets("Détail").Range("1:29").Copy Sheets("T1").Range("A65536").End(xlUp)(L)
With Sheets("Facture").Range("1:50").Copy
End With
With Sheets("T1").Range("A65536").End(xlUp).Offset(1, 0)
.PasteSpecial Paste:=xlValues
.PasteSpecial Paste:=xlFormats
End With
Else
'si une modification est en cours
Sheets("Détail").Range("A1:G29").Copy TrouveRefC.Offset(-2, -6)
With Sheets("Facture").Range("A1:G50").Copy
End With
With TrouveRefC.Offset(27, -6)
.PasteSpecial Paste:=xlValues 'Modifier pour le teste
.PasteSpecial Paste:=xlFormats
End With
End If
End If
Bon voilà où j'en suis je te dis à plus sur se post et encore merçi pour ta participation .
Br44
je ne vois pas l'initialisation de ta variable "TrouveRefC". Et je ne sais pas de quel type elle est (range, boolean ...) . Sans ces éléments, difficile pour moi de t'en dire plus...