problématique déclaration de variable / comparaison de variable

anbert

XLDnaute Nouveau
Bonjour à tous,

J'ai passé pas mal de temps à réaliser cette macro pour de la gestion de prise de connaissance.
Je l'ai écrite sur excel mac 2011

La macro fonctionnait sur la première feuille, mais ceci, c'était quand j'utilisais juste des chiffres dans les cases.
J'ai tenté de réorganiser mes variables pour avoir une écriture plus propre, et de passer sur des données plus réelles qui sont notamment du texte.

--> Erreurs.
Je ne trouve pas ce qui ne marche pas.
Mes pistes :
- erreur dans la déclaration de variables
- erreur dans la comparaison que je fais pour mes boucles entre la valeur d'une cellule et une variable.

Les valeurs des variables sont définies via le tableau principal sur la première page.
 

Pièces jointes

  • Sommaire_documents.xlsm
    57.1 KB · Affichages: 23

Florian53

XLDnaute Impliqué
Bonjour anbert,

C'est normal que ton code plante, si "Perscol" est déclaré en string il ne pourra recevoir que du texte.
Si Perscol.value = 73 le fait de déclarer cette variable en String il le retranscrira en "73", chose qu'il n'est pas réutilisable dans cells.

Soit tu déclare en "Variant" ( Un ptit fourre tout qui prends tout ) ou tu déclare en "Integer"

Dim ColFinPers, PersLig, PersCol As Variant 'variables des references colonnes et lignes personnes

ou

Dim ColFinPers, PersLig, PersCol As Integer 'variables des references colonnes et lignes personnes
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir anbert

D'après le fichier tu as 2 feuilles plus un classeur de destination, si j'ai bien lus.

Étant donné qu'en général on écrit soit Sheets(1) , soit Sheets("Feuil1") tu remarque que Nomfeuille n'a pas de guillemets. Vu que tu as 2 classeurs, il vaut mieux écrire

Set Wsh = Thisworkbook.Sheets("Extraction")

With Wsh
While .Cells(PersLig, PersCol).Value <> ColFinPers
Wend
End With

EDIT: bonsoir Florian
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir.
La méthode Cells c'est bien Cells(ligne, colonne)
ligne peut être String ou un type numérique, pourvu qu'il soit convertible en un numéro de ligne.
colonne doit être soit un numéro de colonne obligatoirement numérique, soit un entête de colonne String.
Mais un conseil: n'utilisez plus cette méthode. Travaillez avec des tableaux VBA, c'est considérablement plus rapide.
La propriété Value d'un Range de plusieurs cellules contiguës est justement directement un tableau 2D basé 1, en entrée comme en sortie.
Un type de données spécifié à la fin d'un Dim ne s'applique qu'à la dernière variable. Les autre, sans type précisé, se retrouvent Variant.
Bonsoir Florian53 et Lone-wolf.
 

anbert

XLDnaute Nouveau
Bonsoir à tous, et merci pour vos réponses.

@Florian53:
Je viens de distinguer les variables. Celles chiffrées (lignes, colonnes) que j'ai mis en Integer, de celles plus texte en Variant/string.
Le bug n'est plus le même, mais est présent à la ligne (voir ci dessous)

@Lone-wolf:
en fait NomFeuille est une variable, d'où l'absence de guillemets. Elle est définie 2 lignes au dessus :)
Par contre, effectivement, mon code n'est pas très beau et je préfère l'exemple que tu donnes.

@Dranreb :
Je ne connais pas / N'ai pas compris ton histoire de tableau :-s Je vais faire des recherches.
En dehors de cette autre méthode, je suis normalement bien en numérique.

Mais bug touours présent à la ligne :
If Cells(GrpLig, GrpCol).Value <> LigFinGrp Then
LigFinGrp, c'est du texte.
Je me demande si il ne faut pas que je créé une variable texte pour le résultat Cells(GrpLig, GrpCol).Value, de type texte egalement.
 

Pièces jointes

  • Sommaire_documents.xlsm
    54.2 KB · Affichages: 16

anbert

XLDnaute Nouveau
Bizarre, je ne manipule que des chiffres.
Mais je viens de mettre en place deux nouvelles variables de manière à restaurer certaines valeurs d'origine.
Le bug semble passé.
Je trouve d'autres défauts, mais plus lié à mon écriture, il va falloir que je vérifie.
Merci bcp pour votre aide.
 

Discussions similaires

Statistiques des forums

Discussions
312 081
Messages
2 085 161
Membres
102 800
dernier inscrit
NOTZ