VBA - Problème de selection de la première colonne vide

TgR

XLDnaute Junior
Bonjour,

je suis confronté à un problème plutôt basique mais dont je ne trouve pas la solution pour le moment. Je souhaite tout simplement sélectionner la première colonne vide de ma feuille excel afin d'y mettre des informations. Bien que reprenant un code déjà utilisé 2 lignes plus hautes (avec la variable celluleDate), ça ne marche pas !


Le voici

Code:
With Sheets("Indicateurs")
   Set celluleDate = .Range("A2").End(xlToRight).Offset(0, 1).Columns
   celluleDate = Date
   Set cellDepart = .Range("A3")
   For i = 0 To nbCases
      cellDepart.Offset(i, 0).Value = tableauConso(i).partNumber
      cellDepart.Offset(i, 1).Value = tableauConso(i).designation
      cellDepart.End(xlToRight).Offset(i, 1).Columns = tableauConso(i).conso
   Next i
End With


La ligne qui ne va pas est la suivante :

Code:
cellDepart.End(xlToRight).Offset(i, 1).Columns = tableauConso(i).conso

En fait ce code va me mettre les informations correctement à la première passe donc :

A3 - B3 - C3

mais dès le deuxime for, la boucle devient :

A4 - B4 - D4

Alors que la cellule C4 est bien vide.

Une idée ?

Merci
 

TgR

XLDnaute Junior
Re : VBA - Problème de selection de la première colonne vide

Je pensais que c'était parce que ma cellule était référencée en A3 au départ mais non, puisque je mets offset(i, 1). Donc à chaque fois je suis sensé descendre d'une ligne..
 

Yakou

XLDnaute Nouveau
Re : VBA - Problème de selection de la première colonne vide

Bonjour,

si tu écris en "A3" il te faudrait les titres en "A2" car cette fonction compte "les colones non vide" qui se suivent. (jusqu'à la 1ère celulle vide rencontré).

cellDepart.End(xlToRight).Offset(ligne, 0).Columns



Avec cette syntaxe tu définis "A3" en point de référence sur le calcul d'offset.

Set cellDepart = .Range("A3")


sur la 1ère écriture:

Tu as 2 champs écrit au moment de cette syntaxe ("A3" et "B3")
'cellDepart.End(xlToRight).Offset(ligne, 0).Columns

il compte 2 colones et t'ajoute le résultat en "C3".


sur la 2nd écriture:

Tu as écris de "A3" jusqu'à "C3"
Tu as donc 3 champs colone non vide.

Il va compter 3 colones sur cette syntaxe (vu qu'il se base sur ton point de référence "cellDepart en A3"

cellDepart.End(xlToRight).Offset(ligne, 0).Columns

Il va donc t'écrire le résultat en "D4".
La suite de tes écritures seront toutes en "D" & ligne


si tu souhaitais écrire en ligne 3, tu pouvais utiliser simplement:
cellDepart.Offset(ligne, 2).Value = <resultat>


J'ai testé sur une feuille le code ci-dessous pour comprendre ta demande.
en mettant des titres dans les cellules "A2" jusqu'en "E2"

----------------

Sub wirte_data()


With Sheets("Indicateurs")


dim cellDepart as range
static ligne as byte

Set cellDepart = .Range("A2")

For ligne = 1 To 10

cellDepart.Offset(ligne, 0).Value = "A" & ligne
cellDepart.Offset(ligne, 1).Value = "B" & ligne
cellDepart.End(xlToRight).Offset(ligne, 0).Columns = "colone_fin " & ligne

Next

End With

Set cellDepart = nothing

End Sub
 
Dernière édition:

TgR

XLDnaute Junior
Re : VBA - Problème de selection de la première colonne vide

Salut,

En fait j'ai besoin qu'à chaque lancement de la macro, les nouvelles données s'insèrent dans la première colonne vide, tout à droite. J'ai trouvé ceci qui marche très bien :

cellDepart.Offset(i).End(xlToRight).Offset(, 1) = tableauConso(i).conso

Merci de ton aide :)
 

Yakou

XLDnaute Nouveau
Re : VBA - Problème de selection de la première colonne vide

si tes colones reste sous le même model
le code devrait donner ça.


Sub wirte_data()

Dim cellDepart As Range
Dim cellFin As Range
Static ligne, nbcase As Byte


With Sheets("Indicateurs")


Set cellDepart = .Range("A3")
Set cellFin = cellDepart.End(xlToRight).Offset(0, 0).Columns

nbcase = 10
For ligne = 0 To nbcase

cellFin.Offset(ligne + 1, 1).Value = "A" & ligne
cellFin.Offset(ligne + 1, 2).Value = "B" & ligne
cellFin.Offset(ligne + 1, 3).Value = "C" & ligne

Next

End With

Set cellDepart = Nothing
Set cellFin = Nothing

End Sub




si tes colones bouge a selon les lignes.
le code devrait donner ça.


Sub Wirting_AutoAjust()

Dim cellDepart As Range
Dim cellFin As Range
Static ligne, nbcase As Byte


With Sheets("Indicateurs")

nbcase = 10
For ligne = 0 To nbcase

Set cellDepart = .Range("A" & 3 + ligne)
Set cellFin = cellDepart.End(xlToRight).Offset(0, 0).Columns

cellFin.Offset(0, 1).Value = "A" & ligne
cellFin.Offset(0, 2).Value = "B" & ligne
cellFin.Offset(0, 3).Value = "C" & ligne

Next

End With

Set cellDepart = Nothing
Set cellFin = Nothing
Set celluleDate = Nothing

End Sub
 

Discussions similaires

Réponses
0
Affichages
147

Statistiques des forums

Discussions
312 169
Messages
2 085 914
Membres
103 036
dernier inscrit
Greg33091