Parcour de colonnes, éviter les B@, C@

xyam

XLDnaute Nouveau
Bonjour à tous,

Présentation globale (peut être zappé):
Voila je suis actuellement sur un petite application VBA qui permet à l'utilisateur celon un critère (plage de Date) de récupérer un fichier CSV qui se compose comme ci dessous :
<Header> 16 lignes
<UX> 43 lignes
<UE> 50 lignes </UE>
</UX>
</Header>

Sachant que un HEADER peux contenir plusieurs UX, et que un UX peux contenir plusieurs UE

Vous tenez le coup ? :)

Pour cela l'application en caché suis le traitement suivant :
-Connexion en ODBC à la base de donnée
-Exécute la requête
-Pour chaque ligne de l'extraction regarde si c'est un HEADER, UX ou UE (en feuille 2 par exemple)
-Puis le place sur la feuille 1, a raison de un header par ligne


Si vous avez réussi à comprendre, je vous en re-merci sinon désolé :confused:

Le problème :
Quand je parcour ma feuille en VBA, j'utilise le code suivant :

Code:
colone = colone + 1 'Le numero de colone
NumCol = Cells(ligne, colone).Column
lettre = IIf(NumCol > 26, Chr(64 + NumCol \ 26) & Chr(64 + NumCol Mod 26), Chr(64 + NumCol))
newcell = lettre & ligne
ActiveWorkbook.Sheets("CSV").Range(newcell).Value = "$null"

Le soucis survient dès que la variable colone = 52 soit juste après "AY" car au lieu de passer à "AZ" je passe à "B@"
si j'ajoute +2 à ma variable colone alors je passe à "BA"

Vu que la manipulation est répétée jusqu’à un maximum de 50 UE dans un UX (voir description globale) peut-on remplacer cette valeur ? dans l'exemple cité ci-dessus "B@" par "AZ" mais aussi dans les autres cas "C@" par "BZ" etc...

En vous remerciant d'avoir lu, et tenter de me comprendre, Cordialement
 
Dernière édition:

James007

XLDnaute Barbatruc
Re : Parcour de colonnes, éviter les B@, C@

Bonjour,

Je n'ai pas testé ta fonction ...
Perso, j'utilise celle là :
Code:
Public Function CLettre(rng As Range) As String
' Code by Tom Olgivy
CLettre = Left(rng.Address(False, False), 1 - CInt(rng.Column > 26))
End Function

A +
 

Efgé

XLDnaute Barbatruc
Re : Parcour de colonnes, éviter les B@, C@

Bonjour xyam,
Pas certain d'avoir compris mais:
A quoi sert
Code:
NumCol = Cells(ligne, colone).Column
puisqu'il semble que tu le connaisse (NumCol = colone) non?
Pour récupérer la lettre de la colonne tu peux regarder ceci:
Code:
[COLOR=blue]Sub[/COLOR] Lettre_col()
LetCol = Split(Cells(1, 5).Address, "$")(1)
MsgBox Cells(1, 5).Address
MsgBox LetCol
[COLOR=blue]End Sub[/COLOR]
Mais il ne semble pas nécessaire de touver cette lettre.
Je pense que
Code:
 colone = colone + 1 
ActiveWorkbook.Sheets("CSV").Cells(ligne, colone)= "$null"
suffirai

Mais je suis peut être à coté de la plaque.
Un exemple serait utile à tous.
Cordialement
 

xyam

XLDnaute Nouveau
Re : Parcour de colonnes, éviter les B@, C@

Merci de vos réponses rapide,

Je n'ai pas encore testé vos solutions de recherche de lettre,
je vois ça tout à l'heure car j'ai faim ^^

Mais Efgé en ce qui concerne ta Solution "Bis"

Code:
 colone = colone + 1 
ActiveWorkbook.Sheets("CSV").Cells(ligne, colone)= "$null"

Je l'avais déjà testé car cela m'aurai permis de gagner pas mal de temps, mais elle me renvoyait l'erreur suivante :
Erreur '1004'
Erreur définie par l'application ou par l'objet


En vous remerciant j'éditerais pour vous tenir au courant, bonne ap à tous
 

Efgé

XLDnaute Barbatruc
Re : Parcour de colonnes, éviter les B@, C@

Re xyam, Bonjour James007 nous nous sommes croisés mais je ne peux éditer mes posts...

xyam, si tu as une erreur 1004, je pense qu'il faut vérifier ta façon de valoriser tes variables ligne et colone.
Chez moi (2003) ceci fonctionne:
Code:
[COLOR=blue]Sub[/COLOR] Test()
colone = 1: ligne = 5
colone = colone + 1
ActiveWorkbook.Sheets("CSV").Cells(ligne, colone) = "$null"
[COLOR=blue]End Sub[/COLOR]

Cordialement
 

xyam

XLDnaute Nouveau
Re : Parcour de colonnes, éviter les B@, C@

Merci de votre temps ;)

J'ai testé dans un autre SUB ça marche bien, c'est peut être du au fait que c'est un Sub avec paramètre ?

extrait du code :

Prog Principal
Code:
Sub programme_principal()
'
' Traitement Globale
'

'Définition des variables
Dim curligne 'Curseur de ligne
Dim curcolone 'Curseur de colone
Dim i
Dim y


'Affectation
curligne = 1
curcolone = 3

Sheets("CSV").Select



'Recherche la dernière ligne vide
While Cells(curcolone, curligne) <> ""
curligne = curligne + 1
Wend
valeur = "BIG TEST"

Call header(curligne, curcolone, valeur)
....

Sub appeler
Code:
Sub header(a, b, c)
'
'Génère un header avec les valeurs passées en paramètre
'

'Définition des variables
Dim colone
Dim ligne
Dim i
Dim newcell

'Affectation des variables
colone = a
ligne = b


'Traitement

'test
ActiveWorkbook.Sheets("CSV").Range(ligne, colone).Value = "$null"

....

Peut être au niveau de la définition, je ne sais pas :confused:
Je vais test vos première solution déjà avec les lettres
Merci à vous, Efgé & James007

EDIT :
Je viens de me rendre compte (temps de digestion surement) mais qu'il faut utiliser
Code:
[FONT="Courier New"]ActiveWorkbook.Sheets("CSV").[COLOR="red"][B]Cells[/B][/COLOR](ligne, colone).Value = "$null" [/FONT]
et Non
Code:
[FONT="Courier New"]ActiveWorkbook.Sheets("CSV").[B][COLOR="red"]Range[/COLOR][/B](ligne, colone).Value = "$null"[/FONT]

Et ça fonctionne merci encore à vous
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Parcour de colonnes, éviter les B@, C@

Re
Je ne suis pas certain de ça :
Code:
Cells(curcolone, curligne)
Peut être
Code:
Cells(curligne, curcolone)
Pour trouver la première ligne vide sous une colonne (la C par exemple) on peux utiliser ceci:
Code:
curligne = Sheets("CSV").Cells(Rows.Count, 3).End(xlUp).Row + 1
PS Je viens de voir ton EDIT mais je laisse quand même mes remarques.
Cordialement
 

Discussions similaires

Réponses
2
Affichages
178
Réponses
7
Affichages
346
Réponses
2
Affichages
285

Statistiques des forums

Discussions
312 520
Messages
2 089 297
Membres
104 092
dernier inscrit
karbone57