Help VBA
Résolu
Tonio
-
pilas31 Messages postés 1825 Date d'inscription Statut Contributeur Dernière intervention -
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.
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
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+
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+
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
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
Bon, j'ai trouvé une formule matricielle qui fonctionne en faisant un test dans la formule. Voila la syntaxe pour le cas >2 :
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,
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,
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
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:
Cordialement,
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,
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
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
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 :
Je pense que maintenant c'est OK
A+
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+
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 :-)
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 :-)