Résolu Macro Excel - Reporter certaines cellules dans une autre feuille selon la valeur d'une autre cellule

LNo-oO-

Nouveau membre
Bonjour à tous !

Je galère depuis hier sur un fichier Excel... Ce qui me rassure à la lecture de ce forum, c'est que je ne pense pas être la première à qui ça arrive :)

Voici ce que je voudrais faire :
J'ai une première feuille ("Evaluation"), dans laquelle j'ai deux colonnes : Note et Commentaire. Je voudrais que pour chaque ligne où ma note = B, C, D, ou NC Majeure, le contenu de la colonne Commentaire de cette même ligne se reporte dans ma 2e feuille ("Plan D'actions").
Et voici en plus les subtilités de mon fichier :
- Il se peut que quelque chose soit écrit dans la colonne Commentaire même si ma note = A. Mais dans ces cas-là, je ne veux pas que cela se reporte dans "Plans D'actions".
- Comme j'ai un en-tête dans mon fichier, ma colonne "Note" ne commence qu'à partir de la ligne 4.
- Pour la même raison, je ne peux reporter mes Commentaires qu'à partir de la ligne 6 dans la feuille Plan D'actions
- Dans Plan D'actions, je voudrais bien entendu que les différents Commentaires se rangent bien sagement à la suite les uns des autres, sans qu'il n'y ait d'espace entre eux (sinon, une simple formule "SI..." ferait l'affaire).

J'ai essayé de creuser le langage VBA et de faire une macro, mais bien sûr, elle ne marche pas :'(
J'ai souvenir de lointains cours de programmation à la fac mais tout ça remonte tellement que je ne me souviens pas de grand chose !

Voici ce que j'ai sorti pour l'instant, est-ce qu'une âme charitable accepterait de m'aider à comprendre ce qui cloche ?

Code:
Sub Macro1()
    Dim num_ligne_entree As Integer
    Dim note As String
    Dim commentaire As String
    Dim num_ligne_sortie As Integer
    Dim cellule_destination As String
    
    num_ligne_entree = 4
    num_ligne_sortie = 6
    
    For i = 1 To 64
        note = Sheets("Evaluation").Cells(num_ligne_entree, 3)
        commentaire = Sheets("Evaluation").Cells(num_ligne_entree, 4)
        cellule_destination = Sheets("Plan D'actions").Cells(num_ligne_sortie, 1)
            
            If note = "B" Or note = "C" Or note = "D" Or note = "NC Majeure" Then
                cellule_destination = commentaire
                num_ligne_entree = num_ligne_entree + 1
                num_ligne_sortie = num_ligne_sortie + 1
            Else: num_ligne_entree = num_ligne_entree + 1
            End If
    
    Next
End Sub


Merci d'avance à tous !!
Hélène
 

drul

Obscur pro du hardware
Staff
Meilleure réponse
Salut Hélène, pas mal de problème de type dans ta macro, tu cofond une cellule: type Range en VBA et son contenu: Range.Value qui lui est une string
VBA ne t'aide malheureusement car il est assez permissif pour ce type d'erreur ...
Je te propose de corriger de la manière suivante:
Code:
Sub Macro1()
    Dim num_ligne_entree As Integer
    Dim note As String
    Dim commentaire As Range
    Dim num_ligne_sortie As Integer
    Dim cellule_destination As Range

    num_ligne_entree = 4
    num_ligne_sortie = 6

    For i = 1 To 64
        note = Sheets("Evaluation").Cells(num_ligne_entree, 3).Value
        Set commentaire = Sheets("Evaluation").Cells(num_ligne_entree, 4)
        Set cellule_destination = Sheets("Plan D'actions").Cells(num_ligne_sortie, 1)

        If note = "B" Or note = "C" Or note = "D" Or note = "NC Majeure" Then
            cellule_destination.Value = commentaire.Value
            num_ligne_entree = num_ligne_entree + 1
            num_ligne_sortie = num_ligne_sortie + 1
        Else
            num_ligne_entree = num_ligne_entree + 1
        End If

    Next
End Sub

Nota Bene:
Vu que ta macro est simple, on pourrait avantagesement se passer de toutes les variables intermédiaires:

Code:
Sub Macro1()
    Dim num_ligne_entree As Integer
    Dim num_ligne_sortie As Integer
    Dim Note As String
    

    num_ligne_sortie = 6
    For num_ligne_entree = 4 To 68
        Note = Sheets("Evaluation").Cells(num_ligne_entree, 3).Value
        If Note = "B" Or Note = "C" Or Note = "D" Or Note = "NC Majeure" Then
            Sheets("Plan D'actions").Cells(num_ligne_sortie, 1).Value = Sheets("Evaluation").Cells(num_ligne_entree, 4).Value
            num_ligne_sortie = num_ligne_sortie + 1
        End If
    Next
End Sub
 

LNo-oO-

Nouveau membre
Youpi, ça marche nickel, trop merci !!
En effet, pas mal de confusion de mon côté, mais j'ai bien relu ta correction et j'ai compris où je m'étais trompée, c'est déjà ça !
Effectivement, c'est plus simple sans les deux variables que tu as enlevé : j'ai donc opté pour cette solution.

Merci 1000 fois encore :) :)
 

LNo-oO-

Nouveau membre
Hum... Décidément, Excel me fâche...! Puis-je abuser et solliciter ton aide une dernière fois ?

A la fin de mon onglet "Evaluation", j'ai (sur la ligne n°69) une case de Commentaire qui n'est associée à aucune note. Je voudrais qu'après avoir fait son merveilleux travail, la macro ajoute systématiquement ce qui est écrit dans cette case à la fin du listing qu'elle a créé à l'onglet Plan D'actions.

Pour ce faire, j'ai ajouté
Code:
     Sheets("Plans D'actions").Cells(num_ligne_sortie, 1).Value = Sheets("Evaluation").Cells(69, 1).Value
juste après la fin de ma boucle (en dessous de Next). Je pensais que c'était simple ? Et bien non, ça me met que "L'indice n'appartient pas à la sélection"... Qu'est-ce que j'ai raté, cette fois ??


Et dernière petite question : je n'arrive pas à ajuster la hauteur de mes lignes au contenu des cellules ? J'ai pourtant bien activé l'ajustement automatique et je ne comprends pas pourquoi quand je fais la manip', ça me remet toutes les lignes à 15 points de hauteur. Le mieux que je puisse faire c'est de les ajuster manuellement. As-tu déjà rencontré ce problème ?
Enfin, s'il ne reste que ça comme problème dans mon fichier, je devrais pouvoir me passer de la fonctionnalité !

Merci d'avance pour ta patience et ton aide précieuse !
 

drul

Obscur pro du hardware
Staff
Salut,
plans D'actions <> plan D'actions ...

Pour le deuxième point, c'est étrange, en copiant la valeur il ne devrait pas toucher au format ...
 

LNo-oO-

Nouveau membre
Oh la la, quelle boulette... Là j'ai honte ! :pfff:

Pour le deuxième point, ce ne sont pas que les cellules de destination qui sont touchées, mais tout mon tableur. Mais ce n'est pas grave, je vais le laisser comme ça ce n'est pas trop gênant.

Merci merci merci encore pour ton aide (et tes réponses rapides, en plus !) :)
 

drul

Obscur pro du hardware
Staff
On en fait tous des boulettes de ce genre :p
Pi un petit moment de honte est vite passer :o
Vraiment étrange tes cellules qui se redimensionne ...
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 846
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut