Se connecter avec
S'enregistrer | Connectez-vous

macro pour transfert de données avec mise en forme

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

suite....
(ça commence bien)
bon alors je m'explique:
J'ai sur ma feuilles 1 , allant des colonnes C à G et de la ligne 2 à 198 des données sous forme de nombres entiers allant de 1 à 50.
Je dois les transférer sur la feuille 2 dans des colonnes numérotées de 1 à 50 sous forme des cases grisées.
Ex : sur la feuille 1 ligne 2 de la case C2 à G2 j'ai respectivement les nombres 37, 21, 14, 43, 22. La macro devra donc aller griser les cases de la feuille 2, ligne 2 , colonnes 38, 22, 15, 44, 23.
puis pareil avec les 196 autres lignes.
Merci par avance de votre aide.
Spice
Expert Programmation

KangOl a dit :
Nous ne faisons pas le travail à votre place.
Tout sujet concernant une demande de résolution de TP ou d'exercice sera immédiatement fermé.

Dura lex, sed lex.

Comme il n'y pas a de question, je me demandais : exiges-tu que nous le fassions à ta place ?
Bien sûr que non. Je t'invite donc à poser une question précise sur un travail que tu aurais commencé mais que tu n'arriverais pas à conclure.
Un extrait de code serait le bienvenu.

Ah! ok!
Bien sur que je n'exige rien du tout. Je suis juste perdue et je cherche de l'aide.
J'ai eu une formation rapide pour mon boulot ce vendredi au cours de laquelle j'ai créé une macro.
Mais pour m'exercer et ne pas perdre mes acquis qui sont très faibles malheureusement, je pratique chez moi , pour moi...Ce n'est ni pour un devoir, ni pour un TP et ni pour mon travail.
Il est vrai que j'aurais du vous envoyer ce que j'ai déjà fait cad pas grand chose , mais c'est ma première macro perso alors je bloque.
D'ailleurs je ne sais même pas insérer une macro dans le forum....
Bon je vais essayer....
A plus tard et merci pour votre explication .


Sub Macro5()
'
' Macro5 Macro
' Macro enregistrée le 18/11/2007 par spice
'

'

Dim n As Integer

Sheets("feuil1").Range("C2:G2").Select
For n = 1 To 50
If Value = n Then
goto Sheets("Feuil2").range(Cells(2,(n+1)).Select 'cette ligne n'est pas validée'
Selection.Interior.ColorIndex = 15
End If
Next

End Sub


Voilà la macro que j'ai créé , qui doit correspondre à ce que je vous ai décrit précédemment.
Qu'est-ce qui ne va pas dans la ligne qui n'est pas validée?
comment l'étendre au reste des lignes?
J'ai un autre problème, je n'arrive pas à l'activer pour la tester.

merci par avance de l'aide que vous pourriez m'apportée.
Bonne journée
Expert Programmation

>> Je suis juste perdue et je cherche de l'aide.
Bienvenue sur PPC :) 

>> Ce n'est ni pour un devoir, ni pour un TP et ni pour mon travail.
Nous n'interdisons pas l'aide aux devoirs, aux TPs ni au boulot. Au contraire. Ce qui est interdit, c'est de balancer un énoncé et d'attendre que quelqu'un d'autre le fasse à l'oeil. C'est honteux si c'est pour un travail rémunéré, inutile si c'est un travail scolaire.

>> ce que j'ai déjà fait cad pas grand chose
C'est déjà ça. Les néophytes sont acceptés.

J'ai sur ce site deux casquettes : Je suis d'une part un membre très actif qui apporte volontiers son aide sur tout ce qui touche à Excel et VB en particulier. Et d'autre part, je suis modérateur. Je dois animer cette partie du forum ( :)  ) et y faire respecter le règlement ( ), lequel tu ne respectes toujours pas. Retourne le lire, srtout en ce qui concerne l'usage de la balise [code].



EDIT: ( Je retire ma casquette de méchant modérateur ) Il semble que tu nous écrives des Amériques :/  Ces messages ne vont être interactifs qu'à douze heure de décalage. Dommage, j'ai pas mal de choses (trucs, astuces, bonnes façons de faire) à te proposer. Si tu es patient, pas de problème. :) 

Gentil modérateur, :) 

Je n'écris pas des Amériques mais la journée, je bosse.... un peu...:D 

Je suis très patientE et très interesséE par tes trucs, astuces et bonne façons de faire que tu me proposes. Je les cherche sur le net depuis plusieurs jours mais visiblement , je ne suis pas très douéE.
Au plaisir de te lire cher Zeb!
Expert Programmation

Tu l'as lu ce règlement ?


