Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2011, 16h21   #1
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
Par défaut Nombre de colonnes

Bonjour,

Pour trouver mon nombre de colonnes le code ci-dessous fonctionnait tès bien
Code :
vNbCol = vWst.Cells(1, Columns.Count).End(xlToLeft).Column
et hier sans que cette partie du programme, le classeur et les feuilles utilisées n'aient subi de modification la procédure plantait sur cette ligne avec Msgbox "erreur d'automation"
J'ai utilisé successivement 2 autres méthodes
Code :
1
2
3
4
5
6
7
8
9
10
 
Dim vNbCol As Integer
vNbCol = 0
    Do While vWst.Cells(1, vNbCol + 1) <> ""
        vNbCol = vNbCol + 1
    Loop
 
puis,
 
vNbCol = vWst.UsedRange.Columns.Count
qui on fonctionné parfaitement bien. Je les ai remplacées par la formule initiale et tout est redevenu nickel.

Les questions sont :
Qu'a-t-il bien pu se produire ?
Est ce que la formule en cause n'est pas fiable ?
Sachant que les feuilles sont structurées comme une base de données, et que la ligne 1 contient les noms de champ (26 maxi), la méthode Do while ne serait-elle pas la plus fiable ?

Merci
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 16h34   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Code :
vNbCol = vWst.Cells(1, vWst.Columns.Count).End(xlToLeft).Column
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/11/2011, 17h14   #3
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
Bonjour,

Tu ne comptes pas la même chose avec chacun de tes codes.

Avec vWst.Cells(1, vWst.Columns.Count).End(xlToLeft).Column , tu relèves le numéro de la première colonne renseignée en partant de l’extrémité droite de la feuille et en allant vers la gauche.
En clair, tu obtiens le numéro de la dernière colonne renseignée.

Avec la boucle Do While, tu comptes le nombre de cellules renseignées, mais ce comptage s’arrête dès qu’une cellule vide est rencontrée. Si tu n’as aucune cellule vide dans ta plage, le résultat sera le même.

Avec UsedRange.Columns.Count, tu comptes le nombre de colonnes de la plage utilisée. Si ta plage n’est pas décalée, le résultat sera le même. Par contre, si la première colonne est vide par exemple, elle ne sera pas comptée.
Au final, si les 26 premières cellules de ta ligne 1 sont renseignées, tu obtiendras le même résultat avec les 3 codes.

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 15h42   #4
Nouveau Membre du Club
 
Homme Daniel CARROUE
Retraité actif passionné
Inscription : janvier 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Daniel CARROUE
Localisation : France

Informations professionnelles :
Activité : Retraité actif passionné

Informations forums :
Inscription : janvier 2011
Messages : 75
Points : 31
Points : 31
Merci beaucoup à tous les deux.
Cordialement
Daniel
danisoaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h37.


 
 
 
 
Partenaires

Hébergement Web