Erreur d'execution '13' Incompatibilité de type

Bonjour à tous,

Je tourne en boucle depuis ce matin (je me lève tôt ) à trouver l'origine de ce message d'erreur. J'ai récemment changé cette ligne dans mon code (afin d'aller plus vite, la colonne U étant la seule qui m'intéresse):

Set MergedCell = ActiveSheet.UsedRange.Find("", LookAt:=xlPart, SearchFormat:=True)

en

Set MergedCell = ActiveSheet.Columns("U:U").Find("", LookAt:=xlPart, SearchFormat:=True)

et depuis, j'ai la ligne

If Cells(Lign, 5).Value <> Cells(Lign + 1, 5).Value Then

qui est surlignée dans le débogeur lorsque je lance ma macro:
Sub Miseenpage()
'mise en page: defusioner et remplir les cases 

Sheets("Planning").Activate

Dim MergedCell As Range, FirstAddress As String, MergeAddress As String, MergeValue As Variant
Application.FindFormat.MergeCells = True
Do
Set MergedCell = ActiveSheet.Range("U:U").Find("", LookAt:=xlPart, SearchFormat:=True)
If MergedCell Is Nothing Then Exit Do
MergeValue = MergedCell.Value
MergeAddress = MergedCell.MergeArea.Address
MergedCell.MergeArea.UnMerge
Range(MergeAddress).Value = MergeValue
Loop
Application.FindFormat.Clear

'séparer les "MODE"

Dim Lign As Long
Dim Plage As String
Dim I As Long, nbLignes As Long
nbLignes = Cells(Rows.Count, "D").End(xlUp).Row

Sheets("Expéditions").Select

    Lign = 22
    For Lign = 22 To 50
        If Cells(Lign, 5).Value <> Cells(Lign + 1, 5).Value Then
            Lign = Lign + 1
            Plage = Lign & ":" & Lign
            Rows(Plage).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        End If
    Next
  End Sub

Une idée ? A ce que j'ai compris de l'Erreur d'execution '13' c'est une histoire de variable mais je n'ai pas touché à ces dernières...

Bonjour,

A la simple lecture de ton code, je constate que tu utilises des cellules fusionnées ...

Il faut que tu saches que tu touches là .... à l'ennemi juré de tous ceux qui utilisent Excel ...

Un conseil ... que j'espère pour toi ... tu pourras appliquer :

Supprimer toutes les cellules fusionnées ...!!!

James,

le problème est que l'on m'envoie des fichiers excels avec des cellules fusionnées et je ne peux pas faire autrement que faire avec: d'où l’intérêt de mon premier code qui défusionne la colonne U (la seule dont j'ai besoin de récupérer des infos) et colle la valeur dans les cellules vides alors défusionnées

Re,

Je vais t'avouer que je n'aime écrire une macro sans avoir le support du fichier ...

Mais, comme tu veux défusionner ... et je t'en félicite ...

Ci-joint un code à tester ...

Sub Défusion()
' Macro à tester
Dim i As Long
Dim lder As Long
Dim rng As Range
Sheets("Planning").Activate
lder = ActiveSheet.Range("U65536").End(xlUp).Row

    For i = 2 To lder   ' les cellules fusionnées démarrent en ligne 2
      Set rng = ActiveSheet.Cells(i, 21).MergeArea
      With rng
          If .MergeCells Then
              .Cells(1, 1).UnMerge
          End If
      End With
    Next i
End Sub

James,

Merci pour ta patience et pour ton code , ce dernier s'avère plus rapide que l'autre pour défusionner ma colonne, cependant il ne copie pas la valeur dans les cases défusionnées vides.

je te joins un fichier "exemple" pour que tu puisses y voir plus clair.

Mais c'est étrange car en utilisant le même code sur ce fichier exemple la macro marche nickel alors que sur mon vrai fichier (que je ne peux vraiment pas te passer), j'ai le message d'erreur qui apparait... peut-être faudrait-il reformuler le code ?

10testadmdg.xlsm (29.06 Ko)

Re,

Merci pour ton fichier ...

Cependant, j'ai une question ... pour clarifier ton objectif ...

