IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Excel 2019: erreur "13" compatibilité type: pour comparer des plages de valeurs, à une palge de référence


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut Excel 2019: erreur "13" compatibilité type: pour comparer des plages de valeurs, à une palge de référence
    [Excel 2019]

    Bonjour à tous, je fais de post, pour pouvoir contourner, l'erreur "13" type 'comptabilité sur la ligne de code suivant ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     If plageStats.Value = plage_Reference.Value Then... ' Comparaison des valeurs des plages de cellules
    le scénario est le suivant ; je cherche Ã* comparer les plages de valeurs numériques, d'une feuille de calculs "feuille_Stats" d'un tableau; en commençant, du bas, vers le haut

    avec la dernière plage des valeur numériques uniquement ,de référence, de la feuille de calculs "feuille_Reference".

    tant que c'est diffèrent, tu supprimes la ligne encours et les lignes précédentes ; et dès qu'il y a égalité, tu ne supprimes aucune lignes, tu mets a jour la variable, "ligR" et tu sorts de la procédure Sub.

    pour information, les tableaux, ont les mêmes structures
    le code VBA de base ébauché est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     Définir les plages de cellules
         Dim plageStats As Range, plage_Reference As Range, ligneCourante As Integer
         Dim sortieBoucle As Boolean
         Dim lastRow As Integer
     
     
    Set feuille_Reference = ThisWorkbook.Sheets("feuille_Reference") 'Définir la feuille de calcul de référence de comparaison
         Set feuille_Stats = ThisWorkbook.Sheets("feuille_Stats") 'feuille des statistiques à comparer
     
            ligR = 1319 'valeurs de test
     
              ligneCourante = ligR 'ligneCourante` pour la ligne courante dans la feuille de calculs "feuille_Stats"
     
              lastRow = feuille_Reference.Cells(feuille_Reference.Rows.Count, "C").End(xlUp).Row 'je cherche la dernière ligne de la feuille de référence
     
                Set plage_Reference = feuille_Reference.Range("C" & lastRow & ":H" & lastRow) 'plage de référence 
     
                           Set plageStats = feuille_Stats.Range("C" & ligR & ":H" & ligR) 'Définir la plage des valeurs stats a comparer 
     
                   Do While ligR >= 3 And sortieBoucle = False ' parcours du tableau stats de bas en haut, en décrementant ligR, tous les 3 lignes, oui..!! parce que mes valeurs numériques sont de 3 lignes en 3 lignes
     
                        If plageStats.Value = plage_Reference.Value Then... ' Comparaison des valeurs des plages de cellules
     
    	       ' Les valeurs sont identiques, donc pas besoin de supprimer les lignes précédentes
    	                  MsgBox "ligR OK prête pour traitement suivant: " & ligR
     
                             sortieBoucle = True  'Les valeurs sont identiques, sortir de la boucle 
    	         Else
    	                   feuill_Stats.Range("C" & ligneCourante & ":H" & ligneCourante).Delete Shift:=xlUp
     
                                    ligR = ligR - 3 'mise a jours de la variable ligR
     
    				 Set plageStats = feuille_Stats.Range("C" & ligR & ":H" & ligR) ' Définir la plage de statistiques
     
                      End If
    	Loop 
     
     'Sortir de la boucle si les valeurs ont été trouvées
          If sortieBoucle Then Exit Sub
    End Sub
    merci, a tous conseils, et directives pour se post .

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    Power Query est ton ami.
    - Transforme tes plages en tableaux structurés.
    - Crée une requête basée sur chaque tableau (connexion uniquement).
    - Crée une troisième requête qui combine les 2 précédente (jointure interne) et charge la dans une nouvelle feuille. Le tableau résultant ne contiendra que les lignes correspondantes.

  3. #3
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 509
    Par défaut
    Bonjour,
    Il te faut faire un test sur la valeurs des cellules des deux plages, voici une solution parmis d'autres :
    Coller cette fonction dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function IsEgal(ByRef Plage1 As Range, ByRef Plage2 As Range) As Long
        Dim Tab1 As Variant
        Tab1 = Application.Transpose(Application.Transpose(Plage1))
        Dim Tab2 As Variant
        Tab2 = Application.Transpose(Application.Transpose(Plage2))
        IsEgal = StrComp(Join(Tab1, "|"), Join(Tab2, "|"), vbTextCompare) = 0
    End Function
    Modifier le code fournis comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub Test104()
        'Définir les plages de cellules
        Dim feuilleReference As Excel.Worksheet
        Set feuilleReference = ThisWorkbook.Worksheets("feuille_Reference") 'Définir la feuille de calcul de référence de comparaison
     
        Dim feuilleStats As Excel.Worksheet
        Set feuilleStats = ThisWorkbook.Worksheets("feuille_Stats") 'feuille des statistiques à comparer
     
        Dim LigR As Long
        LigR = 1319                                  'valeurs de test
     
        Dim currentRow As Long
        currentRow = LigR                            'ligneCourante` pour la ligne courante dans la feuille de calculs "feuille_Stats"
     
        Dim lastRow As Long
        lastRow = feuilleReference.Cells(feuilleReference.Rows.Count, "C").End(xlUp).Row 'je cherche la dernière ligne de la feuille de référence
     
        Dim plageReference As Range
        Set plageReference = feuilleReference.Range("C" & lastRow & ":H" & lastRow) 'plage de référence
     
        Dim plageStats As Range
        Set plageStats = feuilleStats.Range("C" & LigR & ":H" & LigR) 'Définir la plage des valeurs stats a comparer
     
        Dim sortieBoucle As Boolean
        Do While LigR >= 3 And sortieBoucle = False  ' parcours du tableau stats de bas en haut, en décrementant ligR, tous les 3 lignes, oui..!! parce que mes valeurs numériques sont de 3 lignes en 3 lignes
            'If plageStats.Value = plageReference.Value Then
            If IsEgal(plageReference, plageStats) Then '... Comparaison des valeurs des plages de cellules
                ' Les valeurs sont identiques, donc pas besoin de supprimer les lignes précédentes
                MsgBox "ligR OK prête pour traitement suivant : " & LigR
                sortieBoucle = True                  'Les valeurs sont identiques, sortir de la boucle
            Else
                feuilleStats.Range("C" & currentRow & ":H" & currentRow).Delete Shift:=xlUp
                LigR = LigR - 3                      'mise a jours de la variable ligR
                Set plageStats = feuilleStats.Range("C" & LigR & ":H" & LigR) ' Définir la plage de statistiques
            End If
        Loop
    End Sub
    N'étant pas fan des underscore dans les noms de variables j'en ai modifié quelques-unes.

    nb. Si la procédure et la fonction sont dans le même module la fonction peut être déclarée en Private.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut

    Bonsoir, et merci a Valtrase, de sa réponse, effectivement, je vais exploiter son exemple de code, et faire des essais.

    je pourrai restructuré l'existant .


    bonsoir , et merci à deedolith de ces conseils , sur power query , mais avoir une nouvelle feuille, suite à des requêtes lancées ; cela ne m'aurait pas arrangé

    je préfère restructuré l'existant.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut

    re à Valtrase

    Alors, avec cette approche, c'est bien celle-ci que je recherchais, la fonction de base de comparaison, je m'en inspire pour d'autre

    procédures ; je fais mes tests; avec les enchainements qui se suivent.


  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Par défaut

    la méthode est concluante bravo merci post clos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/05/2024, 02h17
  2. [Excel 2019] Erreur de compilation sur appel d'une fonction
    Par amateur_will dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/10/2023, 14h20
  3. [Excel 2019] erreur de compilation "Type d'arguments ByRef incompatible"
    Par amateur_will dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/09/2023, 00h08
  4. Quel type pour contenir des fichiers ?
    Par sofiane80 dans le forum SQLite
    Réponses: 5
    Dernier message: 11/03/2009, 18h39
  5. Réponses: 3
    Dernier message: 07/05/2008, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo