Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1421 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Copie d'une cellule lors d'un chgt de valeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Copie d'une cellule lors d'un chgt de valeur

n°1418942
Profil sup​primé
Posté le 03-08-2006 à 14:47:21  answer
 

Bonjour,
 
Je ne trouvais pas de titre explicite, désolée
 
Mon problème
--> j'ai 64 fichiers (un par entité) dans lesquels un onglet "cdd accroi" (= cdd pour accroissement d'activité) m'intéresse  
j'arrive donc à ouvrir le fichier, copier la plage qui m'intéresse et la coller dans...
 
--> ... un fichier récapitulatif des 64 entités
 
Cependant ce que je voudrais c'est le N° de l'entité dans la colonne A à chaque chgt d'entité
Ce n° est présent en cellule A2 sur chacun des 64 fichiers
 
Comment le récupérer et le mettre à chaque chgt d'entité ?
 
MERCI
 
mon code actuel et l'erreur est entre ""
 

Code :
  1. Sub Creer_Base_Accroi()
  2. Application.ScreenUpdating = False  'ne pas voir ce qui se passe à l'écran, diminue besoin mémoire
  3. Application.DisplayAlerts = False
  4. For lgn = 29 To 29   'pour boucler sur les lignes
  5. Sheets("Ref" ).Select   'on se place sur la feuille de référence
  6. regate = Cells(lgn, 1).Value    'on variabilise, indic = cellule ligne de la boucle, colonne 1
  7. Workbooks.Open ("U:\PUBLIC\DOTC\DFI\CGC\Commun\Remontee Outil FTV3\07_2006\" & regate & ".xls" )
  8. Sheets("CDD accroi" ).Select
  9. Range("A9:G200" ).Select
  10. Selection.Copy
  11. Windows("CDD_test.xls" ).Activate
  12. Sheets("Base_Accroi" ).Select
  13.   If [a3] = "" Then Range("b3" ).Activate Else Selection.End(xlDown).Select
  14.     ActiveCell.Activate
  15.     ActiveCell.Offset(1, 0).Activate
  16.       ActiveSheet.Paste
  17.    Range("a1" ).Select
  18.  
  19.    '' Windows(regate & ".xls" ).Activate
  20.    '' Range("a2" ).Select
  21.    '' Selection.Copy
  22.    '' Windows("CDD_test.xls" ).Activate
  23.    '' ActiveCell.Activate
  24.    ''   ActiveCell.Offset(0, -1).Activate
  25.  
  26.      ActiveSheet.Paste
  27.  
  28.  
  29.      Range(" a1 " ).Select
  30. Workbooks(regate & ".xls" ).Close  'fermer le fichier
  31. Next lgn   ' on continue sur 2nd, 3èm.. indicateur (boucle)
  32. Application.ScreenUpdating = True
  33. End Sub

mood
Publicité
Posté le 03-08-2006 à 14:47:21  profilanswer
 

n°1419412
Profil sup​primé
Posté le 04-08-2006 à 09:06:32  answer
 

J'ai un peu avancé mais ce n'est pas encore ca...
 
J'ai toujours un souci : je mets des screenshot, ca aidera peut-être...
(retravailler les fichiers me prendrait trop de temps étant donné nb d'onglets..)
 
Le fichier-source est le suivant (enfin y'en a 64 comme ca )
http://pix.nofrag.com/b4/35/4a15e6ba410a3399c1a77ab07e82.jpg
 
Le fichier destination se présente comme suit :
http://pix.nofrag.com/e5/0c/8668ef70cf3b95fbb1cd20f4c2a9.jpg
 
 
Donc la 1ère boucle marche correctement comme vous le voyez...
 
Mais les suivantes ne marchent pas ; là j'ai bouclé sur 2 entités :  
 
- pb 1 : décalage de colonne où l'on retrouve les données
 
- pb 2 : il m'a mangé une ligne de la 1ère entité...
 
- pb 3 : le n° entité dans le fichier source est une formule ..  
donc le 1er marche bien,  
='U:\PUBLIC\DOTC\DFI\CGC\Commun\Remontee Outil FTV3\07_2006\[671650.xls]Notice'!H4&" "&'U:\PUBLIC\DOTC\DFI\CGC\Commun\Remontee Outil FTV3\07_2006\[671650.xls]Notice'!I4
 
 
mais ensuite le 2nd se décale
http://pix.nofrag.com/3b/46/dd136b1ff979caf5738d065f1e56.jpg
='U:\PUBLIC\DOTC\DFI\CGC\Commun\Remontee Outil FTV3\07_2006\[671920.xls]Notice'!H10&" "&'U:\PUBLIC\DOTC\DFI\CGC\Commun\Remontee Outil FTV3\07_2006\[671920.xls]Notice'!I10
 
pour pallier à cela, il faudrait juste un copier-coller , collage spécial, valeur
mais ca se dit comment en VB ?
 
MERCI
 
 
 
Le code actuel

Code :
  1. Sub Creer_Base_Accroi()
  2. Application.ScreenUpdating = False  'ne pas voir ce qui se passe à l'écran, diminue besoin mémoire
  3. Application.DisplayAlerts = False
  4. Dim maplage As Range
  5. For lgn = 29 To 30   'pour boucler sur les lignes
  6. Sheets("Ref" ).Select   'on se place sur la feuille de référence
  7. regate = Cells(lgn, 1).Value    'on variabilise, indic = cellule ligne de la boucle, colonne 1
  8. Workbooks.Open ("U:\PUBLIC\DOTC\DFI\CGC\Commun\Remontee Outil FTV3\07_2006\" & regate & ".xls" )
  9. Sheets("CDD accroi" ).Select
  10. Range("A9:G200" ).Select
  11. Selection.Copy
  12. Windows("CDD_test.xls" ).Activate
  13. Sheets("Base_Accroi" ).Select
  14.   If [a2] = "" Then Range("b1" ).Activate Else Selection.End(xlDown).Select
  15.     ActiveCell.Activate
  16.     ActiveCell.Offset(1, 0).Activate
  17.       ActiveSheet.Paste
  18.    Range("a1" ).Select
  19.  
  20.  
  21. Workbooks(regate & ".xls" ).Activate
  22. If Workbooks("CDD_test.xls" ).Worksheets("Base_Accroi" ).Range("a2" ).Value = "" Then
  23. Set maplage = Workbooks("CDD_test.xls" ).Worksheets("Base_Accroi" ).Range("a2" )
  24. Else
  25. Set maplage = Workbooks("CDD_test.xls" ).Worksheets("Base_Accroi" ).Range("a2" ).End(xlDown).Offset(1, 0)
  26. End If
  27. Range("A2" ).Copy Destination:=maplage
  28.  
  29. Workbooks(regate & ".xls" ).Close  'fermer le fichier
  30. Next lgn   ' on continue sur 2nd, 3èm.. indicateur (boucle)
  31. Application.ScreenUpdating = True
  32. End Sub

n°1419539
Profil sup​primé
Posté le 04-08-2006 à 11:40:37  answer
 

On s'approche, on s'approche...
 
http://pix.nofrag.com/42/d8/b20aaf2e29ead1328e7d46f0487c.jpg
 
 
le code actuel

Code :
  1. Sub Creer_Base_Accroi()
  2. Application.ScreenUpdating = False  'ne pas voir ce qui se passe à l'écran, diminue besoin mémoire
  3. Application.DisplayAlerts = False
  4. Dim maplage As Range
  5. For lgn = 29 To 30   'pour boucler sur les lignes
  6. Sheets("Ref" ).Select   'on se place sur la feuille de référence
  7. regate = Cells(lgn, 1).Value    'on variabilise, indic = cellule ligne de la boucle, colonne 1
  8. Workbooks.Open ("U:\PUBLIC\DOTC\DFI\CGC\Commun\Remontee Outil FTV3\07_2006\" & regate & ".xls" )
  9. Sheets("CDD accroi" ).Select
  10. Range("A9:G200" ).Select
  11. Selection.Copy
  12. Windows("CDD_test.xls" ).Activate
  13. Sheets("Base_Accroi" ).Select
  14. Range("b1" ).Activate
  15.   If [b2] = "" Then Range("b1" ).Activate Else Selection.End(xlDown).Select
  16.     ActiveCell.Activate
  17.     ActiveCell.Offset(1, 0).Activate
  18.       ActiveSheet.Paste
  19.    Range("a1" ).Select
  20.  
  21.  
  22.  
  23. Workbooks(regate & ".xls" ).Worksheets("CDD accroi" ).Range("A2" ).Copy
  24. Workbooks("CDD_test.xls" ).Worksheets("Base_Accroi" ).Range("A65536" ).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
  25. Workbooks(regate & ".xls" ).Close  'fermer le fichier
  26. Next lgn   ' on continue sur 2nd, 3èm.. indicateur (boucle)
  27. Application.ScreenUpdating = True
  28. End Sub


 
Le hic vient du xlUp lors de la copie du n° entité
car en fait là avec ce code c'est logique qu'il copie sous le 1er n° de l'entité
moi je voudrais qu'il copie en face de KOSIk, qui est le 1er nom de l'entité Holtzheim
 
Et je bloque..
MERCI
 
 
 
NOBODY POUR M'AIDER ?!?!

n°1419546
jpcheck
Pioupiou
Posté le 04-08-2006 à 11:44:51  profilanswer
 


tes lignes de code :  
Workbooks(regate & ".xls" ).Worksheets("CDD accroi" ).Range("A2" ).Copy
Workbooks("CDD_test.xls" ).Worksheets("Base_Accroi" ).Range("A65536" ).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
 
ca récupere ce qu'il y a dans la cellule A2 de CDD et ca le copie en dernière ligne de la colonne A dans Base.
 
Et toi tu cherches à le mettre où exactement ? qu'est-ce que Kosik?

n°1419807
Profil sup​primé
Posté le 04-08-2006 à 16:10:07  answer
 

je veux mettre le n° de l'entité en face du 1er nom de personne (ex : kosik) collé
- pour avoir la liste des personnes par entité -

n°1420053
galopin01
Posté le 04-08-2006 à 20:56:20  profilanswer
 

tu peux me préciser dans quel classeur se trouve la Sheets("Ref" )
Est-ce Workbooks("CDD_test.xls" ) ?

n°1420056
Profil sup​primé
Posté le 04-08-2006 à 20:57:31  answer
 

Oui l'onglet "ref" est dans CDD_test
avec en colonne 1, tous les n° entités, pour réaliser la boucle

n°1420078
galopin01
Posté le 04-08-2006 à 21:19:57  profilanswer
 

Dernière question :
pourquoi  "A9:G200"
Est-ce parce que tu ne sais pas détecter la zone qui t'intéresse alors tu ratisses large ?

n°1420090
galopin01
Posté le 04-08-2006 à 21:27:39  profilanswer
 

Bon on va faire comme ça sans attendre ta réponse...
Tu me testes ça svp :

Code :
  1. Sub Creer_Base_Accroi()
  2. Dim regate$, iRC%
  3. Application.ScreenUpdating = False
  4. Application.DisplayAlerts = False
  5. For lgn = 29 To 30
  6. regate = Sheets("Ref" ).Cells(lgn, 1)
  7. 'Détection de la première ligne libre
  8. iRC = Workbooks("CDD_test.xls" ).Worksheets("Base_Accroi" ).Range("B65536" ).End(xlUp).Row + 1
  9. Workbooks.Open ("U:\PUBLIC\DOTC\DFI\CGC\Commun\Remontee Outil FTV3\07_2006\" & regate & ".xls" )
  10. With Workbooks(regate & ".xls" ).Worksheets("CDD accroi" )
  11.   'Copie Range("A2" ) en colonne A sur la première ligne libre de la cible (iRC)
  12.   Workbooks("CDD_test.xls" ).Worksheets("Base_Accroi" ).Range("A" & iRC) = .Range("A2" )
  13.   'Copie la zone ("A9:G200" ) en colonne A sur la première ligne libre
  14.   .Range("A9:G200" ).Copy Workbooks("CDD_test.xls" ).Worksheets("Base_Accroi" ).Range("B" & iRC)
  15. End With
  16. Workbooks(regate & ".xls" ).Close  'fermer le fichier
  17. Next lgn   ' on continue sur 2nd, 3èm.. indicateur (boucle)
  18. Application.ScreenUpdating = True
  19. End Sub


Nota : Dans ce forum on ne peut pas récupérer les lignes de codes facilement par Copier / Coller
Pour le récupérer facilement par Copier / Coller, il faut que tu fasses comme si tu voulais modifier ma réponse  
(en cliquant sur le deuxième icone "crayon" )
http://perso.orange.fr/galopin01/images/modif.jpg
 
Si j'mé pas trompé ça devrait être bon...
A+


Message édité par galopin01 le 04-08-2006 à 22:25:24
n°1420109
galopin01
Posté le 04-08-2006 à 21:53:33  profilanswer
 

Yavait au minimum une 'tite erreur sans gravité dans les déclarations :
 
Dim regate$, iRC%

mood
Publicité
Posté le 04-08-2006 à 21:53:33  profilanswer
 

n°1420129
galopin01
Posté le 04-08-2006 à 22:28:56  profilanswer
 

L'pauvre : l'en reste sans voix.
C'est l'émotion qui la terrassé !
 :D  
A moins que ce soit le marchand de sable...
Allez bonne nuit !
A+

n°1420285
Profil sup​primé
Posté le 05-08-2006 à 09:20:44  answer
 

Oui c'était plutôt Koh Lanta qui m'a fait m'absenter :d
 
Je testerai ca lundi, car c'est pour le travail :)
Sinon pour les déclarations de variable, j'en fais jamais  :ouch:  
 
Merci
 
et pour répondre à ta question

Citation :

pourquoi  "A9:G200"
Est-ce parce que tu ne sais pas détecter la zone qui t'intéresse alors tu ratisses large ?


Je ne sais pas détecter car la plage est variable  :(

n°1420286
Profil sup​primé
Posté le 05-08-2006 à 09:23:11  answer
 

J'ai plusieurs questions pour comprendre  
 
- à quoi sert le "xwith.. end with" ?
 
- ligne 14 : pourquoi il y a un point avant range ?
 
Merci

n°1420442
kiki29
Posté le 05-08-2006 à 15:50:58  profilanswer
 

cela rend le code plus lisible ,accélère l'exécution des procédures et permet d'éviter des saisies répétitives, quand il est complexe et avec beaucoup d'imbrications , ici il t'évite de répéter dans l'exemple de Galopin
Workbooks(regate & ".xls" ).Worksheets("CDD accroi" )
devant le .Range
 
Voir Aide en ligne


Message édité par kiki29 le 05-08-2006 à 15:52:01
n°1420585
galopin01
Posté le 05-08-2006 à 21:31:13  profilanswer
 

bonsoir et merci kiki29,
Merci, c'est exactement celà.
Nota : il ya a aussi un point au début de la ligne 16, ce qui évite également la répétition devant le .Range
A+


Message édité par galopin01 le 05-08-2006 à 21:33:40
n°1421309
Profil sup​primé
Posté le 07-08-2006 à 10:48:49  answer
 

Je viens de tester et ca marche nickel :)
 
Maintenant je vais juste chercher (je sais pô si c'est possible)
d'étirer automatiquement les n° entités face aux personnes les concernant
car le N° n'est présent que face à la première personne de l'entité

n°1421339
Profil sup​primé
Posté le 07-08-2006 à 11:11:41  answer
 

J'essaie avec ca mais c'est à travailler
 

Code :
  1. Sub Etirer_Regate()
  2. For i = 3 To 5000
  3. If ("A &i-1" ).Value <> "" AND ("A &i+1" ).Value <> ("A &i-1" ).Value
  4. Then ["A &i"]= ("A &i-1" ).Value
  5.  
  6. End Sub

n°1421488
galopin01
Posté le 07-08-2006 à 14:29:42  profilanswer
 

Bonjour,
 
Sub Etirer_Regate()
i = 1
Do While Cells(i, 2) <> ""
If Cells(i, 1) = "" Then Cells(i, 1) = Cells(i - 1, 1)
i = i + 1
Loop
End Sub
 
A+

n°1421592
Profil sup​primé
Posté le 07-08-2006 à 15:48:00  answer
 

la macro foctionne nickel  
 
j'aurai pu chercher longtemps avec mes value ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Copie d'une cellule lors d'un chgt de valeur

 

Sujets relatifs
[vbs][résolu] desactiver prompt avec une valeur par defaut[VBA-E] Suppression de cellule avec colonnes fixes
[vba-access]Teste sur valeur des champs puis publipostageEn VBA comment changer la valeur input de type hidden d'un formulaire
Est-il possible de charger une page WEB dans une cellule de tableau ?Positionner des éléments dans un cellule de tableau
Copie de cellules avec conditionsColler une valeur en mémoire en provenance d'excel dans une macro
survol de cellule[VBA-E] Gérer le changement de sélection d'une cellule
Plus de sujets relatifs à : Copie d'une cellule lors d'un chgt de valeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR