Code VBA pour copie résultats

Bonjour

Le fichier joint est 1 partie d'un programme de calcul de scorte de jeu de tarot.

Actuellement, je rentre manuellement après chaque date les points : onglet RESULTATS colonne N dans l'onglet DONNEES colonne B,E,H K,......selon la date affichée en O1 (RESULTATS) et au joueur correspondant. Exemple: Joueur 10 (896 points) le 02 Avril. Je rentre également le nombre de joueurs pour le calcul des scores.

Je voudrais creer 1 macro pour faire cela automatiquement (pour chaque joueur correspondant à la date O1) mais mes connaissances en code VBA sont trop limités.Je recherche de l'aide . Merci par avance

Régis

le nombre 7578 (joueur 18) en H21 (DONNEES) est 1 erreur ; ne pas entenir compte

Bonjour à tous !

REG03, ton fichier est protégé par un mot de passe...

Bonne journée !

Bonjour.

Ci joint fichier déverrouillé. J'ai supprimé les macros car il n'y a qu'une petite partie (celle ou j'ai besoin d'aide)

Bonne journée

Régis

fichier ici --> https://forum.excel-pratique.com/s/goto/1243410

Désolé; c'est le bon fichier

Bonjour

Essayez le code comme ceci

Sub test()
Dim col As Byte, i As Byte, dlg As Byte, ligne As Byte

Set wsR = Sheets("RESULTATS")
Set wsD = Sheets("DONNEES")

With wsD
    For i = 2 To .Range("AO1").Column Step 3
        If CLng(.Cells(1, i)) = CLng(wsR.Range("O1")) Then col = i: Exit For
    Next i

    For i = 3 To wsR.Range("M" & Rows.Count).End(xlUp).Row
        If wsR.Range("N" & i) >= 0 Then
            On Error Resume Next
            ligne = .Range("A:A").Find(CStr(wsR.Range("M" & i)), LookIn:=xlValues, LookAt:=xlWhole).Row
            If ligne > 0 Then
                .Cells(ligne, col) = wsR.Range("N" & i).Value
            End If
            ligne = 0
        End If
    Next i
End With
End Sub

Rem : attention à vos noms de joueurs qui ne sont pas identiques des deux cotés
Si j'avais fait ce fichier, j'aurais créé une liste de validation dans la colonne M de la feuille Resultats avec le nom des joueurs tel que mentionné en colonne A de la feuille Donnees. Cela évite des erreurs à la recopie.

Si ok pensez à cloturer le fil

Crdlt

Merci pour le code

Ce fichier a été construit pour le Forum. Le fichier complet comporte 9 Feuilles avec différents calculs.

Le nom enrégistré en DONNEES (colonne A) sera forcement identique aprés calculs en RESULTATS (colonne M). Pour éviter les erreurs du Fichier Essais, j'ai crée 1 lien entre les 2 (résultat identique que fichier complet)

Apparemment le code ne fonctionne pas pour les scores négatifs.

Est il possible d'intégré à la Macro le nombre de joueurs en DONNEES (B2,E2,H2,K2,...........)

Merci pour votre aide

Rebonjour,

Je pense que j'ai trouvé pour les scores négatifs; if faut supprimer >=0 dans le If Then

Si c'est cela, il ne manque que le nombre de joueurs à copier. Pour info, dans le fichier complet, on peut avoir cette information dans 1 feuille nommée "INSCRIPTIONS" cellule C1

re

Apparemment le code ne fonctionne pas pour les scores négatifs.

Oui exact. Je n'avais pas fait attention à ce point
Dans le code remplacez

If wsR.Range("N" & i) >= 0 Then

par ceci

If IsNumeric(wsR.Range("N" & i)) Then

Est il possible d'intégré à la Macro le nombre de joueurs en DONNEES (B2,E2,H2,K2,...........)

Oui. Ajoutez ces lignes au code juste entre l'instruction NEXT i et le END WITH

Dim dlg As Byte
    dlg = .Range("A" & Rows.Count).End(xlUp).Row - 1
    nbligne = WorksheetFunction.CountA(.Range("A4:A" & dlg))
    .Cells(2, col) = WorksheetFunction.CountA(.Range(.Cells(4, col), .Cells(nbligne, col)))

