Automatiser un calcul excel, plusieurs questions
Résolu/Fermé
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
-
22 déc. 2014 à 16:15
Akre66 Messages postés 55 Date d'inscription mercredi 14 mai 2014 Statut Membre Dernière intervention 4 octobre 2016 - 23 déc. 2014 à 17:35
Akre66 Messages postés 55 Date d'inscription mercredi 14 mai 2014 Statut Membre Dernière intervention 4 octobre 2016 - 23 déc. 2014 à 17:35
A voir également:
- Automatiser un calcul excel, plusieurs questions
- Calcul moyenne excel - Guide
- Liste déroulante excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Si et excel - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
6 réponses
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
22 déc. 2014 à 16:22
22 déc. 2014 à 16:22
A oui et le code ne tient pas encore en compte que les données à rentrer ne sont toujours pas aux memes colonnes ou lignes
jordane45
Messages postés
38341
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
4 716
22 déc. 2014 à 16:43
22 déc. 2014 à 16:43
Bonjour,
Déjà.. évite de faire des .SELECT .... Selection.value ......
Ensuite.. tu utilises une variable XL .. mais qui n'existe pas (n'est pas initialisée dans ton code)..
Bref.. ton code "corrigé" donne :
Déjà.. évite de faire des .SELECT .... Selection.value ......
Ensuite.. tu utilises une variable XL .. mais qui n'existe pas (n'est pas initialisée dans ton code)..
Bref.. ton code "corrigé" donne :
Sub Test() 'Declaration des variables Dim Cible As String Dim Puissance As Single Dim BU As Single Dim Temperature As Single Dim Coeff As Single Dim Grappe As Boolean Dim FSource As Worksheet Dim FCible As Worksheet 'Feuille Source Set FSource = Worksheets("Interface") 'On récupére les données d'entrée Cible = FSource.Range("A7").Value Puissance = FSource.Range("C3").Value BU = FSource.Range("D3").Value Temperature = FSource.Range("E3").Value Coeff = FSource.Range("F3").Value Grappe = FSource.Range("G3").Value 'Feuille Cible Set FCible = Worksheets(Cible) 'On écrit les valeurs d'entrée dans les cases correspondantes FCible.Range("C4").Value = Puissance FCible.Range("D34").Value = Temperature FCible.Range("C36").Value = Coeff End Sub
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
22 déc. 2014 à 16:55
22 déc. 2014 à 16:55
Merci beaucoup
Pardon pour les erreurs, mais le problème qui me pose surtout problème c'est comment puis je remplacer les valeurs dans les feuilles cibles ?
J'essaye de trouver un équivalant "grep" pour la VBA, afin de déterminer la cellule ou voir la cellule d'avant.
Pardon pour les erreurs, mais le problème qui me pose surtout problème c'est comment puis je remplacer les valeurs dans les feuilles cibles ?
J'essaye de trouver un équivalant "grep" pour la VBA, afin de déterminer la cellule ou voir la cellule d'avant.
jordane45
Messages postés
38341
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
4 716
22 déc. 2014 à 17:06
22 déc. 2014 à 17:06
Je ne comprend pas....
Tu veux déterminer dans QUELLES cellules se trouvent les données à remplacer dans tes feuilles cibles c'est ça ??
Il te faudra donc utiliser la méthode FIND :
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel#exemple-d-utilisation
Exemple :
Tu veux déterminer dans QUELLES cellules se trouvent les données à remplacer dans tes feuilles cibles c'est ça ??
Il te faudra donc utiliser la méthode FIND :
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel#exemple-d-utilisation
Exemple :
Sub toto() Dim cellToWrite As Range Dim cherche As String Dim Fcible As Worksheet Set Fcible = Worksheets(1) 'on cherche dans quelle cellule se trouve le mot "test" ' et on y écrit ..."ça marche" cherche = ChercheCelluleByString("test") If cherche <> "erreur" Then Set cellToWrite = Range(cherche) cellToWrite.Value = "ça marche" End If End Sub Function ChercheCelluleByString(Valeur_Cherchee As String) 'déclaration des variables : Dim Trouve As Range Dim AdresseTrouvee As String 'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole) Set Trouve = Cells.Find(What:=Valeur_Cherchee, LookAt:=xlWhole) 'traitement de l'erreur possible : Si on ne trouve rien : If Trouve Is Nothing Then 'ici, traitement pour le cas où la valeur n'est pas trouvée AdresseTrouvee = "erreur" Else 'ici, traitement pour le cas où la valeur est trouvée AdresseTrouvee = Trouve.Address End If ChercheCelluleByString = AdresseTrouvee Set Trouve = Nothing End Function
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
Modifié par Akre66 le 23/12/2014 à 09:52
Modifié par Akre66 le 23/12/2014 à 09:52
Oui, je dois trouver la cellule où la valeur doit être changer. Je pense donc trouver celle juste avant (qui est fixe) pour en sortir sa position pour déterminer celle de cellule à changer.
Ok je saisi je crois avec l'exemple et le lien. Merci beaucoup. Je vais essayer.
Je comprends mieux aussi l'importance de tes corrections dans le premier commentaire, merci encore.
PS: Pas besoin de préciser le Worksheets pour la fonction ChercheCelluleByString ?
EDIT: Sinon puis je utiliser un sorte de find non pas sur la valeur de la cellule mais "son unité" (format de cellule, nombre, Personnalisée etc..) ?
Ok je saisi je crois avec l'exemple et le lien. Merci beaucoup. Je vais essayer.
Je comprends mieux aussi l'importance de tes corrections dans le premier commentaire, merci encore.
PS: Pas besoin de préciser le Worksheets pour la fonction ChercheCelluleByString ?
EDIT: Sinon puis je utiliser un sorte de find non pas sur la valeur de la cellule mais "son unité" (format de cellule, nombre, Personnalisée etc..) ?
jordane45
Messages postés
38341
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
4 716
>
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
23 déc. 2014 à 09:45
23 déc. 2014 à 09:45
PS: Pas besoin de préciser le Worksheets pour la fonction ChercheCelluleByString ?
Ah si...
Passe la feuille en paramètre de la fonction.
Sub toto() Dim cellToWrite As Range Dim cherche As String Dim Fcible As Worksheet Set Fcible = Worksheets(1) 'on cherche dans quelle cellule se trouve le mot "test" ' et on y écrit ..."ça marche" cherche = ChercheCelluleByString("test", Sheets(2)) If cherche <> "erreur" Then Set cellToWrite = Range(cherche) cellToWrite.Value = "ça marche" End If End Sub Function ChercheCelluleByString(Valeur_Cherchee As String, Optional Sh As Worksheet) If Sh Is Nothing Then Set Sh = ActiveSheet 'déclaration des variables : Dim Trouve As Range Dim AdresseTrouvee As String 'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole) Set Trouve = Sh.Cells.Find(What:=Valeur_Cherchee, LookAt:=xlWhole) 'traitement de l'erreur possible : Si on ne trouve rien : If Trouve Is Nothing Then 'ici, traitement pour le cas où la valeur n'est pas trouvée AdresseTrouvee = "erreur" Else 'ici, traitement pour le cas où la valeur est trouvée AdresseTrouvee = Trouve.Address End If ChercheCelluleByString = AdresseTrouvee Set Trouve = Nothing End Function
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
Modifié par Akre66 le 23/12/2014 à 10:27
Modifié par Akre66 le 23/12/2014 à 10:27
Oui j'avais rajouté le truc, sinon ça s'exécute sur le feuille ouverte.
Le fait que Sh soit optionnel me semble embêtant.
J'essaye maintenant, une fois l'adresse de la case trouvé, de modifier celle qui suit (colonne suivante). Y a t'il un lien logique du genre adresse=adresse+1 ou dois je lui faire sortir la colonne et la ligne pour ensuite sauter une colonne ? (je sais pas si j'étais clair).
je vois le "Column + 1" mais je vois pas trop comment le mettre
Le fait que Sh soit optionnel me semble embêtant.
J'essaye maintenant, une fois l'adresse de la case trouvé, de modifier celle qui suit (colonne suivante). Y a t'il un lien logique du genre adresse=adresse+1 ou dois je lui faire sortir la colonne et la ligne pour ensuite sauter une colonne ? (je sais pas si j'étais clair).
je vois le "Column + 1" mais je vois pas trop comment le mettre
jordane45
Messages postés
38341
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
4 716
>
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
23 déc. 2014 à 10:23
23 déc. 2014 à 10:23
Le fait que Sh soit optionnel me semble embêtant.
Pourquoi ?
Soit tu lui passes une feuille lorsque tu appels la fonction.... soit tu ne lui dis rien et dans ce cas il prendra la feuille active..
J'essaye maintenant, une fois l'adresse de la case trouvé, de modifier celle qui suit (colonne suivante). Y a t'il un lien logique du genre adresse=adresse+1 ou dois je lui faire sortir la colonne et la ligne pour ensuite sauter une colonne ? (je sais pas si j'étais clair).
Actuellement la fonction te retourne l'adresse de la cellule où se trouve l'info....
Tu peux, si tu préfères.. ne retourner "que" la colonne....
AdresseTrouvee = Trouve.Address 'Pour la colonne: AdresseTrouvee = Trouve.Column
jordane45
Messages postés
38341
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
4 716
Modifié par jordane45 le 23/12/2014 à 11:57
Modifié par jordane45 le 23/12/2014 à 11:57
Ca pouvait pas être aussi facile (mohahaha)
Si c'était "facile".. tu n'aurais pas besoin de nous... :-)
Question, pour la fonction FIND, les cellules fusionnés posent elle pas problèmes ?
J'essaye de retrouver les cellules commes la première fois, le string est le même, j'ai même mis xlPart à la place de xlWhole dans le FIND, mais rien n'y change.
Problème ? .. Non... mais il faut connaitre le fonctionnement d' Excel.
Les Coordonnées d'une plage de cellules Fusionnées.. c'est la cellule la plus en HAUT à GAUCHE
Par exemple.. Fusionne les cellules A1 Jusqu'à C6 ....
Places toi sur la cellule...
Tu verras (dans la zone en haut à gauche de ta fenêtre) que ses coordonnées sont .... A1 !
Donc.. il va te falloir .. vérifier si la cellule est fusionnée ou non avant d'appliquer ton "+1" sur ta colonne.
'on cherche dans quelle cellule se trouve le mot "test" ' et on y écrit ..."ça marche" cherche = ChercheCelluleByString("test") If cherche <> "erreur" Then Set cellToWrite = Cells(Range(cherche).Row, Range(cherche).Column + 1) '------------------------------------------------------- 'On regarde si ce sont des cellules Fusionnées '------------------------------------------------------- If cellToWrite.MergeCells Then Debug.Print "cellule fusionnée : " & cellToWrite.MergeArea.Address MergRng = Split(cellToWrite.MergeArea.Address, ":") LastColMerge = Range(MergRng(1)).Column LastRowMerge = Range(MergRng(1)).Row Set cellToWrite = Cells(LastRowMerge, LastColMerge + 1) End If '------------------------------------------------------- cellToWrite.Value = "ça marche" End If
Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
23 déc. 2014 à 13:28
23 déc. 2014 à 13:28
A non j'ai dit que j'ai que ça pouvait pas être aussi facile, c'est parce que je pensais que je pouvais appliquer la même logique que pour la première valeur, mais ça marche pas vu que les cellules sont fusionnés. C'était pas du tout dans le sens où j'aurai pu tout déchiré...
En soit non, j'aurai pas pu sans t'aide, du moins il m'aurait fallu bien plus de temps. Merci d'ailleurs.
Je commence à comprendre la logique du VBA mais je trouve ça pas intuitif...
Sinon, j'ai toujours un erreur pour les cellules fusionnées. Si je trouve pas je reviendrai, sinon ça devrait le faire donc merci :)
En soit non, j'aurai pas pu sans t'aide, du moins il m'aurait fallu bien plus de temps. Merci d'ailleurs.
Je commence à comprendre la logique du VBA mais je trouve ça pas intuitif...
Sinon, j'ai toujours un erreur pour les cellules fusionnées. Si je trouve pas je reviendrai, sinon ça devrait le faire donc merci :)
jordane45
Messages postés
38341
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
4 716
23 déc. 2014 à 14:40
23 déc. 2014 à 14:40
j'ai toujours un erreur pour les cellules fusionnées.
Laquelle ?
Le code que je t'ai donné fonctionne chez moi....
bizarre...
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
23 déc. 2014 à 15:03
23 déc. 2014 à 15:03
C'est bon !Quelques petits imprévus mais ça marche.
Pour le reste je me pose quelques questions...
Alors avec deux données (une donnée un entier qui varie pas mal et un autre booléen (oui ou non)) je dois déterminer un valeur à l'aide d'un tableau.
Ce tableau à deux entrée (Varriable1(entier): ligne, Varriable2(booléen)=colonne)) se situe toujours pas au même niveau.
Donc j'ai pensé à faire un finder en se situant juste sur la colonne ou sont regroupés la variable 1 (les entiers) et après la première case du tableau, pour sortir la ligne de la valeur que je cherche.
Après pour la colonne comme elle ne varie pas de feuille en feuille je peux juste la donner directement. Du coup je voulais savoir ce que tu en pensais ?
Tu connais d'autres méthodes pour sortir une valeur d'un tableau ?
Merci, mais sinon je pense pouvoir m'en tirer grâce à toi... Merci encors
Pour le reste je me pose quelques questions...
Alors avec deux données (une donnée un entier qui varie pas mal et un autre booléen (oui ou non)) je dois déterminer un valeur à l'aide d'un tableau.
Ce tableau à deux entrée (Varriable1(entier): ligne, Varriable2(booléen)=colonne)) se situe toujours pas au même niveau.
Donc j'ai pensé à faire un finder en se situant juste sur la colonne ou sont regroupés la variable 1 (les entiers) et après la première case du tableau, pour sortir la ligne de la valeur que je cherche.
Après pour la colonne comme elle ne varie pas de feuille en feuille je peux juste la donner directement. Du coup je voulais savoir ce que tu en pensais ?
Tu connais d'autres méthodes pour sortir une valeur d'un tableau ?
Merci, mais sinon je pense pouvoir m'en tirer grâce à toi... Merci encors
jordane45
Messages postés
38341
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
4 716
23 déc. 2014 à 15:10
23 déc. 2014 à 15:10
Heu.. la fatigue aidant.. je n'ai pas bien compris ta question.... :-)
Pourrais tu déposer un fichier Exemple sur le site : www.cijoint.com et nous filer le lien ?
Et en nous réexpliquant ce que tu cherches à faire ?
Pourrais tu déposer un fichier Exemple sur le site : www.cijoint.com et nous filer le lien ?
Et en nous réexpliquant ce que tu cherches à faire ?
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
23 déc. 2014 à 17:27
23 déc. 2014 à 17:27
Bah j'ai réussis. Ca marche sans soucis.
J'aimerai bien mais y a beaucoup de truc confidentiel (du moins je crois et j'ose pas tester) donc faudrait que je change pas mal de chose donc un peu pénible (désolé).
Je vais essayer de m'expliquer un peu mieux, mais sinon c'est pas grave j'ai réussis. C'est juste pour savoir.
J'ai un tableau à deux dimension, C colonnes, L Lignes.
J'ai une valeur pour un C et une pour L, j'aimerai donc trouver la valeur dans ce tableau associer à L et C. Sachant que mon tableau a L et C qui varient, qui ne commencent pas au début (même qu'un tableau similaire se trouve avant donc il faut pas les confondre).
J'ai cherché la ligne avec Find et puis la Colonne avec un autre find, pour obtenir la jonction, ma valeur. Existe il une meilleure méthode ?
Je présume que le Find est assez gourmand si on définit pas une plage
J'aimerai bien mais y a beaucoup de truc confidentiel (du moins je crois et j'ose pas tester) donc faudrait que je change pas mal de chose donc un peu pénible (désolé).
Je vais essayer de m'expliquer un peu mieux, mais sinon c'est pas grave j'ai réussis. C'est juste pour savoir.
J'ai un tableau à deux dimension, C colonnes, L Lignes.
J'ai une valeur pour un C et une pour L, j'aimerai donc trouver la valeur dans ce tableau associer à L et C. Sachant que mon tableau a L et C qui varient, qui ne commencent pas au début (même qu'un tableau similaire se trouve avant donc il faut pas les confondre).
J'ai cherché la ligne avec Find et puis la Colonne avec un autre find, pour obtenir la jonction, ma valeur. Existe il une meilleure méthode ?
Je présume que le Find est assez gourmand si on définit pas une plage
jordane45
Messages postés
38341
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
4 716
>
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
23 déc. 2014 à 17:33
23 déc. 2014 à 17:33
Si tu as réussi c'est l'essentiel.
Pas sûr... du moins.. aucune qui ne me vienne à l'esprit.
En définissant une plage, tu améliorerait son rendement..
Mais bon.. c'est toujours moins gourmand que de faire des Boucles dans des Boucles........
Et puis bon.. le FIND .. c'est la même chose que si tu te places dans ta feuille et que tu fais RECHERCHER ( CTRL + F )....
Existe il une meilleure méthode ?
Pas sûr... du moins.. aucune qui ne me vienne à l'esprit.
Je présume que le Find est assez gourmand si on définit pas une plage
En définissant une plage, tu améliorerait son rendement..
Mais bon.. c'est toujours moins gourmand que de faire des Boucles dans des Boucles........
Et puis bon.. le FIND .. c'est la même chose que si tu te places dans ta feuille et que tu fais RECHERCHER ( CTRL + F )....
Akre66
Messages postés
55
Date d'inscription
mercredi 14 mai 2014
Statut
Membre
Dernière intervention
4 octobre 2016
23 déc. 2014 à 17:35
23 déc. 2014 à 17:35
C'est pas faux.
Ok merci pour tout :)
Je vais m'attaquer à l'interface graphique, mais ça me fait un peu peur...
Ok merci pour tout :)
Je vais m'attaquer à l'interface graphique, mais ça me fait un peu peur...