Microsoft 365 Macro de recherche

Langrand

XLDnaute Nouveau
Bonjour,
Je suis à la recherche de quelqu'un qui pourrait me concocter une "macro".
J'ai des tableaux Excel qui me servent à faire des recherches sur les courses hippiques (chacun son dada...). Je joins un petit tableau pour explication.
Dans les colonnes "AD:GK" j'introduis un tas de données qui représentent des pronostics et autres renseignements qui concernent une course bien déterminée. 9a se traduit par des nombres ou des vides. Chaque rangée concerne une course.
Dans les colonnes après la course je renseigne l'arrivée Colonne "K" le numéro du premier, "L" le deuxième, "M" le troisième et "N" le quatrième.
Les pronostics sont enregistrés en premier et les résultats ensuite .
Pour finir, dans mes colonnes pronostic (AD:GK) Je transforme Les bons pronostics en Lettres: A pour le vainqueur, B le 2me, C le 3me et D le 4me.
Concrètement pour une arrivée "10-9-4-7" je transforme tous les "10" en "A", tous les "9" en "B" , tous les "4" en "C" et tous les "7" en "D".
Je fais cela manuellement et d'une part c'est long et d'autre part il m'arrive de oublier ou de me tromper de cellules.
Est-ce qu'une macro bien tournée pourrait me remplir cette tache automatiquement?
Je n'y connais rien en macro et ne sait pas comment l'appliquer.
Si quelqu'un a la patience...
Merci d'avance.
J.L. L
 

Pièces jointes

  • Classeur1.xlsm
    743.1 KB · Affichages: 10

Zon

XLDnaute Impliqué
Salut ,

Si je comprends bien prenons la ligne 48 de ton fichier où tu n'as pas mis encore les resultats en K,L M et N.

Admettons c'est le 10 qui gagne , tu mets 10 en K48, et tu veux que toutes les cellules contenant 10 de la plage AD48:GK48 soient transformées en A ?? je mets 8 en L alors tous les 8 de la même plage soient en B ?


Peut être en formule là je passe ?? et en VBA c'est plus que faisable . Est ce que tu dois faire d'autre VBA d'ici peu ou c'est que pour ce fichier ???

Merci pour ton retour.
A+++
 

Langrand

XLDnaute Nouveau
Salut ,

Si je comprends bien prenons la ligne 48 de ton fichier où tu n'as pas mis encore les resultats en K,L M et N.

Admettons c'est le 10 qui gagne , tu mets 10 en K48, et tu veux que toutes les cellules contenant 10 de la plage AD48:GK48 soient transformées en A ?? je mets 8 en L alors tous les 8 de la même plage soient en B ?


Peut être en formule là je passe ?? et en VBA c'est plus que faisable . Est ce que tu dois faire d'autre VBA d'ici peu ou c'est que pour ce fichier ???

Merci pour ton retour.
A+++
Désolé, je n'avais pas vu la réponse.
Oui c'est exactement ce que je souhaite.
Cette VBA doit servir pour plusieurs fichiers et plusieurs feuilles.
Un fichier avec 6 feuilles différentes pour le trot et 4 fichiers pour le galop.
Voilà, voilà. Je m'arrange bien des tableaux Excel mais pour VBA je suis nul et je pense être trop agé pour commencer...l 'apprentissage. Mais si on m'explique bien je peux l'utiliser.
De toute façon merci d'avance
J.L. L.
 
Dernière édition:

Zon

XLDnaute Impliqué
Salut,


Dans un 1er temps je te propose d'y aller au trot , puis de passer au galop si besoin ....

Modifier les valeurs d’un plage de cellules en fonction d’un critère de classement particulier.

Je ne mets pas de pièce jointe pour que tu mettes les mains dans le moteur. Si besoin demander de l'aide..
Je n'ai pas mis de gestion d'erreur du programme.