Rem : Supprimez l'objet Module de classe dans l'éditeur VBA, le code fait bugguer le fichier. Ce code n'a pas sa place à cet endroit. Il doit être placé dans Thisworkbook uniquement.

image

Crdlt

Parfait

Peut on copier le nombre de joueurs comme décrit ci dessus?

Désolé je n'avais pas tout lu

Pas grave c'est moi qui ai amendé le post pendant que vous répondiez

Pensez à cloturer le fil si terminé

Crdlt

Avec ce code: Message d'erreur:

Erreur de compilation:

Déclaration existante dans la portée en cour

dlg As Byte en bleu

Bonjour,

Le code fonctionne si on désactive la ligne: Dim dlg As Byte

Mais je rencontre 1 autre problème:

Dans le fichier complet: Le nombre de joueurs (DONNEEs colonneA) est de 40 (potentiellemnt jusqu'à 50 maxi)

A chaque date, le nom des inscrits est différent.

Si on sélectionne 1 joueur à partir de la ligne 33 (DONNEES colonne A), il n'est pas comptabilisé dans le nombre de joueurs(colonnes B,E,H,K,........) alors que ses points sont bien collés.

Quel peut être le problème?

Cordialement

Bonjour

Avec ce code: Message d'erreur:
Erreur de compilation:
Déclaration existante dans la portée en cour
dlg As Byte en bleu

Oups oui. Normal car dlg est déjà déclarée en entête du code. donc supprimez la ligne

Dans le fichier complet: Le nombre de joueurs (DONNEEs colonneA) est de 40 (potentiellemnt jusqu'à 50 maxi)
Si on sélectionne 1 joueur à partir de la ligne 33 (DONNEES colonne A), il n'est pas comptabilisé dans le nombre de joueurs(colonnes B,E,H,K,........) alors que ses points sont bien collés

Quand vous dites "sélectionner un joueur", que voulez vous dire
De base je suis parti sur le fait que tous les noms de joueurs sont placés entre les lignes 4 et 61

Le code est exécuté lorsque vous mettez la date en O1 et il reporte les résultats enregistrés en colonne N dans la feuille Données en fonction de la date en O1

Donnez-moi un exemple concret

Bonjour,

Les points sont correctement attribués.

C'est le nombre de joueurs qui n'est pas toujours bon et je ne comprends pas pourquoi.

Dans le fichier complet, la cellule C1 de la feuille "COMMANDE" contient cette valeur.

Je pense qu'un copier coller de cette cellule serait 1 bonne solution mais je n'arrive pas à faire le code (sélectionner B2,E2,H2,K2.....).de la feuille DONNEES.

Cordialement

C'est le nombre de joueurs qui n'est pas toujours bon et je ne comprends pas pourquoi.

Dans les trois lignes que je vous ai données, remplacez les trois lignes que je vous ai données par ceci. cela vous permettra de voir ce que chaque ligne renvoie comme info

    MsgBox .Range("A" & Rows.Count).End(xlUp).Row - 1
    MsgBox WorksheetFunction.CountA(.Range("A4:A" & dlg))
    MsgBox WorksheetFunction.CountA(.Range(.Cells(4, col), .Cells(nbligne, col)))

La première devrait vous renvoyer 61 dans votre fichier
La deuxième le nombre de lignes comportant un nom de joueur entre la ligne 4 et 61
La troisième le nombre de joueur entre la ligne 4 et la dernière ligne où vous avez des joueurs comportant un nombre de points

Dites moi d'abord ce qui n'est pas bon dans ces trois lignes


Dans le fichier complet, la cellule C1 de la feuille "COMMANDE" contient cette valeur.

Pour cela il vous suffit d'ajouter cette ligne avant le END WITH

Sheets("Commandes").Range("C1") = .Cells(2, col)

msgbox1: 61

puis la macro s’arrête

résultats: les points sont bien attribués mais rien dans la cellule: nombre de joueur

oups,

Edit : en dessous de next i, mettez ceci

    dlg = .Range("A" & Rows.Count).End(xlUp).Row - 1
    MsgBox dlg
    nbligne = WorksheetFunction.CountA(.Range("A4:A" & dlg))
    MsgBox nbligne
    MsgBox WorksheetFunction.CountA(.Range(.Cells(4, col), .Cells(nbligne, col)))

là vous aurez les 3 messages

61 OK

32 OK

10 pas bon (13)

Rechercher des sujets similaires à "code vba copie resultats"