Récupération de données et mise en forme

Résolu/Fermé
ramio31 Messages postés 12 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 21 octobre 2014 - Modifié par ramio31 le 19/10/2014 à 21:28
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 21 oct. 2014 à 14:08
Bonjour,

Je cherche à réaliser un code VBA qui me permettra de récupérer des données sur un colonne d'un fichier Excel puis de créer un onglet où je vais classer ces données en 2 colonnes dont la 1ère correspondra à la une donnée et la 2ème sa fréquence associée.

En pièce jointe la feuille 1 représente les données à récupérer et la feuille 2 représente le résultat de ma macro.

Merci pour votre aide




5 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
20 oct. 2014 à 08:55
Bonjour,

1- tu as mis deux images de ta feuille Feuil1. De manière générale, il vaut mieux faire passer un fichier plutôt qu'une image.
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com

Va sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...

2- Un peu de lecture

3- Ta solution, donc, par Mr Boisgontier :
Sub CompteItems()
Dim mondico As Object, c As Variant
  Set mondico = CreateObject("Scripting.Dictionary")
  For Each c In Sheets("Feuil1").Range("a2", [a65000].End(xlUp))
    mondico(c.Value) = mondico(c.Value) + 1
  Next c
  Sheets("Feuil2").[c2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
  Sheets("Feuil2").[d2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)
End Sub

0
ramio31 Messages postés 12 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 21 octobre 2014
20 oct. 2014 à 16:42
Bonjour,

Je te remercie pour ta réponse. Je vais me mettre au travail pour voir ce que ça donne et tenir au courant ici.

Le lien comme tu me l'as expliqué : https://www.cjoint.com/?0JuqTs57Wft

Encore merci pour ton aide.
0
ramio31 Messages postés 12 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 21 octobre 2014
20 oct. 2014 à 20:02
Rebonjour, la macro fonctionne très bien merci.

J'aurais une autre question :

Avec les nouvelles feuilles que j'ai créées (car plusieurs fichiers sources), je veux créer des formules dans une feuille appelée "feuilleFormula" qui reprendront les valeurs fréquences et données et qui seront de ce type :


sheets("feuilleFormule").Cells(2,2).FormulaR1C1 = "=RiskDiscrete({Donnée1,Donnée2,Donnée3,.....,DonnéeX},{Freq1,Freq2,Freq3,.....FreqX})"

(Données et fréquence de la feuille 1 par exemple)

sheets("feuilleFormule").Cells(2,2).FormulaR1C1 = "=RiskDiscrete({Donnée1,Donnée2,Donnée3,.....,DonnéeY},{Freq1,Freq2,Freq3,...FreqY})"

(Données et fréquence de la feuille 2 par exemple)

Donc ma question serait quelle macro pour intégrer toutes les données et fréquences dans ma formule tout en faisant référence à la bonne feuille.

Merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
21 oct. 2014 à 07:50
Bonjour,

Je ne connais pas la formule RiskDiscrete... Cela correspond à qu'elle fonction d'Excel???
0
ramio31 Messages postés 12 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 21 octobre 2014 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
21 oct. 2014 à 09:42
Ce n'est pas important le Risk ici dans la formule. Ce qui importe c'est comment intégrer cette formule dans une boucle et la remplir au fur et à mesure.

Sinon risk correspond à une formule d'un logiciel complémentaire à Excel : @risk
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
21 oct. 2014 à 09:48
Pas besoin de boucle, ... selon le type de formule.
Tu peux, sans doute, y intégrer un Array... Un peu comme ceci :

Dim dl As Long, ArrayDonnees(), ArrayFreq()
dl = Sheets("Feuil2").Range("C" & Rows.Count).End(xlUp).Row
ArrayDonnees = Sheets("Feuil2").Range("C2:C" & dl).Value 'Données
ArrayFreq = Sheets("Feuil2").Range("D2:D" & dl).Value 'Fréquences
Sheets("Feuil2").Cells(2, 6).FormulaLocal = "=RiskDiscrete(ArrayDonnees, ArrayFreq)"
0
ramio31 Messages postés 12 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 21 octobre 2014
21 oct. 2014 à 13:04
Je n'arrive pas à savoir ce que renvoie Array.

Renvoie t'elle une ligne du type : {donnée1,donnée2,..} ?

Car lorsque j'exécute le code ça ne fonctionne pas.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
21 oct. 2014 à 13:05
Je t'ai dit que tout dépendais de la formule elle même...
Sans en savoir davantage, je ne peux rien faire de plus.
0

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

Posez votre question
ramio31 Messages postés 12 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 21 octobre 2014
21 oct. 2014 à 13:12
Oui j'ai bien compris mais ici Array me renvoie bizarrement la 1ère valeur de la plage. Connais tu une fonction qui permet de récupérer toute une plage d'une colonne et de l'écrire sous cette forme :

{1,5,6,9,10}

Merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
21 oct. 2014 à 13:28
Décidément, je ne comprends pas du tout.
Désolé, ça doit être moi, mais je saisis de moins en moins ce que tu souhaites réaliser.

Bon.
Reprenons, juste pour moi.
Tu as réalisé une macro qui te donne les données avec leur fréquence. Que veux tu faire avec ces données et fréquences?
0
ramio31 Messages postés 12 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 21 octobre 2014
21 oct. 2014 à 14:04
C'est bon pijaku,

Je suis resté sur ma 1ère idée avec une boucle for et j'ai enfin réussi!

L'incrémentation se fair plutôt comme ca :

For I = 1 to 50
Expression = Expression & "," & Worksheets("MaFeuille").cells(i, 1)
Next I

Du coup je récupère ma plage que je peux écrire directement dans ma formule.

Merci beaucoup a toi pour ton aide
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
21 oct. 2014 à 14:08
Je n'avais décidément pas compris...
Le principal est que cela fonctionne...
A+
0