Aide pour une macro Excel 2007

Résolu
chevalux1 Messages postés 59 Statut Membre -  
coco_rico Messages postés 32 Statut Membre -
Bonjour,

Pouvez vous m'aider à réaliser une macro SVP ?
La macro ne me parait pas très compliquée mais je n'y connais rien du tout!
Il s'agit d'afficher uniquement (peut être dans une autre feuille du classeur) les lignes qui répondent aux conditions suivantes:
- La ligne doit afficher "P" dans la colonne R
- La ligne doit avoir une date > 1 ans dans la colonne U
- Si ces deux conditions sont réunies il faut vérifier que dans la colonne X, la ligne soit vide ou que la date inscrite si elle n'est pas vide, soit supérieure à 1 an.

Merci d'avance pour votre aide.
Configuration: Windows Vista Internet Explorer 7.0

28 réponses

  • 1
  • 2
  1. coco_rico Messages postés 32 Statut Membre
     
    Sub Comment_ca_marche()
    dim i as integer, j as integer, k as integer

    i=1
    k=1
    while i<10 'la macro va tourner sur 9 lignes
    if cells(i,18)="P" and datediff("yyyy",cells(i,21),date)>1 and (cells(i,24)<>"" or datediff("yyyy",cells(i,24),date)>1) then
    for j=1 to n 'n=nombre de colonnes concernées
    sheets("nom_destination").cells(k,j)=sheets("nom_source").cells(i,j)
    next j
    k=k+1
    endif
    i=i+1
    wend

    end sub

    Commentaires: tu peux modifier les conditions aux bornes ou la condition de fin de boucle "while" pour que ça corresponde à tes besoins.

    bon courage
    0
  2. chevalux1 Messages postés 59 Statut Membre
     
    Je dois avouer que je n'y comprend pas grand chose!
    Je pense avoir compris pour les bornes si j'ai 5000 jignes je met i<5000.
    Par contre, à quoi correspondent "nom_destination" et "nom source"
    Ou faut il aller pour inscrire cette macro?
    Merci beaucoup pour votre aide!
    0
  3. coco_rico Messages postés 32 Statut Membre
     
    " " définit une chaine, en l'occurence ce sont les noms des feuilles source et destination dans ton classeur.

    a+
    0
  4. chevalux1 Messages postés 59 Statut Membre
     
    J'ai mis ça :
    Sub Comment_ca_marche()
    Dim i As Integer, j As Integer, k As Integer

    i = 1
    k = 1
    While i < 6000
    If Cells(i, 18) = "P" And DateDiff("yyyy", Cells(i, 21), Date) > 1 And (Cells(i, 24) <> "" Or DateDiff("yyyy", Cells(i, 24), Date) > 1) Then
    For j = 1 To 40
    Sheets("Ponctuel à relancer").Cells(k, j) = Sheets("SAV").Cells(i, j)
    Next j
    k = k + 1
    End If
    i = i + 1
    Wend

    End Sub

    Les lignes que je veux "copier" sont dans SAV et je veux les amené a Ponctuel à relancer. Je pense que c'est bon.
    Mais apparament il a une erreur dans la formule car il me surligne en jaune les éléments que j'ai souligné (If Cells...Then).
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. coco_rico Messages postés 32 Statut Membre
     
    quel est le message d'erreur?
    0
  7. chevalux1 Messages postés 59 Statut Membre
     
    Le message d'esrreur est:
    Erreur d'execution '13' : Imcompatibilité de type
    0
  8. coco_rico Messages postés 32 Statut Membre
     
    slt,
    dans les colonnes où l'on attend les dates, il y a des valeurs non numériques, regarde ou corrige le programme, tu sais le faire?
    0
  9. chevalux1 Messages postés 59 Statut Membre
     
    Il n'y a pourtant que des dates, mise à part la premiere ligne qui correspond à l'intitulé de la colonne.
    0
  10. coco_rico Messages postés 32 Statut Membre
     
    slt,
    quand l'erreur survient, demande à déboguer, il t'emmènera dans la fenêtre VBA, fais successivement "Débogage\Ajouter espion" pour i, cells(i,21), cells(i,24) on doit pouvoir fixer la raison après, ok?
    0
  11. chevalux1 Messages postés 59 Statut Membre
     
    J'ai mis i, cells(i,21), cells(i,24) dans Expression
    Ensuite la procédure ioment_ca_marche
    et dans module Module 1
    Il y a un message d'erreur qui dit que L'expression espionne est incorrecte
    Merci encore pour ton aide!
    0
  12. coco_rico Messages postés 32 Statut Membre
     
    il faut faire la manip successivement pour chaque expression i, puis cells(i,21) puis cells(i,24)
    0
  13. chevalux1 Messages postés 59 Statut Membre
     
    Ok c'est fait.
    Il m'indique bien le nom des colonnes que je veux dans Valeur (i = 1 ; Cells(i, 21) = visité le et Cells(i, 24) = CE proposé le)
    Que dois je faire ensuite?
    0
  14. coco_rico Messages postés 32 Statut Membre
     
    mais alors dans la 21ième (U) et dans la 24ième (X) colonne, ce ne sont pas des dates comme t'avais mentionné dans ta question d'origine?
    0
  15. coco_rico Messages postés 32 Statut Membre
     
    ah, non, je me suis planté, j'ai oublié que t'avais une ligne de titre aussi !!!! autant pour moi, fais partir à partir de i=2 et là, ça devrait marcher ....
    0
  16. chevalux1 Messages postés 59 Statut Membre
     
    Peux tu me dire comment on fait ça stp?
    0
  17. coco_rico Messages postés 32 Statut Membre
     
    dans la macro, avant le while, t'as i=1, change en i=2. et attention, pour j aussi, si dans ta feuille de destination t'as une ligne de titre, il faut faire "For j=2 to 40". J'espère que ça va marcher cette fois-ci.
    0
  18. chevalux1 Messages postés 59 Statut Membre
     
    j'ai mis i = 2 et j'ai le meme message d'erreur
    0
  19. coco_rico Messages postés 32 Statut Membre
     
    dans la colonne U, la date est-elle toujours renseignée? (j'ai considéré que si)
    0
  20. chevalux1 Messages postés 59 Statut Membre
     
    Apparament ça marche mais seulement dans le cas ou la cellule de la colonne U est vide mais pas quand la date est supérieur à 1 ans.
    C'est déjà un début!
    Est ce que ça peut venir du format de la date (14/01/2008)?
    0
  21. chevalux1 Messages postés 59 Statut Membre
     
    Jai juste fait un essai en effaçant une date mais toutes les cellules étaient renseignées à la base.
    Par contre c'est vrai que par la suite, elles ne seront pas forcément toutes renseignées.
    0
  • 1
  • 2