Insertion d'une formule variant en fonction d'une condition
Résolu/Fermé
Pouschkine
Messages postés
13
Date d'inscription
mardi 23 juin 2015
Statut
Membre
Dernière intervention
22 avril 2016
-
23 juin 2015 à 08:21
Pouschkine Messages postés 13 Date d'inscription mardi 23 juin 2015 Statut Membre Dernière intervention 22 avril 2016 - 25 juin 2015 à 11:23
Pouschkine Messages postés 13 Date d'inscription mardi 23 juin 2015 Statut Membre Dernière intervention 22 avril 2016 - 25 juin 2015 à 11:23
A voir également:
- Insertion d'une formule variant en fonction d'une condition
- Fonction si et - Guide
- Excel cellule couleur si condition texte - Guide
- Formule somme excel colonne - Guide
- Formule excel moyenne - Guide
- Excel retour à la ligne dans une formule - Guide
3 réponses
Pouschkine
Messages postés
13
Date d'inscription
mardi 23 juin 2015
Statut
Membre
Dernière intervention
22 avril 2016
Modifié par Pouschkine le 23/06/2015 à 10:09
Modifié par Pouschkine le 23/06/2015 à 10:09
Pouschkine
Messages postés
13
Date d'inscription
mardi 23 juin 2015
Statut
Membre
Dernière intervention
22 avril 2016
24 juin 2015 à 09:07
24 juin 2015 à 09:07
Merci pour votre réponse :)
Par contre j'ai toujours une erreur : erreur 1004, application-defined or object-defined error.
Entre temps j'ai un peu changé le code, je pense avoir corrigé certaines erreurs mais apparement ce n'est pas suffisant.
Par contre j'ai toujours une erreur : erreur 1004, application-defined or object-defined error.
Entre temps j'ai un peu changé le code, je pense avoir corrigé certaines erreurs mais apparement ce n'est pas suffisant.
Sub Soil_type()
Dim k As Integer 'k est le numéro du groupe
Dim deb As Long 'deb la premiere ligne de la plage
Dim fin As Long 'fin la derniere ligne de la plage
k = 1
deb = 2
For i = 2 To 179515
If Worksheets("sheet1").Cells(i, 18) = k Then
fin = i
Else
Cells(k + 1, 5).Formula = "=MODE.SNGL(sheet1!M " & deb & ": M " & fin & ")"
deb = i
k = k + 1
End If
Next
End Sub
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
24 juin 2015 à 09:32
24 juin 2015 à 09:32
dire sur quelle ligne la macro s'arrete (surlignée en jaune)
Pouschkine
Messages postés
13
Date d'inscription
mardi 23 juin 2015
Statut
Membre
Dernière intervention
22 avril 2016
>
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
24 juin 2015 à 09:34
24 juin 2015 à 09:34
La macro s'arrête sur la ligne où j'insère la formule :
Cells(k + 1, 5).Formula = "=MODE.SNGL(sheet1!M " & deb & ": M " & fin & ")"
Cells(k + 1, 5).Formula = "=MODE.SNGL(sheet1!M " & deb & ": M " & fin & ")"
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
Modifié par michel_m le 25/06/2015 à 09:27
Modifié par michel_m le 25/06/2015 à 09:27
Bonjour
je ne connais pas la fonction Mode.sngl (j'ai xl2007)
mais avec 179000 lignes, le pas à pas par cellule est extrèmement chronophage; il faut alors passer par des variables-tableaux
edit 9:28H
pour tenter d'^tre efficace
Mettre un extrait du classeur ( env.1000 à 2000 lignes) sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci proposé (clic droit) dans le message de réponse
Dans l'attente
Michel
je ne connais pas la fonction Mode.sngl (j'ai xl2007)
mais avec 179000 lignes, le pas à pas par cellule est extrèmement chronophage; il faut alors passer par des variables-tableaux
edit 9:28H
pour tenter d'^tre efficace
Mettre un extrait du classeur ( env.1000 à 2000 lignes) sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci proposé (clic droit) dans le message de réponse
Dans l'attente
Michel
Pouschkine
Messages postés
13
Date d'inscription
mardi 23 juin 2015
Statut
Membre
Dernière intervention
22 avril 2016
25 juin 2015 à 10:25
25 juin 2015 à 10:25
Bonjour,
Je crois que dans Excel 2007 vous avez la fonction MODE qui fait à peu près la même chose que la fonction MODE.SNGL. Elle permet de renvoyer l'élément qui apparait le plus souvent dans une plage de donnée.
Après plusieurs essais j'ai finalement utilisé FormulaR1C1 au lieu de Formula et ca marche. Ca donne :
Par contre je n'ai toujours pas compris pourquoi la première formule ne fonctionnait pas, si vous avez une idée n'hésitez pas.
En tout cas merci de vous être intéressé à mon problème.
Je crois que dans Excel 2007 vous avez la fonction MODE qui fait à peu près la même chose que la fonction MODE.SNGL. Elle permet de renvoyer l'élément qui apparait le plus souvent dans une plage de donnée.
Après plusieurs essais j'ai finalement utilisé FormulaR1C1 au lieu de Formula et ca marche. Ca donne :
Cells(k + 1, 5).FormulaR1C1 = "=MODE.SNGL(sheet1!R" & deb & "C13 :R" & fin & "C13)"
Par contre je n'ai toujours pas compris pourquoi la première formule ne fonctionnait pas, si vous avez une idée n'hésitez pas.
En tout cas merci de vous être intéressé à mon problème.
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
>
Pouschkine
Messages postés
13
Date d'inscription
mardi 23 juin 2015
Statut
Membre
Dernière intervention
22 avril 2016
25 juin 2015 à 11:18
25 juin 2015 à 11:18
Par curiosité, dites moi la durée d'éxécution de votre code.
Pouschkine
Messages postés
13
Date d'inscription
mardi 23 juin 2015
Statut
Membre
Dernière intervention
22 avril 2016
25 juin 2015 à 11:23
25 juin 2015 à 11:23
C'est instantané.
Et excusez moi mais je n'avais pas vu la suite de votre précedant message.
Et excusez moi mais je n'avais pas vu la suite de votre précedant message.
24 juin 2015 à 08:56
déjà comme tu annpnces 179515 les variables doivent ^tre déclarées en Long et non en Integer
integer concerne les nombres entre -32768 et 32767....
Il y a beaucoup d'autres choses à rectifier mais regarde ce que ca donne avec des types "long"