Aide pour une macro Excel 2007
Résolu
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.
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
Résumé de la discussion
La discussion porte sur une macro VBA qui filtre et copie les lignes répondant à trois critères: 'P' en colonne R, date > 1 an en colonne U, et vérification de la colonne X. La réponse retenue propose le code qui teste ces conditions et copie les lignes vers la feuille 'Ponctuel à relancer' à partir de SAV, en parcourant les lignes jusqu'à 6000. Des échanges ont aussi porté sur le démarrage à partir de la ligne 2 pour ignorer l'en-tête et sur les éventuels problèmes de formats ou valeurs non numériques dans les dates. En cas d'erreurs, certains évoquaient des messages sur la colonne date et des solutions comme ajuster les bornes ou vérifier le type des données utilisées.
-
C'est parfait!
Merci mille fois pour ton aide!
C'était tout bête finalement!
Merci encore! -
effectivement, je viens de tester. alors dans la fonction datediff, remplace "yyyy" par "d", et 1 par 365 au niveau du test.
-
Le problème est qu'il me copie aussi une date comme 03/12/2008 or ça fait moins d'un an.
-
non, >= c'est bon, ce sera toutes les dates il y a au moins 1 an, je pense que c'est ça que tu veux?
-
Je crois que j'aicompris l'erreur!
ça provient du >1 concernant la date.
Il me reporterait que les lignes avec les dates en 2007.
Or moi mes dates pour le moment sont encore en 2008 mais la différence avec aujourd'hui est supérieur à 365 jours.
Ce sont ces lignes que je veux recopier. J'ai mis >= 1 et il me remonte bien les lignes ou il ya 2008.
Peut est-ce sur les jours ou les mois qu'il faut poser les conditions ? -
envoie moi une partie de ton fichier, je verrai là où ça cloche parce chez moi ça marche.
quoc.bach@alico.com -
Non je ne sais pas la ligne ou ça ne marche pas, comment savoir?
Avec ce dernier code rien ne se passe. -
essaie le code ci-dessous, je ne pense pas que ce soit un format de date, sais tu la ligne où ça ne marche pas?
i = 2
k = 2
While i < 6000
If Cells(i, 18) = "P" Then
If Cells(i, 21) <> "" Then
If DateDiff("yyyy", Cells(i, 21), Date) > 1 Then
If (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
End If
End If
End If
i = i + 1
Wend -
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. -
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)? -
dans la colonne U, la date est-elle toujours renseignée? (j'ai considéré que si)
-
j'ai mis i = 2 et j'ai le meme message d'erreur
-
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.
-
Peux tu me dire comment on fait ça stp?
-
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 ....
-
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?
-
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? -
il faut faire la manip successivement pour chaque expression i, puis cells(i,21) puis cells(i,24)
-
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! -
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?
- 1
- 2
Suivant