Help VBA

Résolu
Tonio -  
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai deux soucis assez importants sous VBA

Le 1er :

Voici un petit bout de mon code

derlig = Sheets(1).Range("A65536").End(xlUp).Row


Range("KPI!F6").Formula = "=SUMPRODUCT(('SIGMA'!K2:K" & derlig & "-'SIGMA'!N2:N" & derlig & ">2)*1)"
Range("KPI!D6").Formula = "=SUMPRODUCT(('SIGMA'!K2:K" & derlig & "-'SIGMA'!N2:N" & derlig & "<2)*1)"

Le colones K et N sont des dates. Ces calculs me permettent de savoir en fonction du nombre de lignes que j'ai dans mon fichier de calculer si une instruction est faite en retard ou non (retard = plus de 2 jours entre la date K et la date N).

Le souci est que j'ai des trous dans ma colonne N et avec ma fonction actuelle j'ai que des #VALEUR! dans mes cases de résultats...

Le 2ème :

J'ai un fichier texte intégré automatiquement dans un classeur excel.

Dans celle ci j'ai une colonne M dans laquelle j'ai des noms. Je souhaiterai garder seulement quelques noms et supprimer la ligne (en entier) des autres noms.

Comment faire ?

Merci.

11 réponses

pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Bonjour,

Pour le 1° problème
Le souci est que j'ai des trous dans ma colonne N

Je pense que ces trous ne sont pas des cellules vides mais plutôt des cellules dans lesquelles il y a du texte, peut-être des "espaces" car il n'y a pas de raison que cela donne une erreur. Si la cellule est vide c'est interprété comme un 0 et cela ne provoque pas d'erreur. La solution me semble être d'effacer en amont le contenu de ces cellules.

Pour le 2° problème

Il est possible de faire un code VBA qui supprime les lignes mais il faut un critère de suppression de la ligne. Quels sont les noms à garder ou à supprimer ?

A+
0
Tonio
 
Pour la 1 vu que le fichier se charge en automatique et qu'il est assez conséquent, n'existe t-il pas une formule qui ne prend en compte que les cases non vides ?

Pour la 2 j'ai une liste de 11 noms qui reviennent plusieurs fois (à savoir que mon fichier change tous les jours et varie entre 1000 et 6000 lignes)
Je veux garder les 11 noms et supprimer le reste.

Voici les 11 à garder.

Arthur, Jean, Antoine, Alex, John, Etienne, Matthieu, Camille, Clotilde, Philippe, Sixtine.


Merci d'avance
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Bon, j'ai trouvé une formule matricielle qui fonctionne en faisant un test dans la formule. Voila la syntaxe pour le cas >2 :

Range("KPI!F6").FormulaArray = "=SUMPRODUCT(IF(ISERROR(SIGMA!K2" & derlig & "-SIGMA!N2:N20),0,(SIGMA!K2:K" & derlig & "-SIGMA!N2:N20>2)*1))"


Il y a peut-être plus simple.

Une petite remarque comme le test est >2 ou <2 on est bien d'accord que les cas =2 n'est pas pris en compte. si c'est un oubli, il suffit de mettre >= ou <=.

Pour le point 2, je prépare un petit bout de code


Cordialement,
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Attentioncomme j'ai testé avec 20 lignes j'ai oublié de remplacer par "derlig" dans le post précédent:

Voila la bonne syntaxe :

Range("KPI!F6").FormulaArray = "=SUMPRODUCT(IF(ISERROR(SIGMA!K2" & derlig & "-SIGMA!N2:N" & derlig & "),0,(SIGMA!K2:K" & derlig & "-SIGMA!N2:N" & derlig & ">2)*1))"
0
Tonio
 
Pour la formule :