Comme tu es une fille, et que tu sembles très gentille ( :kaola:  à tous les autres ), je vais commencer à t'aider avant que tu ais mis ce message http://www.presence-pc.com/forum/ppc/Programmation/macr... correctement en forme.

Tu veux colorier une case. D'accord. En fonction d'une autre. Encore d'accord.
Et ça, cinquante fois. Bien.

Donc il faut regarder la valeur d'une cellule, d'une feuille.
Relisons la phrase à l'envers pour faire un travelling avant :

feuille/cellule/valeur

Demandons la traduction de ces mots :
Français | VBA/Excel
-------------------+-------------------
Feuille | Sheet
Feuilles | Sheets
Feuille de calcul | Worksheet
Feuilles de calcul | Worksheets
Cellule |
Cellules | Cells / Range
Valeur | Value


Donc plutôt que de considérer les feuilles, on ne va considérer que les feuilles de calcul.
Curieusement, UNE cellule, ça n'existe pas en VBA/Excel. Par contre, une plage de plusieurs cellules, ça existe.
Tu te souviens de tes cours de maths du collège ? Un ensemble de 1 élément, ça reste un ensemble. Pour nos besoins, nous
considérerons des plages (Range) de une cellule.

Or, donc. Regardons la valeur de la cellule B3 de la feuille de calcul Feuil1 :
  1. Sub Toto()
  2. Debug.Print WorkSheets("Feuil1").Range("B3").Value
  3. Debug.Print WorkSheets("Feuil1").Cells(3, 2).Value
  4. End Sub


Si tu ne vois rien, ouvre l'éditeur VB et appuye sur CTRL+G. Cela ouvre la fenêtre Exécution.
Debug.Print permet d'écrire dans cette fenêtre. Pratique pour la mise au point ;) 

Les fonctions Range et Cells, pour une cellule, sont équivalentes.

Maintenant, colorions une cellule :
  1. Sub Toto()
  2. WorkSheets("Feuil1").Range("B3").Interior.ColorIndex = 15
  3. WorkSheets("Feuil1").Cells(3, 2).Interior.ColorIndex = 15
  4. End Sub


Bon. Maintenant on revient à l'énoncé.

Lire la valeur dans Feuil1/B3. Nous y lisons 12, par exemple. Il faut donc colorier Feuil2/L3 :

  1. Dim valeur As Integer
  2.  
  3. valeur = WorkSheets("Feuil1").Cells(3, 2).Value
  4. WorkSheets("Feuil2").Cells(3, valeur).Interior.ColorIndex = 15


x 50

  1. Dim valeur As Integer
  2. Dim colonne As Integer
  3.  
  4. For colonne = 1 To 50
  5. valeur = WorkSheets("Feuil1").Cells(3, colonne).Value
  6. WorkSheets("Feuil2").Cells(3, valeur).Interior.ColorIndex = 15
  7. Next


Bon, maintenant, on fait varier la ligne :

  1. Dim valeur As Integer
  2. Dim colonne As Integer
  3. Dim ligne As Integer
  4.  
  5. For ligne = 2 To 196
  6. For colonne = 1 To 50
  7. valeur = WorkSheets("Feuil1").Cells(ligne, colonne).Value
  8. WorkSheets("Feuil2").Cells(ligne, valeur).Interior.ColorIndex = 15
  9. Next
  10. Next


Et voilà !

:) 
Yes!
C'est trop fort!
ça marche!
C'est génial!
<:o )
Voilà ma macro définitive!

  1. Sub Macro5()
  2. '
  3. ' Macro5 Macro
  4. ' Macro enregistrée le 18/11/2007 par spice
  5. '
  6.  
  7. Dim valeur As Integer
  8. Dim colonne As Integer
  9. Dim ligne As Integer
  10.  
  11. For ligne = 2 To 198
  12. For colonne = 2 To 6
  13. valeur = Worksheets("Feuil1").Cells(ligne, colonne).Value
  14. Worksheets("Feuil2").Cells(ligne, valeur + 1).Interior.ColorIndex = 15
  15. Next
  16. Next
  17. For ligne = 2 To 198
  18. For colonne = 7 To 8
  19. valeur = Worksheets("Feuil1").Cells(ligne, colonne).Value
  20. Worksheets("Feuil2").Cells(ligne, valeur + 51).Interior.ColorIndex = 15
  21. Next
  22. Next
  23.  
  24.  
  25. End Sub


C'est excellent!!!

Merci Oh grand Zeb pour toutes ces explications!
J't'adore!(A)
Il va falloir que je me trouve un autre exercice pour faire encore appel à ton savoir. :$
A très vite
Biz (k)

PS: le collège est trop loin pour que je me souvienne de mes cours de maths....
Lassé par la pub ? Créez un compte