macro : incompatibilité de type

  • Initiateur de la discussion Initiateur de la discussion kakachi
  • Date de début Date de début

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 !

K

kakachi

Guest
bonsoir,
j'ai codé une macro " archiver " mais quand je l'exécute, j'ai ce message " incompatibilité de type ", je ne sais pas comment résoudre ce problème
voici le le code :

En rouge, l'incompatibilité de type

Sub Archiver()

Dim num_position(17) As Byte
Dim i As Integer

Sheets("Jeu_Résultats").Select
Range("K2").Select
date_position = Range("K2").Value
If date_position = "" Then Exit Sub

For i = 1 To 17
num_position(i) = Range("L6").Offset(i - 1, 0).Value
If IsEmpty(num_position(i)) Then
End If
Next i

Sheets("Archives").Select
Range("A1").Select
If Range("A3").Value <> "" Then ActiveCell.End(xlDown).Select
ActiveCell.Offset(2, 0).Select
ActiveCell.Value = date_position

For i = 1 To 17
ActiveCell.Offset(0, i).Value = num_position(i)
Next i

End Sub

si une personne peut m'aider 🙂

@+ !!! et bonne nuit
 
Re : macro : incompatibilité de type

Bonsoir,

Dans une de tes cellules de la colonne L, n'aurais tu pas une donnée texte qui traine?
(simple hypothèse sans voir le fichier)

Bonne nuit,

mth

Edit: 🙂 Bonsoir Fred0o 🙂
 
Dernière édition:
Re : macro : incompatibilité de type

Bonsoir Kakachi,

Sans le fichier qui contient les données, difficile de viser juste. D'après ton code, tu as déclaré la variable num_position() comme un byte, c'est à dire un entier compris entre 0 et 255. si jamais ta cellule Range("L6").Offset(i - 1, 0) contient tout autre type de donnée (réel, entier <0 ou >255, texte, date, ...) ceci peut être à l'origine du plantage.

Donc, vérifie bien le contenu des cellules que tu essaie de stocker dans num_position() et adapte ta variable ou la référence à la cellule en conséquence.

[Bing...] Bonsoir mth

A+
 
Dernière édition:
Re : macro : incompatibilité de type

Bonsoir,

Tu bloques ici :
num_position(i) = Range("L6").Offset(i - 1, 0).Value

Cette ligne semble indiquer que tu dois avoir des données numériques dans les cellules L5 à L22, le tableau num_position ayant été déclaré comme Byte.
 
Re : macro : incompatibilité de type

Bonsoir,

je vous joins mon fichier excel pour visualiser le problème 🙂
désolé le fichier est trop important et même en le zippant ça ne passe pas !!

dans la colonne " L6:L22, j'ai cette formule suivante :
" =SI(ESTNA(EQUIV(N6;$D$4:$F$4;0));" ";LIGNE(1:1)) " que j'ai tiré jusqu'à L22
elle me renvoie une valeur comprise entre 1 et 20 en fonction d'un autre tableau
l'intitulé de la colonne " L6:L22 " est : P.G. = Position Gagnante
je n'arrive toujours pas a comprendre mon erreur d'incompatibilité de type

bonne soirée et @+ !!!
 
Dernière modification par un modérateur:
Re : macro : incompatibilité de type

Bonjour à tous
La formule
Code:
[COLOR="DarkSlateGray"][B]=SI(ESTNA(EQUIV(N6;$D$4:$F$4;0));[COLOR="Red"]" "[/COLOR];LIGNE(1:1))[/B][/COLOR]
renvoie une espace si la valeur de
Code:
[COLOR="DarkSlateGray"][B]ESTNA(EQUIV(N6;$D$4:$F$4;0))[/B][/COLOR]
est VRAI. Donc le résultat de cette formule ne doit pas être affectée à une variable numérique. Je pense qu'il faut déclarer
Code:
[COLOR="DarkSlateGray"][B]Dim num_position(17) As [COLOR="Red"]Variant[/COLOR][/B][/COLOR]
ROGER2327
#4403


Lundi 23 Haha 138 (Chapeau de Bosse-de-Nage, ST)
7 Brumaire An CCXIX
2010-W43-4T00:06:52Z
 
Re : macro : incompatibilité de type

Bonjour,

Je pense que Softmama a vu juste :

Tu bloques ici :
num_position(i) = Range("L6").Offset(i - 1, 0).Value

Cette ligne semble indiquer que tu dois avoir des données numériques dans les cellules L5 à L22, le tableau num_position ayant été déclaré comme Byte.
Dans ta boucle
Code:
For i = 1 To 17
[COLOR=black]num_position(i) = Range("L6").Offset([COLOR=red][B]i - 1[/B][/COLOR], 0).Value[/COLOR]
   If IsEmpty(num_position(i)) Then
   End If
Next i
Lors du premier passage, num_position(1) prend la valeur de L5, donc tu essaie d'affecter une chaîne "P.G." à une variable numérique.
Si tu modifie ton code par :
Code:
[COLOR=black]num_position(i) = Range("L6").Offset([COLOR=red][B]i[/B][/COLOR], 0).Value[/COLOR]
L'erreur ne devrait plus se produire.

A+
 
Re : macro : incompatibilité de type

Bonjour à tous,

la solution proposée par Roger marche très bien 🙂
Merci aux autres d'avoir proposé une solution 🙂

cependant, j'ai un autre problème, dans ma feuille " archives ", les résultats ne s'affichent pas dans les colonnes que je veux
après plusieurs tentatives, j'obtiens toujours le même résultats,

je joins mon fichier excel pour que visualiser le problème

Bonne journée, @+ !!!
 

