Microsoft 365 Problème code VBA qui ne fonctionne pas

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Cherrylie

XLDnaute Junior
Bonjour à tous,

J'ai un problème avec le code VBA de mon fichier : j'ai un message d'erreur qui s'affiche me disant qu'il n'y a pas de cellules correspondantes.

Je suis totalement débutante en VBA (ce code a été fait par job75) mais je cherche à progresser donc je vous serai extrêmement reconnaissante de bien vouloir m'aider.

Merci d'avance et bon week-end à tous !

Cherrylie
 

Pièces jointes

Solution
Bon, finalement j'ai fait les 2 solutions d'affichage sur option.
Et j'ai mis l'Unité en 1er. Mais tu peux déplacer la colonne où tu veux (avantages des tableaux structurés).

Edit: Fichier supprimé. Voir ci-dessous.
Bonjour,
VB:
For Each c In .Range("F16:U" & .Rows.Count).SpecialCells(xlCellTypeConstants, 1)
Il n'y a aucune cellule qui contient une valeur (et encore moins de valeur numérique demandée par l'argument ",1") dans le Range F16:U1048576 et donc le .SpecialCells(xlCellTypeConstants plante.
 
Je ne sais pas trop ce que tu veux faire mais pour protéger cette séquence il faudrait écrire:
Code:
    Dim Rng As Range
    On Error Resume Next
    Set Rng = .Range("F16:U" & .Rows.Count).SpecialCells(xlCellTypeConstants, 1)
    On Error GoTo 0
    
    If Not Rng Is Nothing Then
        For Each c In Rng
            i = c.Row: j = c.Column
            x = .Cells(i, 3) & .Cells(i, 2) & .Cells(9, j) & c
            If d.exists(x) Then
                d.Remove x 'retire de la liste
            ElseIf c > limite Then
                resu(n, 0) = .Cells(i, 3): resu(n, 1) = .Cells(i, 2)
                resu(n, 2) = .Cells(9, j): resu(n, 3) = c
                n = n + 1
            End If
        Next c
    End If
 
Bonjour,
VB:
For Each c In .Range("F16:U" & .Rows.Count).SpecialCells(xlCellTypeConstants, 1)
Il n'y a aucune cellule qui contient une valeur (et encore moins de valeur numérique demandée par l'argument ",1") dans le Range F16:U1048576 et donc le .SpecialCells(xlCellTypeConstants plante.
Bonjour Dudu2,

Tout d'abord, merci pour ta réponse !

Si je comprends bien, le code plante parce que ce sont des formules qui sont sur cette plage de données et non des valeurs numériques, c'est bien ça ?

Merci encore !
 
Si je comprends bien, le code plante parce que ce sont des formules qui sont sur cette plage de données et non des valeurs numériques, c'est bien ça ?
En effet. Qu'il n'y ait rien ou des formules, SpecialCells(xlCellTypeConstants, 1) recherche des constantes (des valeurs non issues de formules) et numériques qui plus est avec ce ",1".

Que veux-tu faire au juste dans cette boucle ?
 
Et pour terminer, je te signale que ton fichier possède une liaison avec un autre fichier.
Regarde la pièce jointe 1140685
Si ce n'est pas volontaire, il vaudrait mieux supprimer cette liaison (Onglet Données / Modifier les liaisons)
Oui, c'est volontaire, étant donné que je travaille sur un fichier confidentiel, j'ai dû faire une extraction de ces deux onglets pour poster sur ce forum.
Pour répondre à ton message en #3, j'essaye de faire un plan d'actions automatique pour tout les risques supérieurs à la cellule D6. Je viens d'essayer ton code et il fonctionne, merci beaucoup. Le seul hic, c'est qu'il ne rajoute pas les lignes dans le tableau comme j'aimerai qu'il fasse. Je vais essayer de modifier le code vba pour que ça fonctionne. Si je fais un mélange de ton code et de l'ancien, ça pourrait fonctionner ?

Merci pour ton aide précieuse.
 
Si c'est le cas, et ça semble l'être au vu du résultat qui s'affiche, la séquence serait:
VB:
        Dim RngConstants As Range
        Dim RngFormulas As Range
        Dim Rng As Range
     
        On Error Resume Next
        Set RngConstants = .Range("F16:U" & .Rows.Count).SpecialCells(xlCellTypeConstants, 1)
        Set RngFormulas = .Range("F16:U" & .Rows.Count).SpecialCells(xlCellTypeFormulas, 1)
        On Error GoTo 0
     
        Select Case True
            Case RngConstants Is Nothing And RngFormulas Is Nothing
                Set Rng = Nothing
             
            Case RngConstants Is Nothing
                Set Rng = RngFormulas
         
            Case RngFormulas Is Nothing
                Set Rng = RngConstants
         
            Case Else
                Set Rng = Union(RngConstants, RngFormulas)
        End Select
     
        If Not Rng Is Nothing Then
            For Each c In Rng.Cells
                i = c.Row: j = c.Column
                x = .Cells(i, 3) & .Cells(i, 2) & .Cells(9, j) & c
                If d.exists(x) Then
                    d.Remove x 'retire de la liste
                ElseIf c > limite Then
                    resu(n, 0) = .Cells(i, 3): resu(n, 1) = .Cells(i, 2)
                    resu(n, 2) = .Cells(9, j): resu(n, 3) = c
                    n = n + 1
                End If
            Next c
        End If

1653727972286.png
 
Si c'est le cas, et ça semble l'être au vu du résultat qui s'affiche, la séquence serait:
VB:
        Dim RngConstants As Range
        Dim RngFormulas As Range
        Dim Rng As Range
    
        On Error Resume Next
        Set RngConstants = .Range("F16:U" & .Rows.Count).SpecialCells(xlCellTypeConstants, 1)
        Set RngFormulas = .Range("F16:U" & .Rows.Count).SpecialCells(xlCellTypeFormulas, 1)
        On Error GoTo 0
    
        Select Case True
            Case RngConstants Is Nothing And RngFormulas Is Nothing
                Set Rng = Nothing
            
            Case RngConstants Is Nothing
                Set Rng = RngFormulas
        
            Case RngFormulas Is Nothing
                Set Rng = RngConstants
        
            Case Else
                Set Rng = Union(RngConstants, RngFormulas)
        End Select
    
        If Not Rng Is Nothing Then
            For Each c In Rng.Cells
                i = c.Row: j = c.Column
                x = .Cells(i, 3) & .Cells(i, 2) & .Cells(9, j) & c
                If d.exists(x) Then
                    d.Remove x 'retire de la liste
                ElseIf c > limite Then
                    resu(n, 0) = .Cells(i, 3): resu(n, 1) = .Cells(i, 2)
                    resu(n, 2) = .Cells(9, j): resu(n, 3) = c
                    n = n + 1
                End If
            Next c
        End If

Regarde la pièce jointe 1140688
 
Par contre je ne comprends pas trop ton tableau qui semble s'incrémenter sans jamais repartir à zéro.
Il semble manquer des initialisations et un effacement. Mais bon, peut-être que c'est voulu.
Merci pour ton aide ! Dans le fichier initial, il s'incrémente selon les informations rentrées dans les autres onglets. Si rien n'est saisi ou si je supprime les données, le tableau sera vide. Je pense qu'il y a plus simple comme méthode mais pour le moment, c'est la seule solution que j'ai trouvée...

Ton nouveau code fonctionne parfaitement !

Merci infiniment, comment as-tu fait pour être aussi calé en vba ? J'aimerai beaucoup progresser mais ce n'est pas facile.

Bon week-end !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Problème Code VBA
Réponses
9
Affichages
392
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
794
Réponses
3
Affichages
84
Réponses
1
Affichages
375
Retour