Créer un feuille Parametre où on mets ceci:
En colonne B on mets les lettres de colonne où tu mets tes arrivées, si tu devais en mettre 5 tu insères une colonne dans tes feuilles de courses, alors sous N , (B7) on mettra O et en C7 E . La Plage en G3 est à adapter selon besoin. Pour l'instant F3 ne sert à rien , pas besoin de changer le nom de la feuille. Ce serait en vue d'un traitement de plusieurs feuilles en même temps

PMU.jpg




On fait ALT +F11 pour accéder à VBE , Insertion Module .Dans le module1, on colle ceci :
VB:
'Zon V1  , à adapter
Const PlRang$ = "B3:C6"
Const PlFeuil$ = "E3:E10"
Const PlModif$ = "G3"
Const NomFParam$ = "Parametre"
Const Msg1$ = "Veuillez Vérifier le nom de la feuille parametre et le contenu de ses cellules"

Sub ExeRang()
   Application.Calculation = xlCalculationManual
   MajRang ActiveCell
   Application.Calculation = xlCalculationAutomatic
 
End Sub

Sub MajRang(C As Range) 'Gestion d'erreur à ajouter aprés tests
   Dim T, U, V, Ch, Numlig&
 
   Numlig = C.Row
  ' U = Init(ThisWorkbook.Name, NomFParam, PlFeuil)                     ' à voir pour le traitement de plusieurs feuilles à la fois, boucle sur U
   T = Init(ThisWorkbook.Name, NomFParam, PlRang)                       'recup de colonnes et des rangs
   Ch = T(LBound(T, 1), 1) & Numlig & ":" & T(UBound(T, 1), 1) & Numlig
   V = Init(ThisWorkbook.Name, ActiveSheet.Name, Ch)                      'recup plage K:N nom de la feuille à traiter
   Ch = Init(ThisWorkbook.Name, NomFParam, PlModif)                        'doit retourner 1 seule cellule
   Ch = Left(Ch, 2) & Numlig & ":" & Right(Ch, 2) & Numlig                 'PLage AD : GK avec numéro de ligne
  'Traitement d'une seule plage AD:GK, si plusieurs faire une boucle sur Ch
   TraitementRang T, V, ThisWorkbook.Name, ActiveSheet.Name, Ch, Numlig
 
End Sub

Sub TraitementRang(T, V, C$, ByVal F$, ByVal P$, Numlig&)
'On sert de le colonne 2 de T pour affecter la valeur  cellule qu'on vient de comparer avec V
Dim I&, J&, K&
I = 1
   With Workbooks(C).Sheets(F).Range(P)
      For K = 1 To .Cells.Count
         If .Cells(I, K) <> "" Then
            For J = LBound(V, 2) To UBound(V, 2)
               .Cells(I, K) = IIf(.Cells(I, K) = V(1, J), T(J, 2), .Cells(I, K))
            Next J
         End If
      Next K
   End With
End Sub

Function Init(ByVal C$, ByVal F$, ByVal P$)
  On Error Resume Next
   With Workbooks(C).Sheets(F).Range(P)
      Init = .Cells
   End With
End Function


  • Faire une copie de la feuille course pour les tests…
  • Dans la feuille de données Course, on remplis les cellules de K48 à N48 , on peut saisir qu’une cellule sur 4 ou 2 sur 4. Il est primordial de rester sur la ligne 48 peu importe la cellule, le programme travaille à partir de la feuille active et de la cellule active. Si on passe à la ligne 52 , il faut rester sur la ligne 52.
  • Faire ALT+F8 au clavier lancer la macro (il y en a qu’une normalement) ExeRang. La plage AD :DK est modifiée.


La macro pourra être déclenchée par la suite par un bouton , un clic droit , le ruban .(pub pour le fil de PascalToulon Ruban pour vos programmes )



Le Galop serait de traiter plusieurs lignes à la fois, mais si tu es l’utilisateur unique cela devrait suffire.

A+++

Le Kiki de Zon
 

Langrand

XLDnaute Nouveau
Salut,


