Publicité
Offres partenaires
Actualités relatives

Nouvel objectif macro à réduction de vibrations Nikon

Publié le 23 février 2006

Nikon vient d’annoncer par la voie d’un communiqué de presse la mise sur le marché d’un objectif macro qui a la particularité de disposer d’un système de réduction des vibrations (VR II). L&rsqu Lire la suite

Reclusa : le clavier pour joueurs de Microsoft arrive en France

Publié le 15 mai 2007

Le clavier pour joueurs de Microsoft présenté en début d’année (cf. Reclusa, le clavier pour joueurs de Microsoft) commence à faire son apparition en France. Ce clavier coproduit avec Razer possède 6 touches macro (les macros sont enregistrées dans le c Lire la suite

Le Xacti S70 arrive chez Sanyo

Publié le 23 avril 2007

Sanyo lance un nouvel appareil photo 7 Mpixels, le Xacti VPC-S70. Cet appareil de type point-and-shoot offre un zoom optique 3x, un écran LCD de 2,5" (115 000 pixels) et une sensibilité maximale de 800 ISO. Il possède un mode macro à 5 cm, son mode vidéo Lire la suite

Test du bridge FinePix S5700 de FujiFilm

Publié le 24 avril 2007

Notre confrère Les Numérique vient de publier un test du FinePix S5700 de FujiFilm, un bridge équipé d’un capteur CCD 7 Mpixels, d’un zoom optique 10x et d’un mode macro à 1 cm. Disponible à partir de , le S5700 propose-t-il un bon rapport qualité/prix&nb ... Lire la suite

Les derniers tests

Le test des MacBook et MacBook Pro

Publié le 31 octobre 2008

Test des nouveaux MacBook alu et leur version Pro. Les performances sont elle à la hauteur de leur design ? Lire la suite

Comparatif : disques durs externes 1 To

Publié le 30 octobre 2008

Tous les disques durs externes que nous testons aujourd’hui ont une capacité d’un téraoctet, mais les offres, leurs performances et leur consommation diffèrent considérablement. Un produit se démarque clairement de la concurrence. Lire la suite

TNT HD : infos utiles

Publié le 30 octobre 2008

La TNT HD arrive enfin en France. Quelles chaines sont disponibles ? Quelle qualité faut-il attendre ? La TNT HD est-elle vraiment la révolution annoncée ? Lire la suite

Les téléphones tactiles peuvent-ils remplacer les PC ?

Publié le 24 octobre 2008

Les téléphones tactiles sont-ils capables de rivaliser avec les PC ? Lire la suite

Les ressources relatives
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » SOS macro
 

SOS macro

Il y a 203 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici



Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : SOS macro
 
Plus d'informations

Bonjour à tous !
j'ai besoin de votre aide, c'est assez urgent. Pour mon stage, je fais un fichier de suivi de frais sur excel. J'ai fait quelques macros mais très basiques. J'ai besoin d'en faire une plus compliquée qui recquiert les compétences d'un connaisseur !
J'explique mon problème:
Je veux, sur ma feuille "frais généraux", sélectionner la zone (B17;I104)
Pour cette zone, à chaque fois que dans la colonne I, la cellule a pour valeur "n" ou "N", la ligne correspondante à cette cellule soit copiée et collée sur la feuille intitulée "facture à transmettre".
ensuite, sur ma feuille "frais de m²", sélectionner la zone (B17;I70)
Pour cette zone, à chaque fois que dans la colonne I, la cellule a pour valeur "n" ou "N", la ligne correspondante à cette cellule soit copiée et collée sur la feuille intitulée "facture à transmettre".
Le but étant que toutes les lignes des mes feuilles "frais de m²" et "frais généraux" contenant une cellule avec la valeur n ou N soient listée dans cette feuille "facture à transmettre" et que cette liste puisse être mise à jour régulièrement.
J'espère avoir été claire dans mon explication !
Je remercie infiniment celui qui me trouve cette macro parce que je sui trop nulle pour faire ca !!! lol

Liens sponsorisés

zeb
Profil : Modérateur libre

Et non. :(
Ce site ne propose pas de solutions toutes faites. lol ou pas :/

 

Il va te valoir le faire toi-même.

 

Voici un peu d'aide :
En fait, voici ce que tu veux faire, sans le savoir :)

  • Parcourir cellule par cellule la zone I17 à I104 de telle feuille.
  • Pour chacune de ces cellules, si la valeur en majuscule est "N" copier la zone B-I de la ligne correspondante vers une zone (encore non-spécifiée) d'une autre feuille.


Alors encore un peu d'aide :

  • "telle zone de telle feuille" se programme comme suit :

Sheets("nom_de_la_feuille" ).Range("zone" )


  • Pour parcourir une zone :

Dim c As Range
For Each c In Sheets("nom_de_la_feuille" ).Range("zone" )
' // mettre ici des trucs utiles
Next


  • Mettre en majuscule

UCase()


  • Copier une zone vers une autre :

zone_a_copier.Copy Destination:=zone_de_destination

 

C'est à toi.
Si ça marche publie-le ici, on en sera content :)
Si ça ne marche pas, publie-le ici, on tachera de le corriger ensemble. :)


