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

Résolu
ramio31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   -
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




A voir également:

5 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 759
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur Dernière intervention   2 759
 
Bonjour,

Je ne connais pas la formule RiskDiscrete... Cela correspond à qu'elle fonction d'Excel???
0
ramio31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   2 759
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur Dernière intervention   2 759
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur Dernière intervention   2 759
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur Dernière intervention   2 759
 
Je n'avais décidément pas compris...
Le principal est que cela fonctionne...
A+
0