Dans un 1er temps je te propose d'y aller au trot , puis de passer au galop si besoin ....

Modifier les valeurs d’un plage de cellules en fonction d’un critère de classement particulier.

Je ne mets pas de pièce jointe pour que tu mettes les mains dans le moteur. Si besoin demander de l'aide..
Je n'ai pas mis de gestion d'erreur du programme.


Créer un feuille Parametre où on mets ceci:
En colonne B on mets les lettres de colonne où tu mets tes arrivées, si tu devais en mettre 5 tu insères une colonne dans tes feuilles de courses, alors sous N , (B7) on mettra O et en C7 E . La Plage en G3 est à adapter selon besoin. Pour l'instant F3 ne sert à rien , pas besoin de changer le nom de la feuille. Ce serait en vue d'un traitement de plusieurs feuilles en même temps

Regarde la pièce jointe 1173675



On fait ALT +F11 pour accéder à VBE , Insertion Module .Dans le module1, on colle ceci :



  • Faire une copie de la feuille course pour les tests…
  • Dans la feuille de données Course, on remplis les cellules de K48 à N48 , on peut saisir qu’une cellule sur 4 ou 2 sur 4. Il est primordial de rester sur la ligne 48 peu importe la cellule, le programme travaille à partir de la feuille active et de la cellule active. Si on passe à la ligne 52 , il faut rester sur la ligne 52.
  • Faire ALT+F8 au clavier lancer la macro (il y en a qu’une normalement) ExeRang. La plage AD :DK est modifiée.


La macro pourra être déclenchée par la suite par un bouton , un clic droit , le ruban .(pub pour le fil de PascalToulon Ruban pour vos programmes )



Le Galop serait de traiter plusieurs lignes à la fois, mais si tu es l’utilisateur unique cela devrait suffire.

A+++

Le Kiki de Zon
Salut,
J'ai un peu trotté et mis les mains dans le cambouis.
Je joins une copie d'écran pour la réponse. Ai-je bien collé le texte au bon endroit? La macro apparaît bien à sa place.
J'ai isolé la feuille cours "D" pour la démo mais en fait elle se trouve dans un fichier qui contient 6 feuilles.
Merci pour ton retour.
J.L. L.
 

Pièces jointes

  • Capture d’écran 2023-06-29 184740.png
    Capture d’écran 2023-06-29 184740.png
    132.7 KB · Affichages: 18

Zon

XLDnaute Impliqué
Coquinou, tu as mis K en ligne 4 sur la feuille parametre.
et tu as effacé la partie de constantes en haut du module1 , quand je disais VB: , c'était juste les 3 caractères.

C'est pas grave, je te remets ton fichier corrigé

A+++
 

Pièces jointes

  • PMUV1.2.xlsm
    755.1 KB · Affichages: 10

Langrand

XLDnaute Nouveau
Coquinou, tu as mis K en ligne 4 sur la feuille parametre.
et tu as effacé la partie de constantes en haut du module1 , quand je disais VB: , c'était juste les 3 caractères.

C'est pas grave, je te remets ton fichier corrigé

A+++
Evidemment, ça ne pouvait pas fonctionner.
Maintenant ça y est!
Pour l'adaptation et le bouton dans le ruban on verra demain. Pour ce soir Papy se fatigue. Merci beaucoup en tout cas


J.L. L.
 

Langrand

XLDnaute Nouveau
Salut ,

Essaies de faire ton fichier avec le boutons persos que tu aimerais dans le ruban.

On adaptera si besoin la procédure ...

regardes l'appli de PatrickToulon avec les vidéos de formation. Ruban pour vos programmes

A+++
Bonjour,
J'ai déjà un bouton 'macro' dans le ruban, et je ne comprends rien de la video. Ça part d'un tableau qui vient de je ne sais où. J'ai du rater quelques séances...
Sinon reste plus qu'à adapter la macro pour toutes les feuilles du fichier (6 feuilles)