Il me met Impossible de définir la propriété FormulaArray de la classe range
Et si je j'enlève le Array ça me met 0 dans mes cases que ce soir pour <2 ou >2
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Je ne comprends pas car ce message peut arriver si la formule fait plus de 255 caractères , ce qui n'est pas le cas ou losqu'il y a une erreur de syntaxe (oubleir de remplacer les ; par des ,) ou oublier de traduire en anglais les fonctions. Mais la je ne comprends pas car cela fonctionne chez moi.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tonio
 
Il me met toujours la même erreur
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Peux-tu mettre un extrait de ton fichier (sans infos confidentielles) sur www.cijoint.fr et poster le lien pour que l'on puisse regarder cette erreur ?
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Pour le problème 2 voila une proposition toute simple qui fonctionne sur la feuille courante en supposant que le nom est en colonne A:

derlig = Range("A65536").End(xlUp).Row
For ilig = derlig To 2 Step -1
    Nom = Range("A" & ilig).Value
    If Nom <> "Arthur" And Nom <> "Jean" And Nom <> "Antoine" And _
       Nom <> "Alex" And Nom <> "John" And Nom <> "Etienne" And _
       Nom <> "Matthieu" And Nom <> "Camille" And Nom <> "Clotilde" And _
       Nom <> "Philippe" And Nom <> "Sixtine" Then
        Rows(ilig).Delete Shift:=xlUp
    End If
Next ilig
--
Cordialement,
0
Tonio
 
Voici le fichier les colones sont les K et N (en rouge)

Merci pour l'autre formule ça marche parfaitement

http://www.cijoint.fr/cjlink.php?file=cj201003/cijwPtNyRC.xls

J'ai laissé le morceau de code que j'ai actuellement dans la macro
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Bonjour Tonio,

J'avoue que j'ai eu du mal à comprendre car en effet la formule ne fonctionne pas sur le fichier.

En fait c'est parceque les cellules résultats sont fusionnées. Comme le résultat de la formule matricielle ne donne qu'une seule valeur cela semble le perturber.

Bref, il suffit de défusionner les cellules D6 et F6.

Par ailleurs, il y avait encore une petite erreur dans la formule voila les bonnes syntaxes :

Range("KPI!F6").FormulaArray = "=SUMPRODUCT(IF(ISERROR(SIGMA!K2:K" & derlig & "-SIGMA!N2:N" & derlig & "),0,(SIGMA!K2:K" & derlig & "-SIGMA!N2:N" & derlig & ">2)*1))"

Range("KPI!D6").FormulaArray = "=SUMPRODUCT(IF(ISERROR(SIGMA!K2:K" & derlig & "-SIGMA!N2:N" & derlig & "),0,(SIGMA!K2:K" & derlig & "-SIGMA!N2:N" & derlig & "<2)*1))"


Je pense que maintenant c'est OK

A+

0
Tonio
 
Un pb subsiste j'ai l'impression. Le résultat est 0 et 1 si on regarde manuellement on peut se rendre compte qu'il y a une instruction en retard et une qui n'est pas en retard ligne 31 et 62 (il n'y a que deux dates dans N dans le document que je t'ai donné.) si j'enlève maintenant toutes les infos dans N le résultat est 183 soit le nombre de lignes.

A titre indicatif : le calcul effectué sert à savoir si une instruction est en retard.

Elle est en retard si K - N > 2 sinon elle ne l'est pas.

Je veux que soit calculé le nombre d'instruction en retard et "à l'heure".

Lorsqu'il y a des blancs il n'y a pas d'opération à faire il faut juste les ignorer


Merci pour tout :-)
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Je crois que c'est à cause du test strictement <2.
Donc je pense qu'en D6 le test doit être <=2

A+


Remarque : quand on enléve toutes les dates en colonne N, les valeurs passent à "vide" c'est à dire interprétée comme 0 donc tout est en retard.
0
Tonio
 
Tout marche !

Merci beaucoup !!!
0
pilas31 Messages postés 1825 Date d'inscription   Statut Contributeur Dernière intervention   646
 
Bonne continuation Tonio,

Je passe le sujet en résolu
0