Pièces jointes

Re : macro : incompatibilité de type

Re bonjour,

Voici le code modifié qui fonctionne :
Code:
Sub Archiver()
    Dim num_position(17) As Variant
    Dim i As Integer
    
    Sheets("Jeu_Résultats").Select
    Range("K2").Select
    date_position = Range("K2").Value
    If date_position = "" Then Exit Sub
    
    For i = 1 To 17
        num_position(i) = Range("L6").Offset(i - 1, 0).Value
        If IsEmpty(num_position(i)) Then
        End If
    Next i
    
    Sheets("Archives").Select
    Range("A2").Select
    If Range("A3").Value <> "" Then ActiveCell.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    ActiveCell.Value = date_position
    j = 1
    For i = 1 To 17
        If num_position(i) <> " " Then
            ActiveCell.Offset(0, j).Value = num_position(i)
            j = j + 1
        End If
    Next i
End Sub

A+
 
Re : macro : incompatibilité de type

Bonsoir,
je reviens vers vous car j'ai toujours des problèmes avec ma macro " archiver ".
je souhaite archiver les résultats de plusieurs colonnes qui se trouvent dans la feuille " Jeu_Résultats ", dans ma feuille " Archives ". Avec la solution de FredOo, le code fonctionne bien pour une colonne🙂

j'ai essayé a partir de ce code, de chercher un autre code pour pourvoir prendre en compte toute mes colonnes mais je n'y suis pas arrivé 😱😱
je ne vois pas comment solutionner mon problème 😱

je vous joins mon fichier excel 🙂

Bonne soirée et @+
 

Pièces jointes

Re : macro : incompatibilité de type

bonsoir,

Je t'ai fais un code dans le fichier joint. Celui-ci fonctionne bien pour les données que tu as rempli.

Regarde comment il est construit et essaie de l'adapter à ton fichier réel.

J'ai tout de même une remarque à faire : Tu n as une drôle de manière de classer tes données dans l'onlet Jeu-Résultats. Ceci rend le traitement des données donc le code plus complexe. Essaie de simplifier tout cela.

A+
 

Pièces jointes

Re : macro : incompatibilité de type

re bonsoir,

merci FreedOo pour ton code 🙂
comme tu as dit dans ton message, je vais l'étudier et l'adapter a mon fichier réel 🙂
je vais essayer de simplifier mes données de la feuille " Jeu-Résultats "

Bonne soirée, @+ !!!
 
Re : macro : incompatibilité de type

re bonsoir,

FredOo, j'ai analysé ton code mais je ne comprend pas tout.
il y a une boucle dans ton code que je ne parviens pas a comprendre
voici cette boucle:

For k = 1 To 18
For i = 1 To 17
num_position(i, k) = Range("L5").Offset(i + IIf(k < 10, 0, 23), (IIf(k < 10, k, k - 9) - 1) * 6).Value
Next i
Next
Si tu peux me donner des explications sur cette boucle 🙂🙂

A+ !!!
 
Re : macro : incompatibilité de type

re-bonsoir,

Je vais essayer de t'expliquer :

Tu as sur la feuille, 18 tableaux de chacun 17 lignes. Ces tableaux sont rangés sur 2 rangées de 9 tableaux chacune. Les 2 rangées on 23 lignes d'écart et chaque tableau est séparé du suivant par 6 colonnes. Cette disposition m'a fait écrire la remarque sur la bizarrerie de ta feuille.

La première boucle
Code:
For k = 1 to [COLOR=blue][B]18[/B][/COLOR]
sert à parcourir les 18 tableaux de résultats.

La deuxième boucle
Code:
For i = 1 to [COLOR=red][B]17[/B][/COLOR]
sert à parcourir les 17 lignes de chaque tableau de résultats.

J'utilise ensuite la variable num_position(i, k) qui est un tableau à 2 dimensions. La première dimension contient 17 éléments correspondant au nombre de lignes et la deuxième dimension contient 18 éléments correspondant au nombre de tableaux de résultats.
J'initialise donc ce tableau en le remplissant du contenu de chacune des 17 lignes de chacun des 18 tableaux, avec la formule
Code:
Range("L5").Offset(i + IIf(k < 10, 0, [COLOR=seagreen][B]23[/B][/COLOR]), (IIf(k < 10, k, k - 9) - 1) * 6).Value
que nous allons décomposer.

La fonction IIF() agit comme un If .. Then .. Else. On peurrait donc traduire le
Code:
IIf(k < 10, 0, [COLOR=seagreen][B]23[/B][/COLOR])
par un
Code:
If k < 10 Then
   0
Else
   [B][COLOR=seagreen]23[/COLOR][/B]
End If
Donc, à partir de "L5", j'ai un offset de i lignes si k > 10 et i+23 lignes si k >= 10.
Je teste si k>10 car la première rangée de tableaux comporte 9 éléments et à partir du dixième, il me faut repartir en colonne "L" et en ligne i+23.

Ensuite, c'est le même principe pour l'offset en colonne :
Code:
IIf(k < 10, k, k - 9) - 1) * 6
Ici, je me décale de 6 colonnes à chaque incrémentation de k jusqu'à 9 puis à partir de 10, je retranche 9 et je multiplie par 6 pour me décaler de 6 colonnes mais dans la rangée inférieure des tableaux.

Voilà.

Pas sûr d'avoir été très clair mais je fais d mon mieux. N'hésites pas à redemander des explications si tu en as besoin.

Bonsoir.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
906
Réponses
15
Affichages
775
Réponses
8
Affichages
390
Réponses
4
Affichages
729
Réponses
10
Affichages
661
Retour