Ta colonne doit être défusionnée ... et ensuite tu veux copier quoi vers où ... ???

Enfaite je souhaiterais que la colonne soit dé-fusionnée uniquement, sauf que lorsque l'on dé-fusionne plusieurs cellules le texte se déplace dans une seule cellule seulement, et là je voudrais qu'il se mette aussi dans les cellules vides du dé-fusionnage

Re,

Compris ... la source est la Colonne U et la destination ... est la Colonne U ...

19testadmdg.xlsm (28.62 Ko)
James007 a écrit :

Re,

Compris ... la source est la Colonne U et la destination ... est la Colonne U ...

Oui voilà comment je voulais l'expliquer

Re,

Donc, est-ce-que la défusion "atomique" fonctionne comme tu le voulais ...???

Je ne veux pas abuser de ta gentillesse James mais le code ne fonctionne pas ,

que voulais-tu dire par

    Set rng = ActiveSheet.Cells(i, 1).MergeArea  ' colonne U = 21

?

Re,

J'ai fait des tests sur la Colonne 1 ...

Le bon code est : (remplacer 1 par 21 ...)

Set rng = ActiveSheet.Cells(i, 21).MergeArea

Alors ton code est génial, plus rapide et léger que celui que j'utilisais avant,

Cependant , j'ai toujours mon problème "Erreur d'execution '13' Incompatibilité de type" qui revient quand je le combine avec le code pour réaliser l'opération sur la feuille "Expéditions" de mon fichier (saut d'une ligne entre deux "modes" différents)

'séparer les "MODE"

Dim Lign As Byte

With Sheets("Expéditions")
       For Lign = 22 To 50
         If .Cells(Lign, 5).Value <> .Cells(Lign + 1, 5).Value Then
             Lign = Lign + 1
            .Rows(Lign).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

         End If
     Next
End With

c'est la ligne

   If .Cells(Lign, 5).Value <> .Cells(Lign + 1, 5).Value Then

qui est alors surlignée par le débogeur

Re,

Content que le code fonctionne ...et te rende service ...

Concernant ce que tu appelles la combinaison avec le code de la Feuille Expéditions ... c'est un autre sujet ...

Ci-joint une proposition....

Si tu tiens à "combiner " les deux codes ensemble ... fais attention à tes déclarations de variable à double ... au milieu du code ...

27testadmdg.xlsm (30.40 Ko)

Merci de ton aide Bond

admdg a écrit :

Merci de ton aide Bond

Merci pour tes remerciements ... !!!

Content que tout fonctionne comme tu le souhaitais ...

Rebondissements !!!

Je m'étais résolu à employer les deux macros de façon séparé, et puis j'ai remarqué que lorsque mon fichier Excel a des liaisons l'erreur apparaissait, alors que lorsque je fais rompre les liaisons manuellement je peux utiliser mes deux macros en même temps sans le message d'erreur !

Problème: (encore ) le but de mon fichier et de traiter des données que je récupère d'un autre fichier (d'où les fusions non voulues), sauf que ce dernier fichier comporte des liaisons. Et pour compliquer les choses ces liaisons changent de nom constamment !

Aussi connaîtrais-tu une macro qui permette de rompre toutes les liaisons du classeur ?

Re,

Si cela ne t'embête pas ... une chose après l'autre ...

D'abord, comment combiner les deux macros ...

Ci-joint une proposition ...

11testadmdg.xlsm (31.01 Ko)

Bonjour James,

Merci pour ta proposition celle-ci fonctionne tout à fait (je ne connaissais pas cette méthode pour lancer plusieurs macros l'une après l'autre c'est très efficace ! )

Mais j'ai encore le message d'erreur me surlignant If Cells(Lign, 5).Value <> Cells(Lign + 1, 5).Value Then

c'est quand même étrange parce que j'ai créé des liaisons sur notre fichier test et ça marche quand même sur celui-ci

Bonjour,

Compte tenu du nombre de fichiers tests échangés ... sommes-nous sûrs de parler du même ... ???

De mon côté ... aucun bug ... peux te joindre à nouveau ton fichier qui plante ...???

Rechercher des sujets similaires à "erreur execution incompatibilite type"