Message édité par zeb le 04-07-2007 Ã  17:21:05

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

C'est gentil de m'aider mais je suis un cas desespéré: j'ai fait ca:

Sub essai()
'
Dim c As Range
For Each c In Sheets("frais généraux" ).Range(I17, I104)
If cell.Value = "n" Or "N" Then
Row.Copy Destination:=Sheets("facture à transmettre" )
End If
Next
'
End Sub

Quand je fais ca, ca me met débogage et surligne "For Each c In Sheets("frais généraux" ).Range(I17, I104)" en jaune ...
Je pense que j'ai merdé...

Plus d'informations

j'ai trouvé une erreur
je pense qu'il y en a une autre ca marche toujours pa
Sub essai()
'
Dim c As Range
For Each c In Sheets("frais généraux" ).Range("I17:I104" )
If cell.Value = "n" Or "N" Then (cette ligne est en jaune)
Rows("B:I" ).Copy Destination:=Sheets("facture à transmettre" )
End If
Next
'
End Sub

Plus d'informations

Y a un début avec pas mal d'erreur de synthaxe.

Code :
  1. Dim c As Range
  2. For Each c In Sheets("frais généraux" ).Range("I17:I104" )


Il y a une erreur soit dans le type de c, soit ailleur mais ca reste un peu compliqué pour ton besoin.

Code :
  1. Dim i as long
  2. with Sheets("frais généraux" )
  3.     for i = 17 to 104
  4.     next
  5. end with



Code :
  1. If cell.Value = "n" Or "N" Then (cette ligne est en jaune)


Un if a besoin de conditions, c-a-d séparé par un signe = ou renvoyant une valeur booléenne. Quand tu met plusieurs conditions, ils faut que celle ci soit complète.

Code :
  1. If cell.Value = "n" Or cell.Value = "N" Then


Mais zeb t'as donné la fonction Ucase()

Code :
  1. If ucase(cell.Value) = "N" Then



Code :
  1. Rows("B:I" ).Copy Destination:=Sheets("facture à transmettre" )


La destination de la fonction copy est une plage de donnée dans un onglet là tu n'as mis que l'onglet.

Code :
  1. Rows("B:I" ).Copy Destination:=Sheets("facture à transmettre" ).Range("mapositionàremplir" )


PS : Met les balises code


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
zeb
Profil : Modérateur libre

http://site.voila.fr/zulu-echo-bravo/img/balisecodeppc_ok.png


Message édité par zeb le 05-07-2007 Ã  22:59:32

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Salut
Merci pour ton aide. Je me doutais bien que ce que j'avais fais était faux: j'y connais pas grand chose !
Bon j'ai fait comme tu m'a dit je sais pas si j'ai tout bien placé mais ca marche toujours pas...

Code :
  1. Sub essai()
  2. '
  3. Dim i As Long
  4. With Sheets("frais généraux" )
  5.     For i = 17 To 104
  6.     If cell.Value = "n" Or cell.Value = "N" Then (en jaune que je mette ca ou If ucase(cell.Value) = "N" Then)
  7. Rows("B:I" ).Copy Destination:=Sheets("facture à transmettre" ).Range("B:I" )
  8. End If
  9.   Next
  10. End With
  11. End Sub



Comprends tu où est le problème? En tout cas même si ca marche pas j'ai l'impression de mieux comprendre.. merci 1000 fois...

zeb
Profil : Modérateur libre

Je reprends ton premier exemple et je mélange avec le second :

 
Code :
  1. Sub essai()
  2. '
  3. Dim c As Range
  4. For Each c In Sheets("frais généraux" ).Range("I17:I104" )
  5.     If UCase(cell.Value) = "N" Then
  6.         Rows("B:I" ).Copy Destination:=Sheets("facture à transmettre" ).Range("B:I" )
  7.     End If
  8. Next
  9. '
  10. End Sub
 


As-tu mis l'Option Explicit ? (Voir l'aide pour savoir pourquoi) Si non, fais-le !

 

Ligne 3 et 4, tu déclares et utilise c.
Ligne 5, tu utilises cell. C'est quoi ce cell ?


Message édité par zeb le 05-07-2007 Ã  23:04:52

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Bon ben je laisse tomber... rien ne marche... merci kan même d'avoir essayer de m'aider !

zeb
Profil : Modérateur libre

:pfff:


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Je rebondi sur ce message car la demande d'origine correspond assez à une problématique que j'aborde...
Bouclage sur une feuille par rapport à des conditions, et action en fonction des éléments rencontrés...

Mon objectif est de parcourir une table à la struture définie telle que :
Ligne = Département ( 1 département par ligne)
Les entêtes de colonne sont doubles
Colonne (ligne 1) = Période(1 mois)
Colonne (ligne 2) = Pays ( 1 Pays par colonne)

L'année est référencé dans une cellule isolée au dessus de la table.

Les données de la table sont des commentaires.(string)

Ainsi la cellule de donnée la plus en haut à gauche de la table correspond au croisement de références suivant =>
Année "A", Période "P", Pays "C", Département "D" => Commentaire

Au total, j'ai environ 1200 commentaires potentiels correspondant à autant de croisement de référence.

Mon objectif ( La macro) :

Je souhaite parcourir chacune des cellules du tableau
et lorsquelle est renseigné générer une concatenation telle que :
Concatener("A" - "P" - "C" - "D" - "Commentaire" )
et envoyer ce résultat sur une feuille de synthèse. Cellule 1 jusqu'à Cellule "N"

Comme la table est figé, j'imagine utiliser le nomage de zone pour périmétrer le "scan du tableau".

L'approche TCD à été tenté mais n'a pas convaincu à mon grand désespoir :))
( javais formatté ma table source comme une liste à plat et hop le tour était joué.)

Il faut donc que je macrote...

Pouvez vous m'aider à commencer ce traitement ?
Je connais le principe des boucle ou des fonctions conditionnelle mais j'avoue avoir du mal à démarrer ma macro...


Comment définir les bonnes déclarations en début de fonction ?
Comment tester les celulles de la table et effectuer la concaténation ?
Comment coller le résultat sur un autre feuille descendant d'une cellule après chaque coller ?



Si vous pouviez juste me mettre sur la piste...
Merci d'avance !






Message édité par Megaolive le 12-07-2007 Ã  12:33:03
zeb
Profil : Modérateur libre

Je n'ai rien compris à l'organisation de tes données !


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Effectivement, ca commence mal :p

Je vais essayer d'être plus clair :
Voici une représentation de la table que je souhaite scanner via la macro :

Année(applicable à toute la table)

Mois1 Mois1 MoisN...
Pays1 Pays2
Service1 "Commentaire" "Commentaire"

Service2 "Commentaire" "Commentaire"

Service N
...

L'idée, c'est de "checker" chaque cellule commentaire et quand la cellule n'est pas vide, de recopier sous un formalisme particulier ( Concatenation Entete colones / lignes + commentaire) les infos sur une autre feuille.

Je ne veux pas un code prépondu mais bel et bien comprendre la logique à suivre pour éditer une macro convenable.


Voici issu de l'exemple au dessus ce que j'ai édité pour le momment :

Code :
  1. Sub Comment()
  2. Dim c As Range
  3. For Each c In Sheets("Commentaires" ).Range("AB15:AG31" )
  4. If UCase(c.Value) <> "" Then
  5. c.Copy Destination:=Sheets("Sheet1" ).Range("A1:F16" )
  6. End If
  7. Next
  8. End Sub



Pour l'instant l'éxecution du code me recopie le dernier de mes commentaires dans toute la zone destination.
Je suis déja assez content d'avoir scanné la table :p

Me suis je bien engagé sur la bonne voie ?


Message édité par Megaolive le 12-07-2007 Ã  15:20:51
zeb
Profil : Modérateur libre