VBA copie entre feuille

francois_

XLDnaute Nouveau
bonjour
J'ai besoin de votre aide pour débloquer mon manque d'imagination sur une macro de copie de données entre feuille.
Sur le fichier exemple joint, feuille PDP, pour chaque code TF (colonne A), j'ai une formule (exemple en C2:M2) qui va chercher la demande client dans la feuille "données_client". C'est simple, la liste est triée dans le même sens dans les deux feuilles.
Je suis dans l'embarras avec les lignes jaune( exemple C3:M3) où je doit aller chercher les données dans la feuille "données_pdp" et où le trie est diffèrent.
De plus j'ai des articles dans la feuille "pdp" qui ne se trouveront pas dans la feuille "données_pdp", exemple tf0011.

J'ai essayer avec des formules mais cela devient vite lourd car dans mon fichier j'ai 3000 lignes d'article. En plus, je dois confirmer ou modifier ces chiffres (ligne jaune).
Je pense que le VBA s'impose.

merci pour le coup de main pour démarrer.
 

Pièces jointes

  • test pdp.xls
    19 KB · Affichages: 54
  • test pdp.xls
    19 KB · Affichages: 43

job75

XLDnaute Barbatruc
Re : VBA copie entre feuille

Bonjour francois_,

Feuille "pdp" formules en C2 et C3 à tirer vers la droite, puis à recopier plus bas :

Code:
=SI(NB.SI(données_client!$A:$A;$A2);INDEX(données_client!B:B;EQUIV($A2;données_client!$A:$A;0));"")
Code:
=SI(NB.SI(données_pdp!$A:$A;$A2);INDEX(données_pdp!B:B;EQUIV($A2;données_pdp!$A:$A;0));"")
Edit : bonjour Pierre, heureux de te croiser, comment vas-tu ?

A+
 
Dernière édition:

francois_

XLDnaute Nouveau
Re : VBA copie entre feuille

merci pour vos propositions et pour la réactivité

dans l'ordre d'arrivée:
Pierrejean, j'ai un peu de mal à transposer la fonction, en fait je me perd dans les changements de ligne et colonne

Function PDP(cel)
code = Cells(cel.Row - 1, 1)
Set c = Sheets("données_pdp").Columns(1).Find(code, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
PDP = Sheets("données_pdp").Cells(c.Row, cel.Column - 1)
Else
PDP = "non renseigné"
End If
'PDP = code
End Function


code = Cells(cel.Row - 1, 1) si j'ai compris; le cel.row fait référence à la cellule où est écrit la formule ? le -1 va chercher la colonne A
PDP = Sheets("données_pdp").Cells(c.Row, cel.Column - 1) c.row fait référence à la ligne où sont les données cherchées et cel.column-1 fait référence au décalage entre la cellule où est écrit la formule dans la feuille PDP et la cellule où est la donnée cherchée dans la feuille "donnees_pdp" ?

j'ai tout bon ?
pourtant j'ai toujours un problème avec mon fichier, je cherche....
 

francois_

XLDnaute Nouveau
Re : VBA copie entre feuille

job75, cela fonctionne aussi, merci
juste une question ou deux complémentaires.
laquelle des deux versions consomme le moins de ressource ?, puisque je dois copier ces formules sur plusieurs milliers de cellules.
pour la version de pierrejean; comment recalculer la fonction personnalisée? si je change une donnée, la fonction garde l'ancien affichage. un F9 ne change rien. il faut obligatoirement faire F2 et entrée dans la cellule pour qu'elle recalcule !!!! et ceux pour chaque cellule, cela m'inquiète.
 
Dernière modification par un modérateur:

pierrejean

XLDnaute Barbatruc
Re : VBA copie entre feuille

Re

Pour les besoins comparés en ressource je n'en ai pas la moindre idée
Par contre pour le calcul vois cette version (Application.calculate dans le module de la feuille Pdp

PS: coucou Gerard (hormis les désagréments liés à l'age on peut dire que ça va bien )
 

Pièces jointes

  • test pdp.xls
    51 KB · Affichages: 42
  • test pdp.xls
    51 KB · Affichages: 44

francois_

XLDnaute Nouveau
Re : VBA copie entre feuille

pierrejean
cela ne change rien, je ne comprend pas comment ce fait la mise à jour de ce type de fonction !
si tu changes des données dans la feuille "données_pdp" je n'arrive pas a faire la mise à jour dans la feuille "pdp"
 

francois_

XLDnaute Nouveau
Re : VBA copie entre feuille

je continue la construction de ce fichier et je butte à nouveau sur une erreur de macro.

Code:
Dim Cellule As Range
    Dim p As Long
    
    For p = 22 To 3669 Step 11
  

            'Boucle sur chaque cellule de la plage A1:A10
            For Each Cellule In Range(Cells(p, 6), Cells(p, 26))
                ' coller le résultat de la formule pdp
                  Cellule = Application.WorksheetFunction.PDP(Cellule)
            Next Cellule
     Next p

erreur 438 sur Cellule = Application.WorksheetFunction.PDP(Cellule)

la fonction pdp fonctionne très bien.
mais je n'arrive pas à la coller dans les cellules concernées.

avec Cellule.FormulaLocal = "=pdp(cellule)", la macro ne génère plus d'erreur mais la fonction pdp bug,
avec une double boucle Worksheets("PDP").Cells(p, q).FormulaLocal = "=pdp(Cells(p, q))" j'ai erreur 1024

une idée d'une bonne orthographe?
 

francois_

XLDnaute Nouveau
Re : VBA copie entre feuille

pierrejean catastrophe, je viens de passer à excel 2010 et les surprises ne sont pas bonnes.
ta fonction PDP ne fonctionne plus.
dans le classeur exemple, les cellules avec =pdp (--) font toutes #nom?
comment est ce possible ? j'ai autorisé les macros
y a t'il quelque chose de spécial avec 2010 pour les fonctions?
merci par avance
 

Discussions similaires

Réponses
10
Affichages
326
Réponses
5
Affichages
387
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 677
Messages
2 090 815
Membres
104 673
dernier inscrit
lautard